@skillkit/tui 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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/components/Header.tsx","../src/components/SkillList.tsx","../src/components/StatusBar.tsx","../src/components/SearchInput.tsx","../src/hooks/useKeyboard.ts","../src/hooks/useMemory.ts"],"sourcesContent":["import { render } from 'ink';\nimport { App } from './App.js';\n\nexport function startTUI(): Promise<void> {\n process.stdout.write('\\x1B[2J\\x1B[0f');\n\n const { waitUntilExit, clear } = render(<App />, {\n exitOnCtrlC: true,\n });\n\n return waitUntilExit().then(() => {\n clear();\n });\n}\n\n// Re-export types and components for external use\nexport type { Screen } from './App.js';\nexport { App } from './App.js';\nexport * from './components/index.js';\nexport * from './screens/index.js';\nexport * from './hooks/index.js';\nexport * from './theme.js';\n","import { useState } from 'react';\nimport { Box, Text, useInput, useApp, useStdout } from 'ink';\nimport { Sidebar } from './components/Sidebar.js';\nimport { Home } from './screens/Home.js';\nimport { Browse } from './screens/Browse.js';\nimport { Installed } from './screens/Installed.js';\nimport { Sync } from './screens/Sync.js';\nimport { Settings } from './screens/Settings.js';\nimport { Recommend } from './screens/Recommend.js';\nimport { Translate } from './screens/Translate.js';\nimport { Context } from './screens/Context.js';\nimport { Workflow } from './screens/Workflow.js';\nimport { Execute } from './screens/Execute.js';\nimport { History } from './screens/History.js';\nimport { Marketplace } from './screens/Marketplace.js';\nimport { Memory } from './screens/Memory.js';\n\nexport type Screen = 'home' | 'browse' | 'installed' | 'sync' | 'settings' | 'recommend' | 'translate' | 'context' | 'workflow' | 'execute' | 'history' | 'marketplace' | 'memory';\n\nexport function App() {\n const [screen, setScreen] = useState<Screen>('home');\n const { exit } = useApp();\n const { stdout } = useStdout();\n\n const cols = stdout?.columns || 80;\n const rows = stdout?.rows || 24;\n const showSidebar = cols >= 70;\n\n const NAV_KEYS: Record<string, Screen> = {\n h: 'home',\n m: 'marketplace',\n b: 'browse',\n w: 'workflow',\n x: 'execute',\n y: 'history',\n r: 'recommend',\n t: 'translate',\n c: 'context',\n e: 'memory',\n i: 'installed',\n s: 'sync',\n ',': 'settings',\n };\n\n useInput((input, key) => {\n if (input === 'q') {\n exit();\n return;\n }\n if (key.escape) {\n setScreen('home');\n return;\n }\n const targetScreen = NAV_KEYS[input];\n if (targetScreen) {\n setScreen(targetScreen);\n }\n });\n\n const renderScreen = () => {\n switch (screen) {\n case 'home': return <Home onNavigate={setScreen} cols={cols} rows={rows} />;\n case 'browse': return <Browse cols={cols} rows={rows} />;\n case 'installed': return <Installed cols={cols} rows={rows} />;\n case 'sync': return <Sync cols={cols} rows={rows} />;\n case 'settings': return <Settings cols={cols} rows={rows} />;\n case 'recommend': return <Recommend cols={cols} rows={rows} />;\n case 'translate': return <Translate cols={cols} rows={rows} />;\n case 'context': return <Context cols={cols} rows={rows} />;\n case 'workflow': return <Workflow cols={cols} rows={rows} />;\n case 'execute': return <Execute cols={cols} rows={rows} />;\n case 'history': return <History cols={cols} rows={rows} />;\n case 'marketplace': return <Marketplace cols={cols} rows={rows} />;\n case 'memory': return <Memory cols={cols} rows={rows} />;\n }\n };\n\n const contentHeight = rows - 2;\n\n return (\n <Box flexDirection=\"column\" height={rows}>\n <Box flexDirection=\"row\" height={contentHeight}>\n {showSidebar && <Sidebar screen={screen} onNavigate={setScreen} />}\n <Box flexDirection=\"column\" flexGrow={1} marginLeft={1}>\n {renderScreen()}\n </Box>\n </Box>\n <Box>\n <Text dimColor>h Home m Market b Browse i Inst w Wflow x Exec y Hist r Rec t Trans c Ctx e Mem s Sync , Cfg q Quit</Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport type { Screen } from '../App.js';\n\ninterface SidebarProps {\n screen: Screen;\n onNavigate: (screen: Screen) => void;\n isCompact?: boolean;\n}\n\nconst NAV: { id: Screen; label: string; key: string }[] = [\n // Discovery\n { id: 'home', label: 'Home', key: 'h' },\n { id: 'marketplace', label: 'Marketplace', key: 'm' },\n { id: 'browse', label: 'Browse', key: 'b' },\n // Execution\n { id: 'workflow', label: 'Workflows', key: 'w' },\n { id: 'execute', label: 'Execute', key: 'x' },\n { id: 'history', label: 'History', key: 'y' },\n // Tools\n { id: 'recommend', label: 'Recommend', key: 'r' },\n { id: 'translate', label: 'Translate', key: 't' },\n { id: 'context', label: 'Context', key: 'c' },\n { id: 'memory', label: 'Memory', key: 'e' },\n // Management\n { id: 'installed', label: 'Installed', key: 'i' },\n { id: 'sync', label: 'Sync', key: 's' },\n { id: 'settings', label: 'Config', key: ',' },\n];\n\nexport function Sidebar({ screen }: SidebarProps) {\n return (\n <Box flexDirection=\"column\" width={14} borderStyle=\"single\" paddingX={1}>\n <Text bold color={colors.primary}>SkillKit</Text>\n\n {/* Discovery (0-2) */}\n {NAV.slice(0, 3).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Text> </Text>\n\n {/* Execution (3-5) */}\n {NAV.slice(3, 6).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Text> </Text>\n\n {/* Tools (6-9) */}\n {NAV.slice(6, 10).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Text> </Text>\n\n {/* Management (10-12) */}\n {NAV.slice(10).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Box flexGrow={1} />\n\n <Text dimColor>? Help</Text>\n <Text dimColor>q Quit</Text>\n </Box>\n );\n}\n","import chalk from 'chalk';\n\nexport const colors = {\n primary: 'white',\n secondary: 'white',\n secondaryDim: 'gray',\n success: 'white',\n danger: 'white',\n warning: 'white',\n background: 'bgBlack',\n borderDim: 'gray',\n};\n\nexport const symbols = {\n pointer: chalk.white('❯'),\n bullet: '●',\n checkboxOn: chalk.white('✔'),\n checkboxOff: chalk.dim('✖'),\n check: chalk.white('✓'),\n star: '★',\n spinner: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],\n arrowUp: '↑',\n arrowDown: '↓',\n success: '✓',\n error: '✗',\n warning: '⚠',\n info: 'ℹ',\n};\n\nexport const logo = `\n███████╗██╗ ██╗██╗██╗ ██╗ ██╗ ██╗██╗████████╗\n██╔════╝██║ ██╔╝██║██║ ██║ ██║ ██╔╝██║╚══██╔══╝\n███████╗█████╔╝ ██║██║ ██║ █████╔╝ ██║ ██║\n╚════██║██╔═██╗ ██║██║ ██║ ██╔═██╗ ██║ ██║\n███████║██║ ██╗██║███████╗███████╗██║ ██╗██║ ██║\n╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝\n`;\n","import { useState, useEffect } from 'react';\nimport { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\nimport { Box, Text } from 'ink';\nimport { colors, logo } from '../theme.js';\nimport type { Screen } from '../App.js';\n\ninterface HomeProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nconst CHARS = '01█▓▒░╔╗╚╝║═';\n\nconst logoSmall = `\n╔═╗╦╔═╦╦ ╦ ╦╔═╦╔╦╗\n╚═╗╠╩╗║║ ║ ╠╩╗║ ║\n╚═╝╩ ╩╩╩═╝╩═╝╩ ╩╩ ╩\n`.trim();\n\nfunction getVersion(): string {\n try {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const packageJsonPath = join(__dirname, '../../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n return packageJson.version || '1.2.0';\n } catch {\n return '1.2.0';\n }\n}\n\nfunction scramble(target: string, progress: number): string {\n return target.split('\\n').map(line => {\n return line.split('').map((char, i) => {\n if (char === ' ') return char;\n if (progress > (i / line.length) * 100) return char;\n return CHARS[Math.floor(Math.random() * CHARS.length)];\n }).join('');\n }).join('\\n');\n}\n\nexport function Home({ cols = 80, rows = 24 }: HomeProps) {\n const [progress, setProgress] = useState(0);\n const [display, setDisplay] = useState('');\n const version = getVersion();\n\n const useLogo = cols < 80 ? logoSmall : logo;\n\n useEffect(() => {\n if (progress >= 100) {\n setDisplay(useLogo);\n return;\n }\n const t = setInterval(() => {\n setProgress(p => {\n const next = p + 12;\n setDisplay(scramble(useLogo, next));\n return next;\n });\n }, 35);\n return () => clearInterval(t);\n }, [progress, useLogo]);\n\n return (\n <Box flexDirection=\"column\">\n <Text color={colors.primary}>{display || useLogo}</Text>\n\n <Box marginTop={1}>\n <Text>Manage AI agent skills from your terminal.</Text>\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Quick Actions:</Text>\n <Text dimColor> [b] Browse skills marketplace</Text>\n <Text dimColor> [r] Get smart recommendations</Text>\n <Text dimColor> [t] Translate skills between agents</Text>\n <Text dimColor> [c] Manage project context</Text>\n <Text dimColor> [l] View installed skills</Text>\n <Text dimColor> [s] Sync skills across agents</Text>\n </Box>\n\n {rows >= 18 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Navigation:</Text>\n <Text dimColor> ↑↓ Navigate lists</Text>\n <Text dimColor> Enter Select / Confirm</Text>\n <Text dimColor> Esc Go back / Home</Text>\n <Text dimColor> q Quit</Text>\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>v{version} - Works with 17 AI agents</Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { existsSync, mkdirSync, cpSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { useMarketplace } from '../hooks/useMarketplace.js';\nimport { detectProvider, type AgentType, type SkillMetadata } from '@skillkit/core';\nimport { detectAgent, getAdapter, getAllAdapters } from '@skillkit/agents';\nimport { getInstallDir, saveSkillMetadata } from '../helpers.js';\n\ntype View = 'repos' | 'skills' | 'agents';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Browse({ rows = 24 }: Props) {\n const { repos, skills, loading, currentRepo, fetchRepo, fetchAllRepos } = useMarketplace();\n const [view, setView] = useState<View>('repos');\n const [sel, setSel] = useState(0);\n const [installing, setInstalling] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n const [selectedSkill, setSelectedSkill] = useState<{ name: string; source: string } | null>(null);\n const [agents, setAgents] = useState<{ type: AgentType; name: string; detected: boolean }[]>([]);\n\n const items = view === 'repos' ? repos : view === 'skills' ? skills : agents;\n const maxVisible = Math.max(5, rows - 8);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), items.length - maxVisible));\n const visible = items.slice(start, start + maxVisible);\n\n const showAgentSelection = async (skillName: string, source: string) => {\n setSelectedSkill({ name: skillName, source });\n const adapters = getAllAdapters();\n const agentList: typeof agents = [];\n for (const a of adapters) {\n agentList.push({\n type: a.type as AgentType,\n name: a.name,\n detected: await a.isDetected(),\n });\n }\n setAgents(agentList);\n setView('agents');\n setSel(0);\n };\n\n const installSkill = async (skillName: string, source: string, agentType?: AgentType) => {\n setInstalling(skillName);\n setMessage(null);\n\n try {\n const provider = detectProvider(source);\n if (!provider) {\n setMessage(`Error: Unknown provider for ${source}`);\n setInstalling(null);\n return;\n }\n\n const result = await provider.clone(source, '', { depth: 1 });\n\n if (!result.success || !result.discoveredSkills) {\n setMessage(`Error: ${result.error || 'Failed to fetch'}`);\n setInstalling(null);\n return;\n }\n\n const skill = result.discoveredSkills.find(s => s.name === skillName);\n if (!skill) {\n setMessage(`Error: Skill ${skillName} not found`);\n setInstalling(null);\n return;\n }\n\n const targetAgentType = agentType || await detectAgent();\n const adapter = getAdapter(targetAgentType);\n const installDir = getInstallDir(false, targetAgentType);\n\n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true });\n }\n\n const targetPath = join(installDir, skillName);\n\n if (existsSync(targetPath)) {\n rmSync(targetPath, { recursive: true, force: true });\n }\n\n cpSync(skill.path, targetPath, { recursive: true, dereference: true });\n\n const metadata: SkillMetadata = {\n name: skillName,\n description: '',\n source: source,\n sourceType: provider.type,\n subpath: skillName,\n installedAt: new Date().toISOString(),\n enabled: true,\n };\n saveSkillMetadata(targetPath, metadata);\n\n if (result.tempRoot) {\n rmSync(result.tempRoot, { recursive: true, force: true });\n }\n\n setMessage(`✓ Installed ${skillName} to ${adapter.name}`);\n if (!agentType) {\n setView('skills');\n }\n } catch (err) {\n setMessage(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);\n } finally {\n setInstalling(null);\n if (agentType) {\n setSelectedSkill(null);\n }\n }\n };\n\n useInput((input, key) => {\n if (loading || installing) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(items.length - 1, i + 1));\n else if (key.return) {\n if (view === 'repos' && repos[sel]) {\n fetchRepo(repos[sel].source);\n setView('skills');\n setSel(0);\n setMessage(null);\n } else if (view === 'skills' && skills[sel]?.source) {\n installSkill(skills[sel].name, skills[sel].source);\n } else if (view === 'agents' && agents[sel]) {\n installSkill(selectedSkill!.name, selectedSkill!.source, agents[sel].type);\n }\n }\n else if (input === 'm' && view === 'skills' && skills[sel]?.source) {\n showAgentSelection(skills[sel].name, skills[sel].source!);\n }\n else if (input === 'r') {\n if (view === 'skills') {\n setView('repos');\n setSel(0);\n setMessage(null);\n } else if (view === 'agents') {\n setView('skills');\n setSel(0);\n }\n }\n else if (input === 'a' && view === 'repos') {\n fetchAllRepos();\n setView('skills');\n setSel(0);\n }\n });\n\n if (view === 'agents') {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SELECT AGENT</Text>\n <Text dimColor>Install \"{selectedSkill?.name}\" to which agent?</Text>\n <Text dimColor>(All agents supported - directory created if needed)</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const a = agent as typeof agents[0];\n const status = a.detected ? '(ready)' : '(will create)';\n return (\n <Text key={a.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {a.name.padEnd(20)} <Text color={colors.secondaryDim}>{status}</Text>\n </Text>\n );\n })}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=install to selected agent r=back q=quit</Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>{view === 'repos' ? 'REPOSITORIES' : 'SKILLS'}</Text>\n {loading && <Text dimColor>Loading {currentRepo}...</Text>}\n {installing && <Text>Installing {installing}...</Text>}\n {message && <Text dimColor>{message}</Text>}\n <Text dimColor>{items.length} items</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((item, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const name = view === 'repos'\n ? (item as typeof repos[0]).name\n : (item as typeof skills[0]).name;\n const src = view === 'repos'\n ? (item as typeof repos[0]).source\n : (item as typeof skills[0]).source || '';\n return (\n <Text key={src + name} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{name.padEnd(25)} <Text color={colors.secondaryDim}>{src}</Text>\n </Text>\n );\n })}\n {start + maxVisible < items.length && <Text dimColor> ↓ {items.length - start - maxVisible} more</Text>}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\n {view === 'repos'\n ? 'Enter=fetch a=all q=quit'\n : 'Enter=quick install m=choose agent r=back q=quit'}\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { detectProvider } from '@skillkit/core';\nimport type { SkillItem } from '../components/SkillList.js';\n\nexport interface RepoInfo {\n source: string;\n name: string;\n}\n\nconst POPULAR_REPOS: RepoInfo[] = [\n { source: 'anthropics/skills', name: 'Anthropic Official' },\n { source: 'vercel-labs/agent-skills', name: 'Vercel Labs' },\n { source: 'expo/skills', name: 'Expo / React Native' },\n { source: 'remotion-dev/skills', name: 'Remotion Video' },\n { source: 'ComposioHQ/awesome-claude-skills', name: 'Composio Awesome' },\n { source: 'travisvn/awesome-claude-skills', name: 'Travis Awesome' },\n { source: 'mhattingpete/claude-skills-marketplace', name: 'Skills Marketplace' },\n { source: 'coreyhaines31/marketingskills', name: 'Marketing Skills' },\n { source: 'obra/superpowers', name: 'Superpowers TDD' },\n { source: 'softaworks/agent-toolkit', name: 'Softaworks Toolkit' },\n { source: 'wshobson/agents', name: 'Dev Patterns' },\n { source: 'langgenius/dify', name: 'Dify Frontend' },\n { source: 'trailofbits/skills', name: 'Trail of Bits Security' },\n { source: 'better-auth/skills', name: 'Better Auth' },\n { source: 'onmax/nuxt-skills', name: 'Nuxt / Vue' },\n { source: 'hyf0/vue-skills', name: 'Vue Best Practices' },\n { source: 'jezweb/claude-skills', name: 'Cloudflare / TanStack' },\n { source: 'elysiajs/skills', name: 'ElysiaJS / Bun' },\n { source: 'kadajett/agent-nestjs-skills', name: 'NestJS' },\n { source: 'callstackincubator/agent-skills', name: 'React Native' },\n { source: 'cloudai-x/threejs-skills', name: 'Three.js' },\n { source: 'emalorenzo/three-agent-skills', name: 'Three.js Advanced' },\n { source: 'dimillian/skills', name: 'SwiftUI iOS' },\n { source: 'stripe/ai', name: 'Stripe Payments' },\n { source: 'waynesutton/convexskills', name: 'Convex Backend' },\n { source: 'kepano/obsidian-skills', name: 'Obsidian Notes' },\n { source: 'jimliu/baoyu-skills', name: 'Baoyu Tools' },\n { source: 'giuseppe-trisciuoglio/developer-kit', name: 'Shadcn / Radix' },\n { source: 'openrouterteam/agent-skills', name: 'OpenRouter SDK' },\n { source: 'intellectronica/agent-skills', name: 'Context7' },\n];\n\ninterface FetchedSkill {\n name: string;\n source: string;\n repoName: string;\n description?: string;\n}\n\ninterface UseMarketplaceResult {\n skills: SkillItem[];\n loading: boolean;\n error: string | null;\n totalCount: number;\n repos: RepoInfo[];\n currentRepo: string | null;\n refresh: () => void;\n search: (query: string) => void;\n fetchRepo: (source: string) => Promise<void>;\n fetchAllRepos: () => Promise<void>;\n}\n\nexport function useMarketplace(): UseMarketplaceResult {\n const [allSkills, setAllSkills] = useState<FetchedSkill[]>([]);\n const [filteredSkills, setFilteredSkills] = useState<FetchedSkill[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [currentRepo, setCurrentRepo] = useState<string | null>(null);\n const [fetchedRepos, setFetchedRepos] = useState<Set<string>>(new Set());\n\n const fetchRepo = useCallback(async (source: string) => {\n if (fetchedRepos.has(source)) return;\n\n setLoading(true);\n setError(null);\n setCurrentRepo(source);\n\n try {\n const provider = detectProvider(source);\n if (!provider) {\n throw new Error(`Could not detect provider for: ${source}`);\n }\n\n const result = await provider.clone(source, '', { depth: 1 });\n\n if (!result.success || !result.discoveredSkills) {\n throw new Error(result.error || 'Failed to fetch skills');\n }\n\n const repoName = POPULAR_REPOS.find(r => r.source === source)?.name || source;\n const newSkills: FetchedSkill[] = result.discoveredSkills.map(skill => ({\n name: skill.name,\n source: source,\n repoName: repoName,\n description: undefined,\n }));\n\n setAllSkills(prev => {\n const updated = [...prev, ...newSkills];\n return updated.sort((a, b) => a.name.localeCompare(b.name));\n });\n\n setFetchedRepos(prev => new Set([...prev, source]));\n\n if (result.tempRoot) {\n const { rmSync } = await import('node:fs');\n rmSync(result.tempRoot, { recursive: true, force: true });\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch repository');\n } finally {\n setLoading(false);\n setCurrentRepo(null);\n }\n }, [fetchedRepos]);\n\n const fetchAllRepos = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n for (const repo of POPULAR_REPOS) {\n if (!fetchedRepos.has(repo.source)) {\n setCurrentRepo(repo.source);\n try {\n await fetchRepo(repo.source);\n } catch {\n }\n }\n }\n\n setLoading(false);\n setCurrentRepo(null);\n }, [fetchRepo, fetchedRepos]);\n\n const search = useCallback((query: string) => {\n if (!query.trim()) {\n setFilteredSkills(allSkills);\n } else {\n const lowerQuery = query.toLowerCase();\n setFilteredSkills(\n allSkills.filter(\n (s) =>\n s.name.toLowerCase().includes(lowerQuery) ||\n s.source.toLowerCase().includes(lowerQuery) ||\n s.repoName.toLowerCase().includes(lowerQuery) ||\n s.description?.toLowerCase().includes(lowerQuery)\n )\n );\n }\n }, [allSkills]);\n\n const refresh = useCallback(() => {\n setFetchedRepos(new Set());\n setAllSkills([]);\n setFilteredSkills([]);\n }, []);\n\n useEffect(() => {\n setFilteredSkills(allSkills);\n }, [allSkills]);\n\n const skills: SkillItem[] = filteredSkills.map((s) => ({\n name: s.name,\n description: s.description || s.repoName,\n source: s.source,\n }));\n\n return {\n skills,\n loading,\n error,\n totalCount: allSkills.length,\n repos: POPULAR_REPOS,\n currentRepo,\n refresh,\n search,\n fetchRepo,\n fetchAllRepos,\n };\n}\n","// Re-export commonly used functions with proper adapters\nimport {\n loadConfig,\n getSearchDirs as coreGetSearchDirs,\n getInstallDir as coreGetInstallDir,\n saveSkillMetadata as coreSaveSkillMetadata,\n} from '@skillkit/core';\nimport { getAdapter } from '@skillkit/agents';\nimport type { AgentType, AgentAdapterInfo } from '@skillkit/core';\n\n// Re-export for direct use\nexport { coreSaveSkillMetadata as saveSkillMetadata };\n\nexport function getSearchDirs(agentType?: AgentType): string[] {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetSearchDirs(adapterInfo);\n}\n\nexport function getInstallDir(global = false, agentType?: AgentType): string {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetInstallDir(adapterInfo, global);\n}\n","import { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { useSkills } from '../hooks/useSkills.js';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Installed({ rows = 24 }: Props) {\n const { skills, loading, refresh, remove } = useSkills();\n const [sel, setSel] = useState(0);\n\n const maxVisible = Math.max(5, rows - 6);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), skills.length - maxVisible));\n const visible = skills.slice(start, start + maxVisible);\n\n useInput((input, key) => {\n if (loading) return;\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(skills.length - 1, i + 1));\n else if (input === 'r') refresh();\n else if (input === 'd' && skills[sel]) remove(skills[sel].name);\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>INSTALLED SKILLS</Text>\n <Text dimColor>{skills.length} skills</Text>\n\n {loading && <Text>Loading...</Text>}\n\n {!loading && skills.length === 0 && (\n <Text dimColor>No skills installed. Press b to browse.</Text>\n )}\n\n {!loading && skills.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((skill, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Text key={skill.name} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{skill.name.padEnd(30)} {skill.source && <Text color={colors.secondaryDim}>{skill.source}</Text>}\n </Text>\n );\n })}\n {start + maxVisible < skills.length && <Text dimColor> ↓ {skills.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>r=refresh d=delete q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { findAllSkills } from '@skillkit/core';\nimport { getSearchDirs } from '../helpers.js';\nimport type { SkillItem } from '../components/SkillList.js';\n\ninterface UseSkillsResult {\n skills: SkillItem[];\n loading: boolean;\n error: string | null;\n refresh: () => void;\n remove: (name: string) => Promise<void>;\n}\n\nexport function useSkills(): UseSkillsResult {\n const [skills, setSkills] = useState<SkillItem[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const refresh = () => {\n setLoading(true);\n setError(null);\n\n try {\n const searchDirs = getSearchDirs();\n const foundSkills = findAllSkills(searchDirs);\n\n const skillItems: SkillItem[] = foundSkills.map((s) => ({\n name: s.name,\n description: s.description,\n source: s.metadata?.source,\n enabled: s.enabled,\n }));\n\n setSkills(skillItems);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load skills');\n } finally {\n setLoading(false);\n }\n };\n\n const remove = async (name: string) => {\n const { rmSync } = await import('node:fs');\n const foundSkill = skills.find(s => s.name === name);\n if (foundSkill) {\n const searchDirs = getSearchDirs();\n const allSkills = findAllSkills(searchDirs);\n const skill = allSkills.find(s => s.name === name);\n if (skill) {\n rmSync(skill.path, { recursive: true, force: true });\n refresh();\n }\n }\n };\n\n useEffect(() => {\n refresh();\n }, []);\n\n return { skills, loading, error, refresh, remove };\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { getAllAdapters } from '@skillkit/agents';\n\ninterface AgentStatus {\n name: string;\n type: string;\n detected: boolean;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Sync({ rows = 24 }: Props) {\n const [agents, setAgents] = useState<AgentStatus[]>([]);\n const [loading, setLoading] = useState(true);\n const [sel, setSel] = useState(0);\n const [syncing, setSyncing] = useState(false);\n\n const maxVisible = Math.max(5, rows - 6);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), agents.length - maxVisible));\n const visible = agents.slice(start, start + maxVisible);\n\n useEffect(() => {\n (async () => {\n const adapters = getAllAdapters();\n const s: AgentStatus[] = [];\n for (const a of adapters) {\n s.push({ name: a.name, type: a.type, detected: await a.isDetected() });\n }\n setAgents(s);\n setLoading(false);\n })();\n }, []);\n\n useInput((input, key) => {\n if (loading || syncing) return;\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(agents.length - 1, i + 1));\n else if (input === 'a') { setSyncing(true); setTimeout(() => setSyncing(false), 500); }\n else if (key.return && agents[sel]?.detected) { setSyncing(true); setTimeout(() => setSyncing(false), 300); }\n });\n\n const detected = agents.filter(a => a.detected).length;\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SYNC SKILLS</Text>\n <Text dimColor>{detected}/{agents.length} agents detected</Text>\n\n {loading && <Text>Detecting agents...</Text>}\n {syncing && <Text>Syncing...</Text>}\n\n {!loading && !syncing && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Text key={agent.type} inverse={isSel} dimColor={!agent.detected}>\n {isSel ? symbols.pointer : ' '}{agent.detected ? symbols.checkboxOn : symbols.checkboxOff} {agent.name.padEnd(20)} {agent.detected ? 'Ready' : 'N/A'}\n </Text>\n );\n })}\n {start + maxVisible < agents.length && <Text dimColor> ↓ {agents.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Enter=sync a=all q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nconst SETTINGS = [\n { id: 'agent', label: 'Default Agent', value: 'auto-detect' },\n { id: 'sync', label: 'Auto Sync', value: 'disabled' },\n { id: 'cache', label: 'Cache Dir', value: '~/.skillkit/cache' },\n];\n\nexport function Settings({}: Props) {\n const [sel, setSel] = useState(0);\n\n useInput((_, key) => {\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(SETTINGS.length - 1, i + 1));\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SETTINGS</Text>\n <Text dimColor>Configure SkillKit</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {SETTINGS.map((s, i) => {\n const isSel = i === sel;\n return (\n <Text key={s.id} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{s.label.padEnd(16)} <Text color={colors.secondaryDim}>{s.value}</Text>\n </Text>\n );\n })}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=edit q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { existsSync, mkdirSync, cpSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { useRecommend } from '../hooks/useRecommend.js';\nimport { detectProvider, type AgentType, type SkillMetadata } from '@skillkit/core';\nimport { detectAgent, getAdapter, getAllAdapters } from '@skillkit/agents';\nimport { getInstallDir, saveSkillMetadata } from '../helpers.js';\n\ntype View = 'recommendations' | 'search' | 'agents';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Recommend({ rows = 24 }: Props) {\n const {\n recommendations,\n profile,\n loading,\n error,\n totalScanned,\n indexStatus,\n refresh,\n updateIndex,\n search,\n searchResults,\n } = useRecommend();\n\n const [view, setView] = useState<View>('recommendations');\n const [sel, setSel] = useState(0);\n const [searchQuery, setSearchQuery] = useState('');\n const [searchMode, setSearchMode] = useState(false);\n const [installing, setInstalling] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n const [selectedSkill, setSelectedSkill] = useState<{ name: string; source: string } | null>(null);\n const [agents, setAgents] = useState<{ type: AgentType; name: string; detected: boolean }[]>([]);\n\n const items = view === 'recommendations'\n ? recommendations\n : view === 'search'\n ? searchResults\n : agents;\n\n const maxVisible = Math.max(5, rows - 10);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), items.length - maxVisible));\n const visible = items.slice(start, start + maxVisible);\n\n const showAgentSelection = async (skillName: string, source: string) => {\n setSelectedSkill({ name: skillName, source });\n const adapters = getAllAdapters();\n const agentList: typeof agents = [];\n for (const a of adapters) {\n agentList.push({\n type: a.type as AgentType,\n name: a.name,\n detected: await a.isDetected(),\n });\n }\n setAgents(agentList);\n setView('agents');\n setSel(0);\n };\n\n const installSkill = async (skillName: string, source: string, agentType?: AgentType) => {\n if (!source) {\n setMessage('Error: No source available for this skill');\n return;\n }\n\n setInstalling(skillName);\n setMessage(null);\n\n try {\n const provider = detectProvider(source);\n if (!provider) {\n setMessage(`Error: Unknown provider for ${source}`);\n setInstalling(null);\n return;\n }\n\n const result = await provider.clone(source, '', { depth: 1 });\n\n if (!result.success || !result.discoveredSkills) {\n setMessage(`Error: ${result.error || 'Failed to fetch'}`);\n setInstalling(null);\n return;\n }\n\n const skill = result.discoveredSkills.find(s => s.name === skillName);\n if (!skill) {\n setMessage(`Error: Skill ${skillName} not found in repo`);\n setInstalling(null);\n return;\n }\n\n const targetAgentType = agentType || await detectAgent();\n const adapter = getAdapter(targetAgentType);\n const installDir = getInstallDir(false, targetAgentType);\n\n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true });\n }\n\n const targetPath = join(installDir, skillName);\n\n if (existsSync(targetPath)) {\n rmSync(targetPath, { recursive: true, force: true });\n }\n\n cpSync(skill.path, targetPath, { recursive: true, dereference: true });\n\n const metadata: SkillMetadata = {\n name: skillName,\n description: '',\n source: source,\n sourceType: provider.type,\n subpath: skillName,\n installedAt: new Date().toISOString(),\n enabled: true,\n };\n saveSkillMetadata(targetPath, metadata);\n\n if (result.tempRoot) {\n rmSync(result.tempRoot, { recursive: true, force: true });\n }\n\n setMessage(`✓ Installed ${skillName} to ${adapter.name}`);\n } catch (err) {\n setMessage(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);\n } finally {\n setInstalling(null);\n if (agentType) {\n setSelectedSkill(null);\n setView('recommendations');\n }\n }\n };\n\n useInput((input, key) => {\n if (loading || installing) return;\n\n // Handle search input mode\n if (searchMode) {\n if (key.escape) {\n setSearchMode(false);\n setSearchQuery('');\n setView('recommendations');\n return;\n }\n if (key.return) {\n setSearchMode(false);\n if (searchQuery.trim()) {\n search(searchQuery);\n setView('search');\n setSel(0);\n }\n return;\n }\n if (key.backspace || key.delete) {\n setSearchQuery(q => q.slice(0, -1));\n return;\n }\n if (input && !key.ctrl && !key.meta) {\n setSearchQuery(q => q + input);\n return;\n }\n return;\n }\n\n // Navigation\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(items.length - 1, i + 1));\n else if (key.return) {\n if (view === 'agents' && agents[sel]) {\n installSkill(selectedSkill!.name, selectedSkill!.source, agents[sel].type);\n } else if ((view === 'recommendations' || view === 'search') && items[sel]) {\n const skill = items[sel] as typeof recommendations[0];\n if (skill.skill.source) {\n installSkill(skill.skill.name, skill.skill.source);\n }\n }\n }\n // Actions\n else if (input === '/') {\n setSearchMode(true);\n setSearchQuery('');\n }\n else if (input === 'm' && (view === 'recommendations' || view === 'search') && items[sel]) {\n const skill = items[sel] as typeof recommendations[0];\n if (skill.skill.source) {\n showAgentSelection(skill.skill.name, skill.skill.source);\n }\n }\n else if (input === 'u') {\n updateIndex();\n }\n else if (input === 'r' && view !== 'recommendations') {\n if (view === 'agents') {\n setView('recommendations');\n } else {\n setView('recommendations');\n setSearchQuery('');\n }\n setSel(0);\n }\n else if (input === 'R') {\n refresh();\n }\n });\n\n // Agent selection view\n if (view === 'agents') {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SELECT AGENT</Text>\n <Text dimColor>Install \"{selectedSkill?.name}\" to which agent?</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const a = agent as typeof agents[0];\n const status = a.detected ? '(ready)' : '(will create)';\n return (\n <Text key={a.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {a.name.padEnd(20)} <Text color={colors.secondaryDim}>{status}</Text>\n </Text>\n );\n })}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=install r=back q=quit</Text>\n </Box>\n </Box>\n );\n }\n\n // Score bar helper\n const getScoreBar = (score: number): string => {\n const filled = Math.round(score / 10);\n const empty = 10 - filled;\n return '█'.repeat(filled) + '░'.repeat(empty);\n };\n\n const getScoreColor = (score: number) => {\n if (score >= 70) return 'green';\n if (score >= 50) return 'yellow';\n return 'gray';\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>\n {view === 'search' ? `SEARCH: \"${searchQuery}\"` : 'RECOMMENDATIONS'}\n </Text>\n\n {/* Status bar */}\n {loading && <Text dimColor>Loading...</Text>}\n {installing && <Text>Installing {installing}...</Text>}\n {message && <Text dimColor>{message}</Text>}\n {error && <Text color=\"red\">{error}</Text>}\n\n {/* Search input */}\n {searchMode && (\n <Box marginTop={1}>\n <Text>Search: {searchQuery}</Text>\n <Text dimColor>█</Text>\n </Box>\n )}\n\n {/* Index status warning */}\n {indexStatus === 'missing' && !loading && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"yellow\">No skill index found.</Text>\n <Text dimColor>Press 'u' to update index from known sources.</Text>\n </Box>\n )}\n\n {indexStatus === 'stale' && !loading && (\n <Text dimColor>Index may be outdated. Press 'u' to update.</Text>\n )}\n\n {/* Profile info */}\n {profile && !searchMode && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>\n Project: {profile.name}\n {profile.type ? ` (${profile.type})` : ''}\n </Text>\n {profile.stack.languages.length > 0 && (\n <Text dimColor>\n Stack: {profile.stack.languages.map(l => l.name).join(', ')}\n {profile.stack.frameworks.length > 0 && `, ${profile.stack.frameworks.map(f => f.name).join(', ')}`}\n </Text>\n )}\n </Box>\n )}\n\n {/* Item count */}\n {!searchMode && (\n <Text dimColor>\n {view === 'search'\n ? `${searchResults.length} results`\n : `${recommendations.length} of ${totalScanned} skills matched`}\n </Text>\n )}\n\n {/* List */}\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((item, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const skill = (item as typeof recommendations[0]).skill;\n const score = (item as typeof recommendations[0]).score;\n\n return (\n <Box key={skill.name} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '}\n <Text color={getScoreColor(score)}>{score.toString().padStart(3)}%</Text>\n {' '}\n <Text color={getScoreColor(score)}>{getScoreBar(score)}</Text>\n {' '}\n <Text bold>{skill.name}</Text>\n </Text>\n {isSel && skill.description && (\n <Text dimColor> {skill.description.slice(0, 60)}{skill.description.length > 60 ? '...' : ''}</Text>\n )}\n {isSel && skill.source && (\n <Text dimColor> Source: {skill.source}</Text>\n )}\n </Box>\n );\n })}\n {start + maxVisible < items.length && <Text dimColor> ↓ {items.length - start - maxVisible} more</Text>}\n </Box>\n\n {/* Help bar */}\n <Box marginTop={1}>\n <Text dimColor>\n {view === 'search'\n ? 'Enter=install m=choose agent /=search r=back u=update q=quit'\n : 'Enter=install m=choose agent /=search u=update R=refresh q=quit'}\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport {\n RecommendationEngine,\n ContextManager,\n type ScoredSkill,\n type ProjectProfile,\n loadIndex as loadIndexFromCache,\n saveIndex,\n buildSkillIndex,\n isIndexStale,\n KNOWN_SKILL_REPOS,\n} from '@skillkit/core';\n\ninterface UseRecommendResult {\n recommendations: ScoredSkill[];\n profile: ProjectProfile | null;\n loading: boolean;\n error: string | null;\n totalScanned: number;\n indexStatus: 'missing' | 'stale' | 'fresh';\n refresh: () => void;\n updateIndex: () => void;\n search: (query: string) => void;\n searchResults: ScoredSkill[];\n}\n\nexport function useRecommend(projectPath: string = process.cwd()): UseRecommendResult {\n const [recommendations, setRecommendations] = useState<ScoredSkill[]>([]);\n const [searchResults, setSearchResults] = useState<ScoredSkill[]>([]);\n const [profile, setProfile] = useState<ProjectProfile | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [totalScanned, setTotalScanned] = useState(0);\n const [indexStatus, setIndexStatus] = useState<'missing' | 'stale' | 'fresh'>('missing');\n const [engine] = useState(() => new RecommendationEngine());\n\n const loadIndex = useCallback(() => {\n const index = loadIndexFromCache();\n\n if (!index) {\n setIndexStatus('missing');\n return null;\n }\n\n // Check if index is stale\n if (isIndexStale(index)) {\n setIndexStatus('stale');\n } else {\n setIndexStatus('fresh');\n }\n\n return index;\n }, []);\n\n const getProjectProfile = useCallback((): ProjectProfile | null => {\n try {\n const manager = new ContextManager(projectPath);\n let context = manager.get();\n\n if (!context) {\n context = manager.init();\n }\n\n if (!context) {\n return null;\n }\n\n return {\n name: context.project.name,\n type: context.project.type,\n stack: context.stack,\n patterns: context.patterns,\n installedSkills: context.skills?.installed || [],\n excludedSkills: context.skills?.excluded || [],\n };\n } catch {\n return null;\n }\n }, [projectPath]);\n\n const loadRecommendations = useCallback(() => {\n setLoading(true);\n setError(null);\n\n try {\n // Load project profile\n const projectProfile = getProjectProfile();\n if (!projectProfile) {\n setError('Failed to analyze project');\n setLoading(false);\n return;\n }\n setProfile(projectProfile);\n\n // Load skill index\n const index = loadIndex();\n if (!index || index.skills.length === 0) {\n setRecommendations([]);\n setTotalScanned(0);\n setLoading(false);\n return;\n }\n\n engine.loadIndex(index);\n\n // Get recommendations\n const result = engine.recommend(projectProfile, {\n limit: 20,\n minScore: 20,\n excludeInstalled: true,\n includeReasons: true,\n });\n\n setRecommendations(result.recommendations);\n setTotalScanned(result.totalSkillsScanned);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to get recommendations');\n } finally {\n setLoading(false);\n }\n }, [engine, getProjectProfile, loadIndex]);\n\n const updateIndex = useCallback(() => {\n setLoading(true);\n setError(null);\n\n // Fetch skills from known GitHub repositories\n buildSkillIndex(KNOWN_SKILL_REPOS)\n .then(({ index, errors }) => {\n if (errors.length > 0) {\n console.warn('Index update warnings:', errors);\n }\n\n // Save the fetched index\n saveIndex(index);\n setIndexStatus('fresh');\n\n // Reload recommendations with new index\n loadRecommendations();\n })\n .catch((err) => {\n setError(err instanceof Error ? err.message : 'Failed to update index');\n setLoading(false);\n });\n }, [loadRecommendations]);\n\n const search = useCallback((query: string) => {\n if (!query.trim()) {\n setSearchResults([]);\n return;\n }\n\n const results = engine.search({\n query,\n limit: 10,\n semantic: true,\n });\n\n // Convert SearchResult to ScoredSkill for consistency\n const scoredResults: ScoredSkill[] = results.map(r => ({\n skill: r.skill,\n score: r.relevance,\n reasons: r.matchedTerms.map(term => ({\n category: 'tag' as const,\n description: `Matched: ${term}`,\n weight: 0,\n matched: [term],\n })),\n warnings: [],\n }));\n\n setSearchResults(scoredResults);\n }, [engine]);\n\n const refresh = useCallback(() => {\n loadRecommendations();\n }, [loadRecommendations]);\n\n // Initial load\n useEffect(() => {\n loadRecommendations();\n }, [loadRecommendations]);\n\n return {\n recommendations,\n profile,\n loading,\n error,\n totalScanned,\n indexStatus,\n refresh,\n updateIndex,\n search,\n searchResults,\n };\n}\n","import { useState, useEffect } from 'react';\nimport { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport {\n translateSkill,\n getSupportedTranslationAgents,\n type AgentType,\n} from '@skillkit/core';\nimport { getAllAdapters, getAdapter } from '@skillkit/agents';\nimport { getInstallDir } from '../helpers.js';\n\ntype View = 'skills' | 'agents' | 'preview' | 'result';\n\ninterface InstalledSkill {\n name: string;\n path: string;\n content: string;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Translate({ rows = 24 }: Props) {\n const [view, setView] = useState<View>('skills');\n const [skills, setSkills] = useState<InstalledSkill[]>([]);\n const [agents, setAgents] = useState<{ type: AgentType; name: string }[]>([]);\n const [sel, setSel] = useState(0);\n const [selectedSkill, setSelectedSkill] = useState<InstalledSkill | null>(null);\n const [selectedAgent, setSelectedAgent] = useState<{ type: AgentType; name: string } | null>(null);\n const [preview, setPreview] = useState<string>('');\n const [result, setResult] = useState<{ success: boolean; message: string; path?: string } | null>(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const loadSkills = () => {\n const installDir = getInstallDir(false);\n const foundSkills: InstalledSkill[] = [];\n\n if (existsSync(installDir)) {\n const dirs = readdirSync(installDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n\n for (const dir of dirs) {\n const skillPath = join(installDir, dir);\n const skillMdPath = join(skillPath, 'SKILL.md');\n\n if (existsSync(skillMdPath)) {\n const content = readFileSync(skillMdPath, 'utf-8');\n foundSkills.push({\n name: dir,\n path: skillPath,\n content,\n });\n }\n }\n }\n\n setSkills(foundSkills);\n };\n\n loadSkills();\n }, []);\n\n useEffect(() => {\n const adapters = getAllAdapters();\n const supportedAgents = getSupportedTranslationAgents();\n const agentList = adapters\n .filter(a => supportedAgents.includes(a.type as AgentType))\n .map(a => ({\n type: a.type as AgentType,\n name: a.name,\n }));\n setAgents(agentList);\n }, []);\n\n const currentItems = view === 'skills' ? skills : agents;\n const maxVisible = Math.max(5, rows - 12);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), currentItems.length - maxVisible));\n const visible = currentItems.slice(start, start + maxVisible);\n\n const generatePreview = (skill: InstalledSkill, agent: { type: AgentType; name: string }) => {\n try {\n const result = translateSkill(skill.content, agent.type, { sourceFilename: 'SKILL.md' });\n return result.content;\n } catch (err) {\n return `Error: ${err instanceof Error ? err.message : 'Translation failed'}`;\n }\n };\n\n const executeTranslation = () => {\n if (!selectedSkill || !selectedAgent) return;\n\n setLoading(true);\n try {\n const translationResult = translateSkill(selectedSkill.content, selectedAgent.type, {\n sourceFilename: 'SKILL.md',\n });\n\n if (!translationResult.success) {\n setResult({\n success: false,\n message: `Translation failed: ${translationResult.warnings.join(', ')}`,\n });\n setLoading(false);\n return;\n }\n\n const adapter = getAdapter(selectedAgent.type);\n const targetDir = adapter?.skillsDir\n ? join(process.cwd(), adapter.skillsDir)\n : join(process.cwd(), `.${selectedAgent.type}/skills/`);\n\n if (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n }\n\n const filename = translationResult.filename || `${selectedSkill.name}.md`;\n const targetPath = join(targetDir, filename);\n\n writeFileSync(targetPath, translationResult.content, 'utf-8');\n\n setResult({\n success: true,\n message: `Translated ${selectedSkill.name} to ${selectedAgent.name} format`,\n path: targetPath,\n });\n } catch (err) {\n setResult({\n success: false,\n message: `Error: ${err instanceof Error ? err.message : 'Unknown error'}`,\n });\n } finally {\n setLoading(false);\n setView('result');\n }\n };\n\n useInput((_input, key) => {\n if (loading) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(currentItems.length - 1, i + 1));\n else if (key.escape) {\n if (view === 'result') {\n setView('skills');\n setSelectedSkill(null);\n setSelectedAgent(null);\n setResult(null);\n setSel(0);\n } else if (view === 'preview') {\n setView('agents');\n } else if (view === 'agents') {\n setView('skills');\n setSelectedSkill(null);\n }\n }\n else if (key.return) {\n if (view === 'skills' && skills[sel]) {\n setSelectedSkill(skills[sel]);\n setView('agents');\n setSel(0);\n } else if (view === 'agents' && agents[sel]) {\n setSelectedAgent(agents[sel]);\n const previewContent = generatePreview(selectedSkill!, agents[sel]);\n setPreview(previewContent);\n setView('preview');\n } else if (view === 'preview') {\n executeTranslation();\n } else if (view === 'result') {\n setView('skills');\n setSelectedSkill(null);\n setSelectedAgent(null);\n setResult(null);\n setSel(0);\n }\n }\n });\n\n if (view === 'result' && result) {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>TRANSLATION {result.success ? 'COMPLETE' : 'FAILED'}</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text color={result.success ? 'green' : 'red'}>\n {result.success ? '✓' : '✗'} {result.message}\n </Text>\n {result.path && (\n <Text dimColor>Saved to: {result.path}</Text>\n )}\n </Box>\n\n <Box marginTop={2}>\n <Text dimColor>Press Enter or Esc to continue</Text>\n </Box>\n </Box>\n );\n }\n\n if (view === 'preview') {\n const previewLines = preview.split('\\n').slice(0, maxVisible);\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>TRANSLATION PREVIEW</Text>\n <Text dimColor>\n {selectedSkill?.name} → {selectedAgent?.name}\n </Text>\n\n <Box marginTop={1} flexDirection=\"column\" borderStyle=\"single\" paddingX={1}>\n {previewLines.map((line, i) => (\n <Text key={i} dimColor>{line.slice(0, 70)}</Text>\n ))}\n {preview.split('\\n').length > maxVisible && (\n <Text dimColor>... ({preview.split('\\n').length - maxVisible} more lines)</Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=confirm translation Esc=back</Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>\n {view === 'skills' ? 'TRANSLATE SKILL' : 'SELECT TARGET AGENT'}\n </Text>\n\n {view === 'skills' && (\n <Text dimColor>Select a skill to translate to another agent format</Text>\n )}\n\n {view === 'agents' && selectedSkill && (\n <Text dimColor>Translate \"{selectedSkill.name}\" to which agent format?</Text>\n )}\n\n {skills.length === 0 && view === 'skills' && (\n <Box marginTop={1}>\n <Text color=\"yellow\">No skills installed. Install some skills first with 'skillkit install'</Text>\n </Box>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((item, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n\n if (view === 'skills') {\n const skill = item as InstalledSkill;\n return (\n <Text key={skill.name} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {skill.name}\n </Text>\n );\n } else {\n const agent = item as { type: AgentType; name: string };\n return (\n <Text key={agent.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {agent.name.padEnd(20)} <Text dimColor>({agent.type})</Text>\n </Text>\n );\n }\n })}\n {start + maxVisible < currentItems.length && (\n <Text dimColor> ↓ {currentItems.length - start - maxVisible} more</Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\n {view === 'skills'\n ? 'Enter=select skill q=quit'\n : 'Enter=select agent Esc=back q=quit'}\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport {\n loadContext,\n initContext,\n syncToAgent,\n type ProjectContext,\n type AgentType,\n} from '@skillkit/core';\nimport { getAllAdapters } from '@skillkit/agents';\n\ntype View = 'overview' | 'sync';\n\ninterface AgentItem {\n type: AgentType;\n name: string;\n detected: boolean;\n synced?: boolean;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Context({ rows = 24 }: Props) {\n const [view, setView] = useState<View>('overview');\n const [context, setContext] = useState<ProjectContext | null>(null);\n const [loading, setLoading] = useState(true);\n const [initializing, setInitializing] = useState(false);\n const [syncing, setSyncing] = useState(false);\n const [agents, setAgents] = useState<AgentItem[]>([]);\n const [sel, setSel] = useState(0);\n const [message, setMessage] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const projectPath = process.cwd();\n\n useEffect(() => {\n const load = async () => {\n setLoading(true);\n try {\n const ctx = loadContext(projectPath);\n setContext(ctx);\n\n const adapters = getAllAdapters();\n const agentList: AgentItem[] = [];\n for (const a of adapters) {\n const detected = await a.isDetected();\n agentList.push({\n type: a.type as AgentType,\n name: a.name,\n detected,\n synced: ctx?.agents?.synced?.includes(a.type),\n });\n }\n setAgents(agentList);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load context');\n } finally {\n setLoading(false);\n }\n };\n\n load();\n }, [projectPath]);\n\n const maxVisible = Math.max(5, rows - 14);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), agents.length - maxVisible));\n const visible = agents.slice(start, start + maxVisible);\n\n const handleInit = () => {\n setInitializing(true);\n setMessage(null);\n setError(null);\n\n try {\n const newContext = initContext(projectPath);\n setContext(newContext);\n setMessage('Context initialized successfully');\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to initialize context');\n } finally {\n setInitializing(false);\n }\n };\n\n const handleSync = async (agentType: AgentType) => {\n setSyncing(true);\n setMessage(null);\n setError(null);\n\n try {\n await syncToAgent(agentType, projectPath);\n\n setAgents(prev =>\n prev.map(a =>\n a.type === agentType ? { ...a, synced: true } : a\n )\n );\n\n setMessage(`Synced to ${agentType} successfully`);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Sync failed');\n } finally {\n setSyncing(false);\n }\n };\n\n const handleSyncAll = async () => {\n setSyncing(true);\n setMessage(null);\n setError(null);\n\n try {\n const detectedAgents = agents.filter(a => a.detected);\n for (const agent of detectedAgents) {\n await syncToAgent(agent.type, projectPath);\n }\n\n setAgents(prev =>\n prev.map(a =>\n a.detected ? { ...a, synced: true } : a\n )\n );\n\n setMessage(`Synced to ${detectedAgents.length} agents`);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Sync failed');\n } finally {\n setSyncing(false);\n }\n };\n\n useInput((input, key) => {\n if (loading || initializing || syncing) return;\n\n if (view === 'sync') {\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(agents.length - 1, i + 1));\n else if (key.return && agents[sel]) {\n handleSync(agents[sel].type);\n }\n else if (key.escape) {\n setView('overview');\n setSel(0);\n }\n else if (input === 'a') {\n handleSyncAll();\n }\n } else if (view === 'overview') {\n if (input === 'i') handleInit();\n else if (input === 's') {\n setView('sync');\n setSel(0);\n }\n }\n });\n\n if (loading) {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>PROJECT CONTEXT</Text>\n <Text dimColor>Loading...</Text>\n </Box>\n );\n }\n\n if (view === 'sync') {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SYNC TO AGENTS</Text>\n <Text dimColor>Select an agent to sync your project context</Text>\n\n {message && <Text color=\"green\">{'✓'} {message}</Text>}\n {error && <Text color=\"red\">{'✗'} {error}</Text>}\n {syncing && <Text dimColor>Syncing...</Text>}\n\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const status = agent.synced\n ? '(synced)'\n : agent.detected\n ? '(ready)'\n : '(not detected)';\n const statusColor = agent.synced ? 'green' : agent.detected ? 'yellow' : 'gray';\n\n return (\n <Text key={agent.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {agent.name.padEnd(20)}\n <Text color={statusColor}>{status}</Text>\n </Text>\n );\n })}\n {start + maxVisible < agents.length && (\n <Text dimColor> ↓ {agents.length - start - maxVisible} more</Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=sync to agent a=sync all detected Esc=back q=quit</Text>\n </Box>\n </Box>\n );\n }\n\n const stack = context?.stack;\n const detectedCount = agents.filter(a => a.detected).length;\n const syncedCount = agents.filter(a => a.synced).length;\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>PROJECT CONTEXT</Text>\n\n {message && <Text color=\"green\">{'✓'} {message}</Text>}\n {error && <Text color=\"red\">{'✗'} {error}</Text>}\n {initializing && <Text dimColor>Initializing...</Text>}\n\n {!context && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"yellow\">No context found.</Text>\n <Text dimColor>Press 'i' to initialize and analyze your project.</Text>\n </Box>\n )}\n\n {context && (\n <>\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Project:</Text>\n <Text> Name: {context.project?.name || 'Unknown'}</Text>\n <Text> Type: {context.project?.type || 'Not detected'}</Text>\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Stack:</Text>\n {stack?.languages && stack.languages.length > 0 && (\n <Text> Languages: {stack.languages.map(l => l.name).join(', ')}</Text>\n )}\n {stack?.frameworks && stack.frameworks.length > 0 && (\n <Text> Frameworks: {stack.frameworks.map(f => f.name).join(', ')}</Text>\n )}\n {stack?.libraries && stack.libraries.length > 0 && (\n <Text> Libraries: {stack.libraries.slice(0, 5).map(l => l.name).join(', ')}{stack.libraries.length > 5 ? '...' : ''}</Text>\n )}\n {(!stack?.languages?.length && !stack?.frameworks?.length) && (\n <Text dimColor> No stack detected. Press 'i' to re-analyze.</Text>\n )}\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Agents:</Text>\n <Text> Detected: {detectedCount} agents</Text>\n <Text> Synced: {syncedCount} agents</Text>\n {detectedCount > 0 && (\n <Text dimColor> ({agents.filter(a => a.detected).map(a => a.name).join(', ')})</Text>\n )}\n </Box>\n </>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Actions:</Text>\n <Text dimColor> [i] Initialize/refresh context</Text>\n <Text dimColor> [s] Sync to agents</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>i=init context s=sync to agents q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { listWorkflows, type Workflow as WorkflowType } from '@skillkit/core';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Workflow({ rows = 24 }: Props) {\n const [workflows, setWorkflows] = useState<WorkflowType[]>([]);\n const [loading, setLoading] = useState(true);\n const [sel, setSel] = useState(0);\n const [running, setRunning] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const maxVisible = Math.max(5, rows - 8);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), workflows.length - maxVisible));\n const visible = workflows.slice(start, start + maxVisible);\n\n useEffect(() => {\n loadWorkflows();\n }, []);\n\n const loadWorkflows = () => {\n setLoading(true);\n setError(null);\n try {\n const wfs = listWorkflows(process.cwd());\n setWorkflows(wfs);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to load workflows');\n }\n setLoading(false);\n };\n\n useInput((input, key) => {\n if (loading || running) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(workflows.length - 1, i + 1));\n else if (input === 'r') loadWorkflows();\n else if (key.return && workflows[sel]) {\n // Simulate running workflow\n setRunning(workflows[sel].name);\n setTimeout(() => setRunning(null), 2000);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>WORKFLOWS</Text>\n <Text dimColor>{workflows.length} workflow(s) found</Text>\n\n {loading && <Text>Loading workflows...</Text>}\n {error && <Text color=\"red\">{error}</Text>}\n {running && <Text color=\"yellow\">Running: {running}...</Text>}\n\n {!loading && !running && workflows.length === 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>No workflows found.</Text>\n <Text dimColor>Create one with: skillkit workflow create</Text>\n </Box>\n )}\n\n {!loading && !running && workflows.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((wf, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Box key={wf.name} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {wf.name}\n </Text>\n {isSel && wf.description && (\n <Text dimColor> {wf.description}</Text>\n )}\n {isSel && (\n <Text dimColor> {wf.waves.length} wave(s), {wf.waves.reduce((acc, w) => acc + w.skills.length, 0)} skill(s)</Text>\n )}\n </Box>\n );\n })}\n {start + maxVisible < workflows.length && <Text dimColor> ↓ {workflows.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Enter=run r=refresh q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { createSessionManager, type SessionState, type CurrentExecution } from '@skillkit/core';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Execute({ rows = 24 }: Props) {\n const [session, setSession] = useState<SessionState | null>(null);\n const [loading, setLoading] = useState(true);\n\n const maxVisible = Math.max(5, rows - 10);\n\n useEffect(() => {\n loadSession();\n // Poll for updates\n const interval = setInterval(loadSession, 1000);\n return () => clearInterval(interval);\n }, []);\n\n const loadSession = () => {\n try {\n const manager = createSessionManager(process.cwd());\n const state = manager.get();\n setSession(state);\n } catch {\n setSession(null);\n }\n setLoading(false);\n };\n\n useInput((input, _key) => {\n if (input === 'r') loadSession();\n else if (input === 'p' && session?.currentExecution?.status === 'running') {\n const manager = createSessionManager(process.cwd());\n manager.pause();\n loadSession();\n }\n else if (input === 'c' && session?.currentExecution?.status === 'paused') {\n const manager = createSessionManager(process.cwd());\n manager.resume();\n loadSession();\n }\n });\n\n const renderExecution = (exec: CurrentExecution) => {\n const completedTasks = exec.tasks.filter(t => t.status === 'completed').length;\n const failedTasks = exec.tasks.filter(t => t.status === 'failed').length;\n const progress = exec.totalSteps > 0 ? Math.round((completedTasks / exec.totalSteps) * 100) : 0;\n\n const statusColor = exec.status === 'running' ? 'yellow' :\n exec.status === 'completed' ? 'green' :\n exec.status === 'paused' ? 'blue' :\n exec.status === 'failed' ? 'red' : 'white';\n\n const visibleTasks = exec.tasks.slice(0, maxVisible);\n\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text bold>{exec.skillName}</Text>\n <Text>Source: <Text dimColor>{exec.skillSource}</Text></Text>\n <Text>Status: <Text color={statusColor}>{exec.status.toUpperCase()}</Text></Text>\n <Text>Progress: {completedTasks}/{exec.totalSteps} ({progress}%)</Text>\n\n {/* Progress bar */}\n <Box marginY={1}>\n <Text>[</Text>\n <Text color=\"green\">{'█'.repeat(Math.floor(progress / 5))}</Text>\n <Text dimColor>{'░'.repeat(20 - Math.floor(progress / 5))}</Text>\n <Text>]</Text>\n </Box>\n\n {/* Task list */}\n <Text bold>Tasks:</Text>\n {visibleTasks.map((task, i) => {\n const icon = task.status === 'completed' ? symbols.success :\n task.status === 'failed' ? symbols.error :\n task.status === 'in_progress' ? symbols.warning :\n task.status === 'paused' ? symbols.info :\n symbols.bullet;\n const color = task.status === 'completed' ? 'green' :\n task.status === 'failed' ? 'red' :\n task.status === 'in_progress' ? 'yellow' :\n task.status === 'paused' ? 'blue' : 'white';\n return (\n <Text key={task.id || i} color={color}>\n {icon} {task.name} {task.error && <Text dimColor>({task.error})</Text>}\n </Text>\n );\n })}\n {exec.tasks.length > maxVisible && (\n <Text dimColor> ... and {exec.tasks.length - maxVisible} more</Text>\n )}\n\n {failedTasks > 0 && (\n <Box marginTop={1}>\n <Text color=\"red\">{failedTasks} task(s) failed</Text>\n </Box>\n )}\n </Box>\n );\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>EXECUTION MONITOR</Text>\n\n {loading && <Text>Loading session...</Text>}\n\n {!loading && !session?.currentExecution && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>No active execution.</Text>\n <Text dimColor>Run a skill with: skillkit run {'<skill>'}</Text>\n </Box>\n )}\n\n {!loading && session?.currentExecution && renderExecution(session.currentExecution)}\n\n <Box marginTop={1}>\n <Text dimColor>\n {session?.currentExecution?.status === 'running' ? 'p=pause ' : ''}\n {session?.currentExecution?.status === 'paused' ? 'c=continue ' : ''}\n r=refresh q=quit\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { createSessionManager, type ExecutionHistory } from '@skillkit/core';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function History({ rows = 24 }: Props) {\n const [history, setHistory] = useState<ExecutionHistory[]>([]);\n const [loading, setLoading] = useState(true);\n const [sel, setSel] = useState(0);\n const [expanded, setExpanded] = useState(false);\n\n const maxVisible = Math.max(5, rows - 8);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), history.length - maxVisible));\n const visible = history.slice(start, start + maxVisible);\n\n useEffect(() => {\n loadHistory();\n }, []);\n\n const loadHistory = () => {\n setLoading(true);\n try {\n const manager = createSessionManager(process.cwd());\n const h = manager.getHistory(50);\n setHistory(h);\n } catch {\n setHistory([]);\n }\n setLoading(false);\n };\n\n useInput((input, key) => {\n if (loading) return;\n\n if (key.upArrow) {\n setSel(i => Math.max(0, i - 1));\n setExpanded(false);\n }\n else if (key.downArrow) {\n setSel(i => Math.min(history.length - 1, i + 1));\n setExpanded(false);\n }\n else if (input === 'r') loadHistory();\n else if (key.return) setExpanded(e => !e);\n });\n\n const formatDuration = (ms: number): string => {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${(ms / 60000).toFixed(1)}m`;\n };\n\n const formatDate = (iso: string): string => {\n const d = new Date(iso);\n const now = new Date();\n const diff = now.getTime() - d.getTime();\n\n if (diff < 60000) return 'Just now';\n if (diff < 3600000) return `${Math.floor(diff / 60000)}m ago`;\n if (diff < 86400000) return `${Math.floor(diff / 3600000)}h ago`;\n return d.toLocaleDateString();\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>EXECUTION HISTORY</Text>\n <Text dimColor>{history.length} execution(s)</Text>\n\n {loading && <Text>Loading history...</Text>}\n\n {!loading && history.length === 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>No execution history.</Text>\n <Text dimColor>Run a skill with: skillkit run {'<skill>'}</Text>\n </Box>\n )}\n\n {!loading && history.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((entry, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const icon = entry.status === 'completed' ? symbols.success :\n entry.status === 'failed' ? symbols.error :\n symbols.warning;\n const color = entry.status === 'completed' ? 'green' :\n entry.status === 'failed' ? 'red' : 'yellow';\n\n return (\n <Box key={idx} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '}<Text color={color}>{icon}</Text> {entry.skillName.padEnd(25)} {formatDate(entry.completedAt).padEnd(12)} {formatDuration(entry.durationMs)}\n </Text>\n {isSel && expanded && (\n <Box flexDirection=\"column\" marginLeft={3}>\n <Text dimColor>Source: {entry.skillSource}</Text>\n <Text dimColor>Status: {entry.status}</Text>\n {entry.commits.length > 0 && (\n <Text dimColor>Commits: {entry.commits.join(', ')}</Text>\n )}\n {entry.filesModified.length > 0 && (\n <Text dimColor>Files: {entry.filesModified.length} modified</Text>\n )}\n {entry.error && (\n <Text color=\"red\">Error: {entry.error}</Text>\n )}\n </Box>\n )}\n </Box>\n );\n })}\n {start + maxVisible < history.length && <Text dimColor> ↓ {history.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Enter=expand r=refresh q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface MarketplaceSkill {\n name: string;\n description: string;\n source: string;\n repo: string;\n tags?: string[];\n stars?: number;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\n// Known skill repositories to aggregate from\nconst SKILL_SOURCES = [\n { owner: 'composioHQ', repo: 'awesome-claude-code-skills', name: 'Composio Curated' },\n { owner: 'anthropics', repo: 'courses', name: 'Anthropic Official' },\n];\n\nexport function Marketplace({ rows = 24 }: Props) {\n const [skills, setSkills] = useState<MarketplaceSkill[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [sel, setSel] = useState(0);\n const [search, setSearch] = useState('');\n const [installing, setInstalling] = useState<string | null>(null);\n\n const filtered = skills.filter(s =>\n s.name.toLowerCase().includes(search.toLowerCase()) ||\n s.description.toLowerCase().includes(search.toLowerCase()) ||\n s.tags?.some(t => t.toLowerCase().includes(search.toLowerCase()))\n );\n\n const maxVisible = Math.max(5, rows - 10);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), filtered.length - maxVisible));\n const visible = filtered.slice(start, start + maxVisible);\n\n useEffect(() => {\n loadMarketplace();\n }, []);\n\n const loadMarketplace = async () => {\n setLoading(true);\n setError(null);\n\n try {\n // Aggregate skills from known sources\n const allSkills: MarketplaceSkill[] = [];\n\n for (const source of SKILL_SOURCES) {\n try {\n // Try to fetch skill index from GitHub\n const indexUrl = `https://raw.githubusercontent.com/${source.owner}/${source.repo}/main/skills.json`;\n const response = await fetch(indexUrl);\n\n if (response.ok) {\n const data = await response.json();\n if (Array.isArray(data)) {\n allSkills.push(...data.map((s: Record<string, unknown>) => ({\n name: String(s.name || 'Unknown'),\n description: String(s.description || ''),\n source: source.name,\n repo: `${source.owner}/${source.repo}`,\n tags: Array.isArray(s.tags) ? s.tags as string[] : [],\n stars: typeof s.stars === 'number' ? s.stars : undefined,\n })));\n }\n } else {\n // Fallback: add the repo itself as a skill source\n allSkills.push({\n name: source.repo,\n description: `Skills from ${source.name}`,\n source: source.name,\n repo: `${source.owner}/${source.repo}`,\n });\n }\n } catch {\n // Add repo as fallback\n allSkills.push({\n name: source.repo,\n description: `Skills from ${source.name}`,\n source: source.name,\n repo: `${source.owner}/${source.repo}`,\n });\n }\n }\n\n // Add some example skills for demo\n if (allSkills.length === 0) {\n allSkills.push(\n { name: 'typescript-strict', description: 'Enable strict TypeScript mode', source: 'Built-in', repo: 'skillkit/skills', tags: ['typescript', 'config'] },\n { name: 'eslint-setup', description: 'Set up ESLint with recommended rules', source: 'Built-in', repo: 'skillkit/skills', tags: ['eslint', 'linting'] },\n { name: 'prettier-config', description: 'Configure Prettier formatting', source: 'Built-in', repo: 'skillkit/skills', tags: ['prettier', 'formatting'] },\n { name: 'jest-setup', description: 'Set up Jest testing framework', source: 'Built-in', repo: 'skillkit/skills', tags: ['jest', 'testing'] },\n { name: 'nextjs-auth', description: 'Add authentication to Next.js', source: 'Community', repo: 'community/skills', tags: ['nextjs', 'auth'] },\n );\n }\n\n setSkills(allSkills);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to load marketplace');\n }\n\n setLoading(false);\n };\n\n useInput((input, key) => {\n if (loading || installing) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(filtered.length - 1, i + 1));\n else if (input === 'r') loadMarketplace();\n else if (input === '/') setSearch('');\n else if (key.backspace || key.delete) setSearch(s => s.slice(0, -1));\n else if (key.return && filtered[sel]) {\n setInstalling(filtered[sel].name);\n // Simulate installation\n setTimeout(() => setInstalling(null), 1500);\n }\n else if (input.length === 1 && /[a-zA-Z0-9-_]/.test(input)) {\n setSearch(s => s + input);\n setSel(0);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SKILL MARKETPLACE</Text>\n <Text dimColor>{skills.length} skills from {SKILL_SOURCES.length} sources</Text>\n\n {search && (\n <Text>Search: <Text color=\"yellow\">{search}</Text> ({filtered.length} results)</Text>\n )}\n\n {loading && <Text>Loading marketplace...</Text>}\n {error && <Text color=\"red\">{error}</Text>}\n {installing && <Text color=\"yellow\">Installing {installing}...</Text>}\n\n {!loading && !installing && filtered.length === 0 && (\n <Box marginTop={1}>\n <Text dimColor>No skills found{search ? ` matching \"${search}\"` : ''}.</Text>\n </Box>\n )}\n\n {!loading && !installing && filtered.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((skill, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Box key={`${skill.repo}/${skill.name}`} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {skill.name.padEnd(25)} <Text dimColor>{skill.source}</Text>\n </Text>\n {isSel && (\n <Box flexDirection=\"column\" marginLeft={3}>\n <Text dimColor>{skill.description}</Text>\n {skill.tags && skill.tags.length > 0 && (\n <Text dimColor>Tags: {skill.tags.join(', ')}</Text>\n )}\n <Text dimColor>Repo: {skill.repo}</Text>\n </Box>\n )}\n </Box>\n );\n })}\n {start + maxVisible < filtered.length && <Text dimColor> ↓ {filtered.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Enter=install type=search r=refresh q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport {\n ObservationStore,\n LearningStore,\n getMemoryStatus,\n getMemoryPaths,\n createMemoryInjector,\n type Learning,\n} from '@skillkit/core';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\ntype Tab = 'learnings' | 'observations' | 'search';\n\nexport function Memory({ rows = 24 }: Props) {\n const [tab, setTab] = useState<Tab>('learnings');\n const [learnings, setLearnings] = useState<Learning[]>([]);\n const [observationCount, setObservationCount] = useState(0);\n const [globalCount, setGlobalCount] = useState(0);\n const [loading, setLoading] = useState(true);\n const [sel, setSel] = useState(0);\n const [expanded, setExpanded] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [searchResults, setSearchResults] = useState<Learning[]>([]);\n const [isGlobal, setIsGlobal] = useState(false);\n\n const maxVisible = Math.max(5, rows - 10);\n const currentList = tab === 'search' ? searchResults : learnings;\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), currentList.length - maxVisible));\n const visible = currentList.slice(start, start + maxVisible);\n\n useEffect(() => {\n loadMemory();\n }, [isGlobal]);\n\n const loadMemory = () => {\n setLoading(true);\n try {\n const projectPath = process.cwd();\n const status = getMemoryStatus(projectPath);\n\n // Load learnings\n const store = new LearningStore(\n isGlobal ? 'global' : 'project',\n isGlobal ? undefined : projectPath\n );\n setLearnings(store.getAll());\n\n // Get counts\n if (status.hasObservations) {\n const obsStore = new ObservationStore(projectPath);\n setObservationCount(obsStore.count());\n } else {\n setObservationCount(0);\n }\n\n if (status.hasGlobalLearnings) {\n const globalStore = new LearningStore('global');\n setGlobalCount(globalStore.count());\n } else {\n setGlobalCount(0);\n }\n } catch {\n setLearnings([]);\n setObservationCount(0);\n setGlobalCount(0);\n }\n setLoading(false);\n };\n\n const handleSearch = (query: string) => {\n if (!query.trim()) {\n setSearchResults([]);\n return;\n }\n\n try {\n const projectPath = process.cwd();\n const injector = createMemoryInjector(projectPath);\n const results = injector.search(query, {\n includeGlobal: true,\n maxLearnings: 20,\n minRelevance: 0,\n });\n setSearchResults(results.map(r => r.learning));\n } catch {\n setSearchResults([]);\n }\n };\n\n useInput((input, key) => {\n if (loading) return;\n\n // Tab navigation\n if (input === '1') { setTab('learnings'); setSel(0); setExpanded(false); }\n else if (input === '2') { setTab('observations'); setSel(0); setExpanded(false); }\n else if (input === '3') { setTab('search'); setSel(0); setExpanded(false); }\n\n // List navigation\n else if (key.upArrow) {\n setSel(i => Math.max(0, i - 1));\n setExpanded(false);\n }\n else if (key.downArrow) {\n setSel(i => Math.min(currentList.length - 1, i + 1));\n setExpanded(false);\n }\n\n // Actions (use 'f' for refresh to avoid conflict with global 'r' for Recommend)\n else if (input === 'f') loadMemory();\n else if (input === 'g') setIsGlobal(g => !g);\n else if (key.return) setExpanded(e => !e);\n\n // Search input (basic)\n else if (tab === 'search' && input && input.length === 1 && !key.ctrl && !key.meta) {\n const newQuery = searchQuery + input;\n setSearchQuery(newQuery);\n handleSearch(newQuery);\n }\n else if (tab === 'search' && key.backspace) {\n const newQuery = searchQuery.slice(0, -1);\n setSearchQuery(newQuery);\n handleSearch(newQuery);\n }\n });\n\n const ONE_MINUTE = 60_000;\n const ONE_HOUR = 3_600_000;\n const ONE_DAY = 86_400_000;\n\n function formatDate(iso: string): string {\n const d = new Date(iso);\n const diff = Date.now() - d.getTime();\n\n if (diff < ONE_MINUTE) return 'Just now';\n if (diff < ONE_HOUR) return `${Math.floor(diff / ONE_MINUTE)}m ago`;\n if (diff < ONE_DAY) return `${Math.floor(diff / ONE_HOUR)}h ago`;\n return d.toLocaleDateString();\n }\n\n function formatEffectiveness(eff?: number): string {\n if (eff === undefined) return ' -';\n return eff.toString().padStart(3) + '%';\n }\n\n function getEffectivenessColor(eff?: number): string | undefined {\n if (eff === undefined) return undefined;\n if (eff >= 70) return 'green';\n if (eff >= 40) return 'yellow';\n return 'red';\n }\n\n const renderLearnings = () => (\n <Box flexDirection=\"column\">\n {currentList.length === 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>No learnings found.</Text>\n <Text dimColor>Run skills to capture learnings, or add manually:</Text>\n <Text dimColor> skillkit memory add --title \"...\" --content \"...\"</Text>\n </Box>\n )}\n\n {currentList.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> {symbols.arrowUp} {start} more</Text>}\n {visible.map((learning, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n\n return (\n <Box key={learning.id} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '}\n <Text color={colors.primary}>{symbols.bullet}</Text>\n {' '}{learning.title.slice(0, 35).padEnd(35)}{' '}\n <Text dimColor>{learning.tags.slice(0, 2).join(', ').slice(0, 15).padEnd(15)}</Text>\n {' '}<Text color={getEffectivenessColor(learning.effectiveness)}>{formatEffectiveness(learning.effectiveness)}</Text>\n {' '}<Text dimColor>{formatDate(learning.updatedAt)}</Text>\n </Text>\n {isSel && expanded && (\n <Box flexDirection=\"column\" marginLeft={3} marginY={1}>\n <Text dimColor>ID: {learning.id.slice(0, 8)}</Text>\n <Text dimColor>Scope: {learning.scope}</Text>\n <Text dimColor>Source: {learning.source}</Text>\n <Text dimColor>Tags: {learning.tags.join(', ')}</Text>\n {learning.frameworks && learning.frameworks.length > 0 && (\n <Text dimColor>Frameworks: {learning.frameworks.join(', ')}</Text>\n )}\n <Text dimColor>Uses: {learning.useCount}</Text>\n <Box marginTop={1}>\n <Text wrap=\"wrap\">{learning.content.slice(0, 300)}{learning.content.length > 300 ? '...' : ''}</Text>\n </Box>\n </Box>\n )}\n </Box>\n );\n })}\n {start + maxVisible < currentList.length && (\n <Text dimColor> {symbols.arrowDown} {currentList.length - start - maxVisible} more</Text>\n )}\n </Box>\n )}\n </Box>\n );\n\n const renderObservations = () => (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text>Session Observations: <Text bold color={colors.primary}>{observationCount}</Text></Text>\n <Text dimColor>Observations are raw captures from skill execution.</Text>\n\n {observationCount > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text>Compress observations into learnings:</Text>\n <Text dimColor> skillkit memory compress</Text>\n </Box>\n )}\n\n {observationCount >= 50 && (\n <Box marginTop={1}>\n <Text color=\"yellow\">{symbols.warning} You have many uncompressed observations.</Text>\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Observations are stored at:</Text>\n </Box>\n <Text dimColor> {getMemoryPaths(process.cwd()).observationsFile}</Text>\n </Box>\n );\n\n const renderSearch = () => (\n <Box flexDirection=\"column\" marginTop={1}>\n <Box>\n <Text>Search: </Text>\n <Text color={colors.primary}>{searchQuery}</Text>\n <Text color={colors.secondary}>_</Text>\n </Box>\n\n {searchQuery && searchResults.length === 0 && (\n <Box marginTop={1}>\n <Text dimColor>No results found for \"{searchQuery}\"</Text>\n </Box>\n )}\n\n {searchResults.length > 0 && renderLearnings()}\n </Box>\n );\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>MEMORY</Text>\n <Text dimColor>\n {isGlobal ? 'Global' : 'Project'}: {learnings.length} learning(s)\n {!isGlobal && globalCount > 0 && <Text> | Global: {globalCount}</Text>}\n </Text>\n\n {/* Tabs */}\n <Box marginTop={1}>\n <Text inverse={tab === 'learnings'}>[1] Learnings</Text>\n <Text> </Text>\n <Text inverse={tab === 'observations'}>[2] Observations</Text>\n <Text> </Text>\n <Text inverse={tab === 'search'}>[3] Search</Text>\n </Box>\n\n {loading && <Box marginTop={1}><Text>Loading...</Text></Box>}\n\n {!loading && tab === 'learnings' && renderLearnings()}\n {!loading && tab === 'observations' && renderObservations()}\n {!loading && tab === 'search' && renderSearch()}\n\n <Box marginTop={1}>\n <Text dimColor>\n Enter=expand g=toggle global f=refresh 1-3=tabs\n </Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface HeaderProps {\n title: string;\n subtitle?: string;\n count?: number;\n}\n\nexport function Header({ title, subtitle, count }: HeaderProps) {\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box justifyContent=\"space-between\">\n <Text color={colors.primary} bold>\n {title.toUpperCase()}\n </Text>\n {count !== undefined && (\n <Text color={colors.secondaryDim}>\n {symbols.star} {count}\n </Text>\n )}\n </Box>\n {subtitle && (\n <Text color={colors.secondaryDim} dimColor>\n {subtitle}\n </Text>\n )}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\nexport interface SkillItem {\n name: string;\n description?: string;\n source?: string;\n installs?: number;\n enabled?: boolean;\n}\n\ninterface SkillListProps {\n skills: SkillItem[];\n selectedIndex: number;\n showInstalls?: boolean;\n showRank?: boolean;\n showSource?: boolean;\n maxVisible?: number;\n}\n\nfunction formatInstalls(count: number): string {\n if (count >= 1000) {\n return `${(count / 1000).toFixed(1)}K`;\n }\n return String(count);\n}\n\nexport function SkillList({\n skills,\n selectedIndex,\n showInstalls = false,\n showRank = false,\n showSource = true,\n maxVisible = 10,\n}: SkillListProps) {\n if (skills.length === 0) {\n return (\n <Box>\n <Text color={colors.secondaryDim} dimColor>\n No skills found\n </Text>\n </Box>\n );\n }\n\n const startIndex = Math.max(0, selectedIndex - Math.floor(maxVisible / 2));\n const visibleSkills = skills.slice(startIndex, startIndex + maxVisible);\n const actualStartIndex = startIndex;\n\n return (\n <Box flexDirection=\"column\">\n {showRank && (\n <Box marginBottom={1}>\n <Text color={colors.secondaryDim}>\n {' # SKILL'}\n {showSource && ' SOURCE'}\n {showInstalls && ' INSTALLS'}\n </Text>\n </Box>\n )}\n\n {visibleSkills.map((skill, idx) => {\n const realIndex = actualStartIndex + idx;\n const isSelected = realIndex === selectedIndex;\n const skillName = skill.name.padEnd(28).slice(0, 28);\n const sourceName = skill.source ? skill.source.slice(0, 25) : '';\n\n return (\n <Box key={`${skill.source}-${skill.name}`}>\n <Text\n color={isSelected ? colors.primary : colors.secondary}\n bold={isSelected}\n inverse={isSelected}\n >\n {isSelected ? symbols.pointer : ' '}\n {showRank ? String(realIndex + 1).padStart(2, ' ') : ''}\n {' '}\n {skillName}\n </Text>\n {showSource && (\n <Text color={colors.secondaryDim} dimColor={!isSelected}>\n {' '}{sourceName}\n </Text>\n )}\n {showInstalls && skill.installs !== undefined && (\n <Text color={colors.secondaryDim}>\n {formatInstalls(skill.installs).padStart(8)}\n </Text>\n )}\n </Box>\n );\n })}\n\n {skills.length > maxVisible && (\n <Box marginTop={1}>\n <Text color={colors.secondaryDim} dimColor>\n Showing {startIndex + 1}-{Math.min(startIndex + maxVisible, skills.length)} of {skills.length}\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface Shortcut {\n key: string;\n label: string;\n}\n\ninterface StatusBarProps {\n shortcuts: Shortcut[];\n message?: string;\n}\n\nexport function StatusBar({ shortcuts, message }: StatusBarProps) {\n return (\n <Box\n borderStyle=\"single\"\n borderColor={colors.borderDim}\n borderTop\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n paddingX={1}\n justifyContent=\"space-between\"\n >\n <Box gap={2}>\n {shortcuts.map((shortcut, idx) => (\n <Box key={idx} gap={1}>\n <Text color={colors.primary} bold>\n {shortcut.key}\n </Text>\n <Text color={colors.secondaryDim}>{shortcut.label}</Text>\n </Box>\n ))}\n </Box>\n\n {message && (\n <Text color={colors.success}>\n {symbols.check} {message}\n </Text>\n )}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport TextInput from 'ink-text-input';\nimport { colors } from '../theme.js';\n\ninterface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n isFocused?: boolean;\n}\n\nexport function SearchInput({\n value,\n onChange,\n placeholder = 'Search skills...',\n isFocused = false,\n}: SearchInputProps) {\n return (\n <Box\n borderStyle=\"single\"\n borderColor={isFocused ? colors.primary : colors.borderDim}\n paddingX={1}\n >\n <Text color={colors.secondaryDim}>/ </Text>\n {isFocused ? (\n <TextInput\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n />\n ) : (\n <Text color={value ? colors.secondary : colors.secondaryDim}>\n {value || placeholder}\n </Text>\n )}\n <Box flexGrow={1} />\n <Text color={colors.secondaryDim}>/</Text>\n </Box>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { useInput, useApp } from 'ink';\nimport type { Screen } from '../App.js';\n\ninterface UseKeyboardOptions {\n onNavigate?: (screen: Screen) => void;\n onSelect?: () => void;\n onSearch?: () => void;\n onInstall?: () => void;\n onBack?: () => void;\n onUp?: () => void;\n onDown?: () => void;\n disabled?: boolean;\n}\n\nexport function useKeyboard(options: UseKeyboardOptions = {}) {\n const { exit } = useApp();\n\n useInput((input, key) => {\n if (options.disabled) return;\n\n if (input === 'q' || (key.ctrl && input === 'c')) {\n exit();\n return;\n }\n\n if (key.escape && options.onBack) {\n options.onBack();\n return;\n }\n\n if (key.return && options.onSelect) {\n options.onSelect();\n return;\n }\n\n if (key.upArrow && options.onUp) {\n options.onUp();\n return;\n }\n\n if (key.downArrow && options.onDown) {\n options.onDown();\n return;\n }\n\n if (input === '/' && options.onSearch) {\n options.onSearch();\n return;\n }\n\n if (input === 'i' && options.onInstall) {\n options.onInstall();\n return;\n }\n\n if (input === 'h' && options.onNavigate) {\n options.onNavigate('home');\n } else if (input === 'b' && options.onNavigate) {\n options.onNavigate('browse');\n } else if (input === 'l' && options.onNavigate) {\n options.onNavigate('installed');\n } else if (input === 's' && options.onNavigate) {\n options.onNavigate('sync');\n } else if (input === ',' && options.onNavigate) {\n options.onNavigate('settings');\n }\n });\n}\n\nexport function useListNavigation(listLength: number, initialIndex = 0) {\n const [selectedIndex, setSelectedIndex] = useState(initialIndex);\n\n useEffect(() => {\n if (selectedIndex >= listLength && listLength > 0) {\n setSelectedIndex(listLength - 1);\n }\n }, [listLength, selectedIndex]);\n\n const moveUp = useCallback(() => {\n setSelectedIndex((prev) => Math.max(0, prev - 1));\n }, []);\n\n const moveDown = useCallback(() => {\n setSelectedIndex((prev) => Math.min(listLength - 1, prev + 1));\n }, [listLength]);\n\n const reset = useCallback(() => {\n setSelectedIndex(0);\n }, []);\n\n return { selectedIndex, setSelectedIndex, moveUp, moveDown, reset };\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport {\n LearningStore,\n ObservationStore,\n getMemoryStatus,\n createMemoryInjector,\n type Learning,\n type Observation,\n type MemoryStatus,\n} from '@skillkit/core';\n\ninterface UseMemoryResult {\n learnings: Learning[];\n observations: Observation[];\n status: MemoryStatus | null;\n loading: boolean;\n error: string | null;\n isGlobal: boolean;\n setIsGlobal: (isGlobal: boolean) => void;\n refresh: () => void;\n search: (query: string) => Learning[];\n deleteLearning: (id: string) => boolean;\n deleteObservation: (id: string) => boolean;\n}\n\nexport function useMemory(): UseMemoryResult {\n const [learnings, setLearnings] = useState<Learning[]>([]);\n const [observations, setObservations] = useState<Observation[]>([]);\n const [status, setStatus] = useState<MemoryStatus | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [isGlobal, setIsGlobal] = useState(false);\n\n const projectPath = process.cwd();\n\n const refresh = useCallback(() => {\n setLoading(true);\n setError(null);\n\n try {\n // Get memory status\n const memStatus = getMemoryStatus(projectPath);\n setStatus(memStatus);\n\n // Load learnings\n const learningStore = new LearningStore(\n isGlobal ? 'global' : 'project',\n isGlobal ? undefined : projectPath\n );\n setLearnings(learningStore.getAll());\n\n // Load observations (project only)\n if (memStatus.hasObservations) {\n const obsStore = new ObservationStore(projectPath);\n setObservations(obsStore.getAll());\n } else {\n setObservations([]);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load memory');\n setLearnings([]);\n setObservations([]);\n } finally {\n setLoading(false);\n }\n }, [projectPath, isGlobal]);\n\n const search = useCallback(\n (query: string): Learning[] => {\n if (!query.trim()) {\n return [];\n }\n\n try {\n const injector = createMemoryInjector(projectPath);\n const results = injector.search(query, {\n includeGlobal: true,\n maxLearnings: 50,\n minRelevance: 0,\n });\n return results.map((r) => r.learning);\n } catch {\n return [];\n }\n },\n [projectPath]\n );\n\n const deleteLearning = useCallback(\n (id: string): boolean => {\n try {\n const store = new LearningStore(\n isGlobal ? 'global' : 'project',\n isGlobal ? undefined : projectPath\n );\n const result = store.delete(id);\n if (result) {\n refresh();\n }\n return result;\n } catch {\n return false;\n }\n },\n [projectPath, isGlobal, refresh]\n );\n\n const deleteObservation = useCallback(\n (id: string): boolean => {\n try {\n const store = new ObservationStore(projectPath);\n const result = store.delete(id);\n if (result) {\n refresh();\n }\n return result;\n } catch {\n return false;\n }\n },\n [projectPath, refresh]\n );\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n return {\n learnings,\n observations,\n status,\n loading,\n error,\n isGlobal,\n setIsGlobal,\n refresh,\n search,\n deleteLearning,\n deleteObservation,\n };\n}\n"],"mappings":"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","names":["useState","Box","Text","useInput","Box","Text","jsx","jsxs","Box","Text","useState","join","Box","Text","useState","useEffect","rmSync","detectProvider","getAdapter","jsx","jsxs","useState","detectProvider","getAdapter","join","Box","Text","useState","Box","Text","useInput","useState","useEffect","useState","rmSync","useEffect","jsx","jsxs","useState","useInput","Box","Text","useState","useEffect","Box","Text","useInput","getAllAdapters","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","Box","Text","useInput","jsx","jsxs","useState","useInput","Box","Text","useState","existsSync","mkdirSync","cpSync","rmSync","join","Box","Text","useInput","useState","useCallback","useEffect","detectProvider","detectAgent","getAdapter","getAllAdapters","jsx","jsxs","useState","getAllAdapters","detectProvider","detectAgent","getAdapter","existsSync","mkdirSync","join","rmSync","cpSync","useInput","Box","Text","useState","useEffect","existsSync","readFileSync","mkdirSync","join","Box","Text","useInput","getAllAdapters","getAdapter","jsx","jsxs","useState","useEffect","existsSync","join","readFileSync","getAllAdapters","result","getAdapter","mkdirSync","useInput","Box","Text","useState","useEffect","Box","Text","useInput","getAllAdapters","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","Box","Text","useInput","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","Box","Text","useInput","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","Box","Text","useInput","createSessionManager","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","Box","Text","useInput","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","Box","Text","useInput","jsx","jsxs","useState","useEffect","useInput","Box","Text","jsx","jsxs","useState","useInput","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","useState","useCallback","useEffect","useInput","useApp","useState","useEffect","useCallback","LearningStore","ObservationStore","getMemoryStatus","createMemoryInjector","jsx"]}
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"]}