{"version":3,"sources":["../../src/model/inspector.ts","../../src/model/catalog.ts","../../src/model/selector.ts","../../src/model/project.ts","../../src/tui/ansi.ts","../../src/tui/symbols.ts","../../src/tui/panel.ts","../../src/tui/bar.ts","../../src/tui/screens/inspect.ts","../../src/tui/screens/catalog.ts","../../src/tui/table.ts","../../src/tui/index.ts","../../src/cli/adapt.ts","../../src/tui/app/theme.ts","../../src/tui/app/Sidebar.tsx","../../src/tui/app/Statusbar.tsx","../../src/tui/app/screens/Dashboard.tsx","../../src/tui/app/screens/Inspect.tsx","../../src/tui/app/screens/Catalog.tsx","../../src/tui/app/screens/Leaderboard.tsx","../../src/tui/app/screens/ModelDetail.tsx","../../src/tui/app/screens/Project.tsx","../../src/tui/app/screens/Playground.tsx","../../src/tui/app/App.tsx","../../src/tui/app/index.tsx","../../src/cli/init.ts","../../src/cli/index.ts","../../src/cli/run.ts"],"sourcesContent":["import * as os from \"os\";\nimport { execSync } from \"child_process\";\n\nexport interface GPUInfo {\n  name: string;\n  vramGB: number;\n  type: \"nvidia\" | \"amd\" | \"apple-silicon\" | \"intel\";\n}\n\nexport interface ProviderAvailability {\n  name: string;\n  available: boolean;\n  version?: string;\n  endpoint?: string;\n  installedModels?: number;\n}\n\nexport interface InstalledModel {\n  name: string;\n  tag: string;\n  provider: string;\n  sizeGB: number;\n  quantization?: string;\n}\n\nexport interface MachineProfile {\n  hostname: string;\n  platform: string;\n  arch: string;\n  cpuCores: number;\n  cpuModel: string;\n  totalRamGB: number;\n  availableRamGB: number;\n  gpus: GPUInfo[];\n  hasMetal: boolean;\n  providers: ProviderAvailability[];\n  installedModels: InstalledModel[];\n  scannedAt: number;\n}\n\ntype HardwareInfo = Pick<\n  MachineProfile,\n  | \"hostname\"\n  | \"platform\"\n  | \"arch\"\n  | \"cpuCores\"\n  | \"cpuModel\"\n  | \"totalRamGB\"\n  | \"availableRamGB\"\n  | \"gpus\"\n  | \"hasMetal\"\n>;\n\nconst GB = 1024 * 1024 * 1024;\n\nfunction safeExecSync(command: string): string | null {\n  try {\n    return execSync(command, {\n      encoding: \"utf-8\",\n      timeout: 10000,\n      stdio: [\"pipe\", \"pipe\", \"pipe\"],\n    })\n      .trim();\n  } catch {\n    return null;\n  }\n}\n\nexport class MachineInspector {\n  private cachedProfile: MachineProfile | null = null;\n\n  async inspect(): Promise<MachineProfile> {\n    const hardware = await this.detectHardware();\n    const providers = await this.detectProviders();\n    const installedModels = await this.detectInstalledModels();\n\n    this.cachedProfile = {\n      ...hardware,\n      providers,\n      installedModels,\n      scannedAt: Date.now(),\n    };\n\n    return this.cachedProfile;\n  }\n\n  async detectHardware(): Promise<HardwareInfo> {\n    const cpus = os.cpus();\n    const cpuModel = cpus.length > 0 ? cpus[0].model : \"unknown\";\n    const isAppleSilicon = cpuModel.toLowerCase().includes(\"apple\");\n\n    const gpus: GPUInfo[] = [];\n\n    if (isAppleSilicon) {\n      gpus.push({\n        name: cpuModel,\n        vramGB: parseFloat((os.totalmem() / GB).toFixed(2)),\n        type: \"apple-silicon\",\n      });\n    }\n\n    const nvidiaGpus = this.detectNvidiaGPUs();\n    if (nvidiaGpus) {\n      gpus.push(...nvidiaGpus);\n    }\n\n    const amdGpus = this.detectAmdGPUs();\n    if (amdGpus) {\n      gpus.push(...amdGpus);\n    }\n\n    const intelGpus = this.detectIntelGPUs();\n    if (intelGpus) {\n      gpus.push(...intelGpus);\n    }\n\n    return {\n      hostname: os.hostname(),\n      platform: os.platform() as MachineProfile[\"platform\"],\n      arch: os.arch() as MachineProfile[\"arch\"],\n      cpuCores: cpus.length,\n      cpuModel,\n      totalRamGB: parseFloat((os.totalmem() / GB).toFixed(2)),\n      availableRamGB: parseFloat((os.freemem() / GB).toFixed(2)),\n      gpus,\n      hasMetal: isAppleSilicon,\n    };\n  }\n\n  private detectNvidiaGPUs(): GPUInfo[] | null {\n    const output = safeExecSync(\n      'nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits'\n    );\n    if (!output) return null;\n\n    const gpus: GPUInfo[] = [];\n    const lines = output.split(\"\\n\").filter((l) => l.trim().length > 0);\n\n    for (const line of lines) {\n      const parts = line.split(\",\").map((s) => s.trim());\n      if (parts.length < 2) continue;\n      const name = parts[0];\n      const vramMiB = parseFloat(parts[1]);\n      if (isNaN(vramMiB)) continue;\n      gpus.push({\n        name,\n        vramGB: parseFloat((vramMiB / 1024).toFixed(2)),\n        type: \"nvidia\",\n      });\n    }\n\n    return gpus.length > 0 ? gpus : null;\n  }\n\n  private detectAmdGPUs(): GPUInfo[] | null {\n    const output = safeExecSync(\n      \"rocm-smi --showproductname --csv\"\n    );\n    if (!output) return null;\n\n    const gpus: GPUInfo[] = [];\n    const lines = output.split(\"\\n\").filter((l) => l.trim().length > 0);\n\n    for (const line of lines.slice(1)) {\n      const parts = line.split(\",\").map((s) => s.trim());\n      if (parts.length < 2) continue;\n      const name = parts[1] || parts[0];\n      gpus.push({\n        name,\n        vramGB: 0,\n        type: \"amd\",\n      });\n    }\n\n    const vramOutput = safeExecSync(\n      \"rocm-smi --showmeminfo vram --csv\"\n    );\n    if (vramOutput && gpus.length > 0) {\n      const vramLines = vramOutput.split(\"\\n\").filter((l) => l.trim().length > 0);\n      let gpuIndex = 0;\n      for (const vramLine of vramLines.slice(1)) {\n        const vramParts = vramLine.split(\",\").map((s) => s.trim());\n        if (vramParts.length >= 2) {\n          const totalBytes = parseInt(vramParts[1], 10);\n          if (!isNaN(totalBytes) && gpuIndex < gpus.length) {\n            gpus[gpuIndex].vramGB = parseFloat((totalBytes / GB).toFixed(2));\n            gpuIndex++;\n          }\n        }\n      }\n    }\n\n    return gpus.length > 0 ? gpus : null;\n  }\n\n  private detectIntelGPUs(): GPUInfo[] | null {\n    if (os.platform() !== \"linux\") return null;\n\n    const output = safeExecSync(\"lspci -nn 2>/dev/null | grep -i vga\");\n    if (!output) return null;\n\n    const gpus: GPUInfo[] = [];\n    const lines = output.split(\"\\n\").filter((l) => l.trim().length > 0);\n\n    for (const line of lines) {\n      if (line.toLowerCase().includes(\"intel\")) {\n        const match = line.match(/:\\s*(.+)/);\n        const name = match ? match[1].trim() : \"Intel GPU\";\n        gpus.push({\n          name,\n          vramGB: 0,\n          type: \"intel\",\n        });\n      }\n    }\n\n    return gpus.length > 0 ? gpus : null;\n  }\n\n  async detectProviders(): Promise<ProviderAvailability[]> {\n    const providers: ProviderAvailability[] = [];\n\n    providers.push(await this.detectOllama());\n    providers.push(await this.detectLmStudio());\n    providers.push(await this.detectLlamacpp());\n    providers.push(await this.detectAnthropic());\n    providers.push(await this.detectOpenAI());\n\n    return providers;\n  }\n\n  private async detectOllama(): Promise<ProviderAvailability> {\n    const versionOutput = safeExecSync(\"ollama --version\");\n    let version: string | undefined;\n    if (versionOutput) {\n      const match = versionOutput.match(/[\\d.]+/);\n      version = match ? match[0] : undefined;\n    }\n\n    const isInstalled = versionOutput !== null;\n\n    let installedModels: number | undefined;\n    if (isInstalled) {\n      const models = await this.fetchOllamaModels();\n      installedModels = models.length;\n    }\n\n    return {\n      name: \"ollama\",\n      available: isInstalled,\n      version,\n      endpoint: \"http://localhost:11434\",\n      installedModels,\n    };\n  }\n\n  private async detectLmStudio(): Promise<ProviderAvailability> {\n    let version: string | undefined;\n    const lmsOutput = safeExecSync(\"lms version 2>/dev/null || lmstudio --version 2>/dev/null\");\n    if (lmsOutput) {\n      const match = lmsOutput.match(/[\\d.]+/);\n      version = match ? match[0] : undefined;\n    }\n\n    const serverCheck = safeExecSync(\"curl -s -o /dev/null -w '%{http_code}' http://localhost:1234/v1/models\");\n    const isRunning = serverCheck !== null && serverCheck.includes(\"200\");\n\n    let installedModels: number | undefined;\n    if (isRunning) {\n      const models = await this.fetchLmStudioModels();\n      installedModels = models.length;\n    }\n\n    return {\n      name: \"lmstudio\",\n      available: isRunning || lmsOutput !== null,\n      version,\n      endpoint: \"http://localhost:1234\",\n      installedModels,\n    };\n  }\n\n  private async detectLlamacpp(): Promise<ProviderAvailability> {\n    const output = safeExecSync(\"which llama-cli 2>/dev/null || which main 2>/dev/null || which llama.cpp 2>/dev/null\");\n    return {\n      name: \"llamacpp\",\n      available: output !== null,\n    };\n  }\n\n  private async detectAnthropic(): Promise<ProviderAvailability> {\n    const hasApiKey = !!(\n      process.env.ANTHROPIC_API_KEY && process.env.ANTHROPIC_API_KEY.length > 0\n    );\n\n    const cliOutput = safeExecSync(\"claude --version 2>/dev/null\");\n    let version: string | undefined;\n    if (cliOutput) {\n      const match = cliOutput.match(/[\\d.]+/);\n      version = match ? match[0] : undefined;\n    }\n\n    return {\n      name: \"anthropic\",\n      available: hasApiKey || cliOutput !== null,\n      version,\n      endpoint: \"https://api.anthropic.com\",\n    };\n  }\n\n  private async detectOpenAI(): Promise<ProviderAvailability> {\n    const hasApiKey = !!(\n      process.env.OPENAI_API_KEY && process.env.OPENAI_API_KEY.length > 0\n    );\n\n    const cliOutput = safeExecSync(\"openai --version 2>/dev/null\");\n    let version: string | undefined;\n    if (cliOutput) {\n      const match = cliOutput.match(/[\\d.]+/);\n      version = match ? match[0] : undefined;\n    }\n\n    return {\n      name: \"openai\",\n      available: hasApiKey || cliOutput !== null,\n      version,\n      endpoint: \"https://api.openai.com\",\n    };\n  }\n\n  async detectInstalledModels(): Promise<InstalledModel[]> {\n    const models: InstalledModel[] = [];\n\n    const ollamaModels = await this.fetchOllamaModels();\n    models.push(...ollamaModels);\n\n    const lmStudioModels = await this.fetchLmStudioModels();\n    models.push(...lmStudioModels);\n\n    return models;\n  }\n\n  private async fetchOllamaModels(): Promise<InstalledModel[]> {\n    const output = safeExecSync(\"curl -s http://localhost:11434/api/tags\");\n    if (!output) return [];\n\n    try {\n      const parsed = JSON.parse(output);\n      const models: InstalledModel[] = [];\n\n      if (parsed && Array.isArray(parsed.models)) {\n        for (const model of parsed.models) {\n          const name: string = model.name || model.model || \"unknown\";\n          const sizeBytes: number = model.size || 0;\n          const quant: string | undefined = model.details?.quantization_level;\n\n          models.push({\n            name,\n            tag: name,\n            provider: \"ollama\",\n            sizeGB: parseFloat((sizeBytes / GB).toFixed(2)),\n            quantization: quant,\n          });\n        }\n      }\n\n      return models;\n    } catch {\n      return [];\n    }\n  }\n\n  private async fetchLmStudioModels(): Promise<InstalledModel[]> {\n    const output = safeExecSync(\"curl -s http://localhost:1234/v1/models\");\n    if (!output) return [];\n\n    try {\n      const parsed = JSON.parse(output);\n      const models: InstalledModel[] = [];\n\n      if (parsed && Array.isArray(parsed.data)) {\n        for (const model of parsed.data) {\n          const name: string = model.id || \"unknown\";\n\n          models.push({\n            name,\n            tag: name,\n            provider: \"lmstudio\",\n            sizeGB: 0,\n          });\n        }\n      }\n\n      return models;\n    } catch {\n      return [];\n    }\n  }\n\n  getEffectiveVramGB(): number {\n    if (!this.cachedProfile) return 0;\n\n    const appleSilicon = this.cachedProfile.gpus.find(\n      (g) => g.type === \"apple-silicon\"\n    );\n    if (appleSilicon) {\n      return this.cachedProfile.totalRamGB;\n    }\n\n    return this.cachedProfile.gpus.reduce((sum, gpu) => sum + gpu.vramGB, 0);\n  }\n\n  getEffectiveRamGB(): number {\n    if (!this.cachedProfile) return 0;\n    return this.cachedProfile.availableRamGB;\n  }\n\n  canRunModel(minVramGB: number, minRamGB: number): boolean {\n    return this.getEffectiveVramGB() >= minVramGB && this.getEffectiveRamGB() >= minRamGB;\n  }\n\n  toJSON(): string {\n    const profile = this.cachedProfile;\n    if (!profile) {\n      return JSON.stringify({ error: \"no profile; call inspect() first\" });\n    }\n    return JSON.stringify(profile, null, 2);\n  }\n}\n","import type { ModelInfo } from \"./types.js\";\n\nexport interface CatalogEntry extends ModelInfo {\n  family: string;\n  maker: string;\n  parameterSizes: string[];\n  activeParams?: string;\n  architecture: \"dense\" | \"moe\";\n  quantizations: { name: string; sizeGB: number }[];\n  minVramGB: number;\n  minRamGB: number;\n  benchmarks?: {\n    liveCodeBench?: number;\n    humaneval?: number;\n    mmlu?: number;\n    sweBench?: number;\n    codeforcesElo?: number;\n  };\n  recommendedFor: (\"coding\" | \"reasoning\" | \"chat\" | \"agents\" | \"edge\" | \"fast\" | \"cheap\")[];\n  ollamaTags: string[];\n  ollamaCloud?: boolean;\n  openWeight: boolean;\n  released: string;\n}\n\nexport const MODEL_CATALOG: CatalogEntry[] = [\n  {\n    id: \"gemma4:31b\",\n    name: \"Gemma 4 31B\",\n    family: \"gemma4\",\n    maker: \"Google DeepMind\",\n    provider: \"ollama\",\n    contextWindow: 262144,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: true,\n    supportsThinking: true,\n    parameterSizes: [\"31B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 20 }],\n    minVramGB: 22,\n    minRamGB: 32,\n    benchmarks: { liveCodeBench: 80.0, mmlu: 85.2, sweBench: 52.0, codeforcesElo: 2150 },\n    recommendedFor: [\"coding\", \"reasoning\", \"agents\"],\n    ollamaTags: [\"gemma4:31b\", \"gemma4:latest\"],\n    ollamaCloud: true,\n    openWeight: true,\n    released: \"2026-04\",\n    tags: [\"gemma4\", \"31b\", \"dense\"],\n  },\n  {\n    id: \"gemma4:26b\",\n    name: \"Gemma 4 26B MoE\",\n    family: \"gemma4\",\n    maker: \"Google DeepMind\",\n    provider: \"ollama\",\n    contextWindow: 262144,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: true,\n    supportsThinking: true,\n    parameterSizes: [\"26B\"],\n    activeParams: \"3.8B\",\n    architecture: \"moe\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 18 }],\n    minVramGB: 20,\n    minRamGB: 28,\n    benchmarks: { liveCodeBench: 77.1, mmlu: 82.6, sweBench: 48.0, codeforcesElo: 1718 },\n    recommendedFor: [\"coding\", \"reasoning\", \"agents\", \"fast\"],\n    ollamaTags: [\"gemma4:26b\"],\n    openWeight: true,\n    released: \"2026-04\",\n    tags: [\"gemma4\", \"26b\", \"moe\"],\n  },\n  {\n    id: \"gemma4:e4b\",\n    name: \"Gemma 4 E4B\",\n    family: \"gemma4\",\n    maker: \"Google DeepMind\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: true,\n    supportsThinking: true,\n    parameterSizes: [\"8B\"],\n    activeParams: \"4.5B\",\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 9.6 }],\n    minVramGB: 11,\n    minRamGB: 16,\n    benchmarks: { liveCodeBench: 52.0, mmlu: 69.4, codeforcesElo: 940 },\n    recommendedFor: [\"coding\", \"edge\", \"fast\", \"cheap\"],\n    ollamaTags: [\"gemma4:e4b\"],\n    openWeight: true,\n    released: \"2026-04\",\n    tags: [\"gemma4\", \"e4b\", \"edge\"],\n  },\n  {\n    id: \"gemma4:e2b\",\n    name: \"Gemma 4 E2B\",\n    family: \"gemma4\",\n    maker: \"Google DeepMind\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: true,\n    supportsThinking: true,\n    parameterSizes: [\"5.1B\"],\n    activeParams: \"2.3B\",\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 7.2 }],\n    minVramGB: 8,\n    minRamGB: 12,\n    benchmarks: { liveCodeBench: 44.0, mmlu: 60.0, codeforcesElo: 633 },\n    recommendedFor: [\"edge\", \"fast\", \"cheap\"],\n    ollamaTags: [\"gemma4:e2b\"],\n    openWeight: true,\n    released: \"2026-04\",\n    tags: [\"gemma4\", \"e2b\", \"edge\"],\n  },\n  {\n    id: \"qwen3-coder:30b\",\n    name: \"Qwen3-Coder 30B\",\n    family: \"qwen3-coder\",\n    maker: \"Alibaba\",\n    provider: \"ollama\",\n    contextWindow: 262144,\n    maxOutputTokens: 16384,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: false,\n    parameterSizes: [\"30B\"],\n    activeParams: \"3.3B\",\n    architecture: \"moe\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 19 }],\n    minVramGB: 21,\n    minRamGB: 28,\n    benchmarks: { liveCodeBench: 78.0, humaneval: 90.0, sweBench: 55.0 },\n    recommendedFor: [\"coding\", \"agents\"],\n    ollamaTags: [\"qwen3-coder:30b\", \"qwen3-coder\"],\n    openWeight: true,\n    released: \"2025-10\",\n    tags: [\"qwen3\", \"coder\", \"30b\", \"moe\"],\n  },\n  {\n    id: \"qwen3-coder:480b\",\n    name: \"Qwen3-Coder 480B\",\n    family: \"qwen3-coder\",\n    maker: \"Alibaba\",\n    provider: \"ollama\",\n    contextWindow: 262144,\n    maxOutputTokens: 16384,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: false,\n    parameterSizes: [\"480B\"],\n    architecture: \"moe\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 290 }],\n    minVramGB: 320,\n    minRamGB: 384,\n    recommendedFor: [\"coding\", \"agents\"],\n    ollamaTags: [\"qwen3-coder:480b\"],\n    ollamaCloud: true,\n    openWeight: true,\n    released: \"2025-10\",\n    tags: [\"qwen3\", \"coder\", \"480b\", \"moe\"],\n  },\n  {\n    id: \"qwen3:32b\",\n    name: \"Qwen3 32B\",\n    family: \"qwen3\",\n    maker: \"Alibaba\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"32B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 19 }],\n    minVramGB: 21,\n    minRamGB: 28,\n    benchmarks: { liveCodeBench: 72.0, mmlu: 83.0, sweBench: 45.0 },\n    recommendedFor: [\"coding\", \"reasoning\", \"agents\"],\n    ollamaTags: [\"qwen3:32b\"],\n    openWeight: true,\n    released: \"2025-04\",\n    tags: [\"qwen3\", \"32b\", \"dense\"],\n  },\n  {\n    id: \"qwen3:14b\",\n    name: \"Qwen3 14B\",\n    family: \"qwen3\",\n    maker: \"Alibaba\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"14B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 9 }],\n    minVramGB: 11,\n    minRamGB: 16,\n    benchmarks: { liveCodeBench: 62.0, mmlu: 76.0, sweBench: 35.0 },\n    recommendedFor: [\"coding\", \"reasoning\", \"fast\"],\n    ollamaTags: [\"qwen3:14b\"],\n    openWeight: true,\n    released: \"2025-04\",\n    tags: [\"qwen3\", \"14b\"],\n  },\n  {\n    id: \"qwen3:8b\",\n    name: \"Qwen3 8B\",\n    family: \"qwen3\",\n    maker: \"Alibaba\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"8B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 5 }],\n    minVramGB: 6,\n    minRamGB: 10,\n    benchmarks: { liveCodeBench: 52.0, mmlu: 68.0 },\n    recommendedFor: [\"coding\", \"edge\", \"fast\", \"cheap\"],\n    ollamaTags: [\"qwen3:8b\"],\n    openWeight: true,\n    released: \"2025-04\",\n    tags: [\"qwen3\", \"8b\"],\n  },\n  {\n    id: \"qwen3:4b\",\n    name: \"Qwen3 4B\",\n    family: \"qwen3\",\n    maker: \"Alibaba\",\n    provider: \"ollama\",\n    contextWindow: 32768,\n    maxOutputTokens: 4096,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"4B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 2.5 }],\n    minVramGB: 4,\n    minRamGB: 8,\n    recommendedFor: [\"edge\", \"fast\", \"cheap\"],\n    ollamaTags: [\"qwen3:4b\"],\n    openWeight: true,\n    released: \"2025-04\",\n    tags: [\"qwen3\", \"4b\"],\n  },\n  {\n    id: \"qwen3.5:27b\",\n    name: \"Qwen3.5 27B\",\n    family: \"qwen3.5\",\n    maker: \"Alibaba\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: true,\n    supportsThinking: true,\n    parameterSizes: [\"27B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 16 }],\n    minVramGB: 18,\n    minRamGB: 24,\n    recommendedFor: [\"coding\", \"reasoning\", \"agents\"],\n    ollamaTags: [\"qwen3.5:27b\"],\n    openWeight: true,\n    released: \"2026-03\",\n    tags: [\"qwen3.5\", \"27b\"],\n  },\n  {\n    id: \"deepseek-r1:14b\",\n    name: \"DeepSeek-R1 14B\",\n    family: \"deepseek-r1\",\n    maker: \"DeepSeek\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: false,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"14B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 9 }],\n    minVramGB: 11,\n    minRamGB: 16,\n    benchmarks: { mmlu: 78.0, humaneval: 85.0 },\n    recommendedFor: [\"reasoning\", \"coding\"],\n    ollamaTags: [\"deepseek-r1:14b\"],\n    openWeight: true,\n    released: \"2025-01\",\n    tags: [\"deepseek\", \"r1\", \"14b\"],\n  },\n  {\n    id: \"deepseek-r1:32b\",\n    name: \"DeepSeek-R1 32B\",\n    family: \"deepseek-r1\",\n    maker: \"DeepSeek\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: false,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"32B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 19 }],\n    minVramGB: 21,\n    minRamGB: 28,\n    benchmarks: { mmlu: 84.0, humaneval: 89.0 },\n    recommendedFor: [\"reasoning\", \"coding\"],\n    ollamaTags: [\"deepseek-r1:32b\"],\n    openWeight: true,\n    released: \"2025-01\",\n    tags: [\"deepseek\", \"r1\", \"32b\"],\n  },\n  {\n    id: \"deepseek-r1:70b\",\n    name: \"DeepSeek-R1 70B\",\n    family: \"deepseek-r1\",\n    maker: \"DeepSeek\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: false,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"70B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 40 }],\n    minVramGB: 44,\n    minRamGB: 56,\n    benchmarks: { mmlu: 88.0, humaneval: 92.0 },\n    recommendedFor: [\"reasoning\", \"coding\"],\n    ollamaTags: [\"deepseek-r1:70b\"],\n    openWeight: true,\n    released: \"2025-01\",\n    tags: [\"deepseek\", \"r1\", \"70b\"],\n  },\n  {\n    id: \"devstral-small:24b\",\n    name: \"Devstral Small 2 24B\",\n    family: \"devstral\",\n    maker: \"Mistral AI\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: true,\n    supportsThinking: false,\n    parameterSizes: [\"24B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 14 }],\n    minVramGB: 16,\n    minRamGB: 22,\n    benchmarks: { sweBench: 50.0, liveCodeBench: 70.0 },\n    recommendedFor: [\"coding\", \"agents\"],\n    ollamaTags: [\"devstral-small-2\", \"devstral-small:24b\"],\n    openWeight: true,\n    released: \"2025-06\",\n    tags: [\"devstral\", \"24b\", \"coding\"],\n  },\n  {\n    id: \"glm-4.7-flash\",\n    name: \"GLM-4.7-Flash\",\n    family: \"glm\",\n    maker: \"Z.ai\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"30B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 18 }],\n    minVramGB: 20,\n    minRamGB: 26,\n    benchmarks: { mmlu: 82.0, liveCodeBench: 72.0 },\n    recommendedFor: [\"coding\", \"reasoning\", \"agents\"],\n    ollamaTags: [\"glm-4.7-flash\"],\n    openWeight: true,\n    released: \"2025-08\",\n    tags: [\"glm\", \"30b\"],\n  },\n  {\n    id: \"phi4:14b\",\n    name: \"Phi-4 14B\",\n    family: \"phi\",\n    maker: \"Microsoft\",\n    provider: \"ollama\",\n    contextWindow: 16384,\n    maxOutputTokens: 4096,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: false,\n    parameterSizes: [\"14B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 9 }],\n    minVramGB: 11,\n    minRamGB: 16,\n    benchmarks: { humaneval: 84.0, mmlu: 80.0 },\n    recommendedFor: [\"coding\", \"reasoning\", \"fast\"],\n    ollamaTags: [\"phi4:14b\", \"phi4\"],\n    openWeight: true,\n    released: \"2025-01\",\n    tags: [\"phi\", \"14b\"],\n  },\n  {\n    id: \"phi4-mini:3.8b\",\n    name: \"Phi-4 Mini 3.8B\",\n    family: \"phi\",\n    maker: \"Microsoft\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 4096,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: false,\n    parameterSizes: [\"3.8B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 2.4 }],\n    minVramGB: 4,\n    minRamGB: 8,\n    benchmarks: { humaneval: 72.0, mmlu: 68.0 },\n    recommendedFor: [\"edge\", \"fast\", \"cheap\", \"coding\"],\n    ollamaTags: [\"phi4-mini\"],\n    openWeight: true,\n    released: \"2025-02\",\n    tags: [\"phi\", \"mini\", \"3.8b\"],\n  },\n  {\n    id: \"llama4-scout:17b\",\n    name: \"Llama 4 Scout 17B MoE\",\n    family: \"llama4\",\n    maker: \"Meta\",\n    provider: \"ollama\",\n    contextWindow: 10485760,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: true,\n    supportsThinking: false,\n    parameterSizes: [\"109B\"],\n    activeParams: \"17B\",\n    architecture: \"moe\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 65 }],\n    minVramGB: 72,\n    minRamGB: 88,\n    benchmarks: { mmlu: 84.0, liveCodeBench: 68.0 },\n    recommendedFor: [\"coding\", \"reasoning\", \"agents\"],\n    ollamaTags: [\"llama4-scout\"],\n    openWeight: true,\n    released: \"2025-04\",\n    tags: [\"llama4\", \"scout\", \"moe\"],\n  },\n  {\n    id: \"llama4-maverick:17b\",\n    name: \"Llama 4 Maverick 17B MoE\",\n    family: \"llama4\",\n    maker: \"Meta\",\n    provider: \"ollama\",\n    contextWindow: 1048576,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: true,\n    supportsThinking: false,\n    parameterSizes: [\"400B\"],\n    activeParams: \"17B\",\n    architecture: \"moe\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 240 }],\n    minVramGB: 260,\n    minRamGB: 320,\n    benchmarks: { mmlu: 88.0, liveCodeBench: 75.0 },\n    recommendedFor: [\"reasoning\", \"coding\", \"agents\"],\n    ollamaTags: [\"llama4-maverick\"],\n    openWeight: true,\n    released: \"2025-04\",\n    tags: [\"llama4\", \"maverick\", \"moe\"],\n  },\n  {\n    id: \"mistral-small:24b\",\n    name: \"Mistral Small 24B\",\n    family: \"mistral\",\n    maker: \"Mistral AI\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: false,\n    parameterSizes: [\"24B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 14 }],\n    minVramGB: 16,\n    minRamGB: 22,\n    benchmarks: { mmlu: 78.0, liveCodeBench: 65.0 },\n    recommendedFor: [\"coding\", \"chat\", \"fast\"],\n    ollamaTags: [\"mistral-small:24b\"],\n    openWeight: true,\n    released: \"2025-01\",\n    tags: [\"mistral\", \"24b\"],\n  },\n  {\n    id: \"codestral:22b\",\n    name: \"Codestral 22B\",\n    family: \"codestral\",\n    maker: \"Mistral AI\",\n    provider: \"ollama\",\n    contextWindow: 262144,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: false,\n    parameterSizes: [\"22B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 13 }],\n    minVramGB: 15,\n    minRamGB: 20,\n    benchmarks: { humaneval: 86.0, liveCodeBench: 66.0 },\n    recommendedFor: [\"coding\", \"agents\"],\n    ollamaTags: [\"codestral:22b\", \"codestral\"],\n    openWeight: true,\n    released: \"2025-05\",\n    tags: [\"codestral\", \"22b\", \"coding\"],\n  },\n  {\n    id: \"nemotron-cascade-2:30b\",\n    name: \"Nemotron Cascade 2 30B\",\n    family: \"nemotron\",\n    maker: \"NVIDIA\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"30B\"],\n    activeParams: \"3B\",\n    architecture: \"moe\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 18 }],\n    minVramGB: 20,\n    minRamGB: 26,\n    recommendedFor: [\"reasoning\", \"agents\", \"fast\"],\n    ollamaTags: [\"nemotron-cascade-2\"],\n    openWeight: true,\n    released: \"2026-03\",\n    tags: [\"nemotron\", \"30b\", \"moe\"],\n  },\n  {\n    id: \"lfm2:24b\",\n    name: \"LFM2 24B MoE\",\n    family: \"lfm2\",\n    maker: \"Liquid AI\",\n    provider: \"ollama\",\n    contextWindow: 32768,\n    maxOutputTokens: 4096,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: false,\n    parameterSizes: [\"24B\"],\n    activeParams: \"4B\",\n    architecture: \"moe\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 14 }],\n    minVramGB: 16,\n    minRamGB: 20,\n    recommendedFor: [\"edge\", \"fast\", \"coding\"],\n    ollamaTags: [\"lfm2:24b\", \"lfm2\"],\n    openWeight: true,\n    released: \"2025-09\",\n    tags: [\"lfm2\", \"24b\", \"moe\"],\n  },\n  {\n    id: \"gpt-oss:20b\",\n    name: \"GPT-OSS 20B\",\n    family: \"gpt-oss\",\n    maker: \"OpenAI\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 16384,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"20B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 12 }],\n    minVramGB: 14,\n    minRamGB: 20,\n    recommendedFor: [\"reasoning\", \"coding\", \"agents\"],\n    ollamaTags: [\"gpt-oss:20b\", \"gpt-oss\"],\n    openWeight: true,\n    released: \"2025-08\",\n    tags: [\"gpt-oss\", \"20b\"],\n  },\n  {\n    id: \"gpt-oss:120b\",\n    name: \"GPT-OSS 120B\",\n    family: \"gpt-oss\",\n    maker: \"OpenAI\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 16384,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"120B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 72 }],\n    minVramGB: 80,\n    minRamGB: 96,\n    recommendedFor: [\"reasoning\", \"coding\", \"agents\"],\n    ollamaTags: [\"gpt-oss:120b\"],\n    ollamaCloud: true,\n    openWeight: true,\n    released: \"2025-08\",\n    tags: [\"gpt-oss\", \"120b\"],\n  },\n  {\n    id: \"qwen3:30b-a3b\",\n    name: \"Qwen3 30B-A3B MoE\",\n    family: \"qwen3\",\n    maker: \"Alibaba\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 8192,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: true,\n    parameterSizes: [\"30B\"],\n    activeParams: \"3B\",\n    architecture: \"moe\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 17 }],\n    minVramGB: 19,\n    minRamGB: 24,\n    benchmarks: { liveCodeBench: 65.0, mmlu: 80.0 },\n    recommendedFor: [\"coding\", \"fast\", \"agents\"],\n    ollamaTags: [\"qwen3:30b-a3b\"],\n    openWeight: true,\n    released: \"2025-04\",\n    tags: [\"qwen3\", \"30b\", \"moe\"],\n  },\n  {\n    id: \"ministral-3b\",\n    name: \"Ministral 3B\",\n    family: \"mistral\",\n    maker: \"Mistral AI\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 4096,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: true,\n    supportsThinking: false,\n    parameterSizes: [\"3B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 2 }],\n    minVramGB: 3,\n    minRamGB: 6,\n    recommendedFor: [\"edge\", \"fast\", \"cheap\"],\n    ollamaTags: [\"ministral-3b\"],\n    openWeight: true,\n    released: \"2025-06\",\n    tags: [\"mistral\", \"3b\", \"edge\"],\n  },\n  {\n    id: \"rnj-1:8b\",\n    name: \"Rnj-1 8B\",\n    family: \"rnj\",\n    maker: \"Essential AI\",\n    provider: \"ollama\",\n    contextWindow: 32768,\n    maxOutputTokens: 4096,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: false,\n    parameterSizes: [\"8B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 5 }],\n    minVramGB: 6,\n    minRamGB: 10,\n    recommendedFor: [\"coding\", \"fast\", \"cheap\"],\n    ollamaTags: [\"rnj-1:8b\"],\n    openWeight: true,\n    released: \"2025-09\",\n    tags: [\"rnj\", \"8b\"],\n  },\n  {\n    id: \"olmo-3.1:32b\",\n    name: \"Olmo 3.1 32B\",\n    family: \"olmo\",\n    maker: \"Allen AI\",\n    provider: \"ollama\",\n    contextWindow: 131072,\n    maxOutputTokens: 4096,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: false,\n    supportsThinking: false,\n    parameterSizes: [\"32B\"],\n    architecture: \"dense\",\n    quantizations: [{ name: \"Q4_K_M\", sizeGB: 19 }],\n    minVramGB: 21,\n    minRamGB: 28,\n    recommendedFor: [\"coding\", \"reasoning\"],\n    ollamaTags: [\"olmo-3.1:32b\"],\n    openWeight: true,\n    released: \"2025-10\",\n    tags: [\"olmo\", \"32b\"],\n  },\n  {\n    id: \"claude-sonnet-4-20250514\",\n    name: \"Claude Sonnet 4\",\n    family: \"claude\",\n    maker: \"Anthropic\",\n    provider: \"anthropic\",\n    contextWindow: 200000,\n    maxOutputTokens: 16384,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: true,\n    supportsThinking: true,\n    parameterSizes: [\"proprietary\"],\n    architecture: \"dense\",\n    quantizations: [],\n    minVramGB: 0,\n    minRamGB: 0,\n    benchmarks: { sweBench: 72.0, liveCodeBench: 88.0, mmlu: 90.0 },\n    recommendedFor: [\"coding\", \"reasoning\", \"agents\"],\n    ollamaTags: [],\n    openWeight: false,\n    released: \"2025-05\",\n    tags: [\"claude\", \"sonnet\", \"cloud\"],\n  },\n  {\n    id: \"gpt-4o\",\n    name: \"GPT-4o\",\n    family: \"gpt\",\n    maker: \"OpenAI\",\n    provider: \"openai\",\n    contextWindow: 128000,\n    maxOutputTokens: 16384,\n    supportsToolUse: true,\n    supportsStreaming: true,\n    supportsVision: true,\n    supportsThinking: false,\n    parameterSizes: [\"proprietary\"],\n    architecture: \"dense\",\n    quantizations: [],\n    minVramGB: 0,\n    minRamGB: 0,\n    benchmarks: { sweBench: 65.0, liveCodeBench: 85.0, mmlu: 88.0 },\n    recommendedFor: [\"coding\", \"reasoning\", \"agents\"],\n    ollamaTags: [],\n    openWeight: false,\n    released: \"2024-05\",\n    tags: [\"gpt\", \"4o\", \"cloud\"],\n  },\n];\n","import { MODEL_CATALOG, type CatalogEntry } from \"./catalog.js\";\nimport type { MachineProfile, InstalledModel } from \"./inspector.js\";\n\nexport interface SelectionRequest {\n  task: \"coding\" | \"reasoning\" | \"chat\" | \"agents\";\n  projectSize?: \"small\" | \"medium\" | \"large\";\n  preferLocal?: boolean;\n  preferSpeed?: boolean;\n  maxWaitMs?: number;\n}\n\nexport interface SelectionResult {\n  model: string;\n  provider: string;\n  reason: string;\n  confidence: number;\n  alternatives: Array<{ model: string; provider: string; reason: string }>;\n  needsDownload: boolean;\n  estimatedDownloadGB?: number;\n}\n\nexport interface RankedCandidate {\n  model: string;\n  provider: string;\n  score: number;\n  reason: string;\n  needsDownload: boolean;\n  estimatedDownloadGB?: number;\n  installed: boolean;\n  fitsInVram: boolean;\n  fitsInRam: boolean;\n  isMoe: boolean;\n  supportsToolUse: boolean;\n}\n\ninterface Benchmarks {\n  liveCodeBench?: number;\n  sweBench?: number;\n  humaneval?: number;\n  mmlu?: number;\n  codeforcesElo?: number;\n  hasTools?: number;\n  mtBench?: number;\n}\n\nconst CLOUD_PROVIDER_CONFIG: Record<string, () => string | undefined> = {\n  anthropic: () => process.env[\"ANTHROPIC_API_KEY\"],\n  openai: () => process.env[\"OPENAI_API_KEY\"],\n};\n\nconst CLOUD_MODELS: Array<{\n  model: string;\n  provider: string;\n  task: string[];\n  benchmarks: Benchmarks;\n  recommendedFor: string[];\n  supportsToolUse: boolean;\n}> = [\n  {\n    model: \"claude-sonnet-4-20250514\",\n    provider: \"anthropic\",\n    task: [\"coding\", \"reasoning\", \"agents\", \"chat\"],\n    benchmarks: {\n      liveCodeBench: 92,\n      sweBench: 72,\n      humaneval: 96,\n      mmlu: 89,\n      codeforcesElo: 2100,\n      hasTools: 1.0,\n      mtBench: 9.1,\n    },\n    recommendedFor: [\"coding\", \"agents\", \"reasoning\"],\n    supportsToolUse: true,\n  },\n  {\n    model: \"claude-haiku-3-5-20241022\",\n    provider: \"anthropic\",\n    task: [\"coding\", \"chat\"],\n    benchmarks: {\n      liveCodeBench: 78,\n      sweBench: 45,\n      humaneval: 88,\n      mmlu: 84,\n      codeforcesElo: 1500,\n      hasTools: 1.0,\n      mtBench: 8.5,\n    },\n    recommendedFor: [\"chat\", \"coding\"],\n    supportsToolUse: true,\n  },\n  {\n    model: \"gpt-4o\",\n    provider: \"openai\",\n    task: [\"coding\", \"reasoning\", \"agents\", \"chat\"],\n    benchmarks: {\n      liveCodeBench: 86,\n      sweBench: 60,\n      humaneval: 92,\n      mmlu: 88,\n      codeforcesElo: 1900,\n      hasTools: 1.0,\n      mtBench: 9.0,\n    },\n    recommendedFor: [\"coding\", \"reasoning\", \"agents\"],\n    supportsToolUse: true,\n  },\n  {\n    model: \"gpt-4o-mini\",\n    provider: \"openai\",\n    task: [\"coding\", \"chat\"],\n    benchmarks: {\n      liveCodeBench: 72,\n      sweBench: 38,\n      humaneval: 87,\n      mmlu: 82,\n      codeforcesElo: 1400,\n      hasTools: 1.0,\n      mtBench: 8.2,\n    },\n    recommendedFor: [\"chat\"],\n    supportsToolUse: true,\n  },\n];\n\nfunction parseParamSize(sizes: string[]): number {\n  if (sizes.length === 0) return 0;\n  const parsed = sizes\n    .map((s) => {\n      const match = s.match(/([\\d.]+)\\s*(T|B|M|K)?/i);\n      if (!match) return 0;\n      const val = parseFloat(match[1]);\n      const unit = (match[2] ?? \"B\").toUpperCase();\n      if (unit === \"T\") return val * 1000;\n      if (unit === \"B\") return val;\n      if (unit === \"M\") return val / 1000;\n      return val;\n    })\n    .filter((v) => v > 0);\n  return parsed.length > 0 ? Math.max(...parsed) : 0;\n}\n\nexport class AutoSelector {\n  constructor(private profile: MachineProfile) {}\n\n  select(request: SelectionRequest): SelectionResult {\n    const ranked = this.rankAll(request);\n\n    if (ranked.length === 0) {\n      return {\n        model: \"claude-sonnet-4-20250514\",\n        provider: \"anthropic\",\n        reason:\n          \"No local models available or viable. Falling back to Claude Sonnet cloud — ensure ANTHROPIC_API_KEY is set.\",\n        confidence: 0.3,\n        alternatives: [],\n        needsDownload: false,\n      };\n    }\n\n    const top = ranked[0];\n    const alternatives = ranked.slice(1, 4).map((c) => ({\n      model: c.model,\n      provider: c.provider,\n      reason: c.reason,\n    }));\n\n    const confidence = this.computeConfidence(top, ranked);\n\n    return {\n      model: top.model,\n      provider: top.provider,\n      reason: top.reason,\n      confidence,\n      alternatives,\n      needsDownload: top.needsDownload,\n      estimatedDownloadGB: top.estimatedDownloadGB,\n    };\n  }\n\n  rankAll(request: SelectionRequest): RankedCandidate[] {\n    const candidates: RankedCandidate[] = [];\n    const installed = this.profile.installedModels ?? [];\n    const installedTags = new Set(installed.map((m) => m.tag));\n    const effectiveVram = this.resolveEffectiveVram();\n    const availableRam = this.profile.availableRamGB ?? 0;\n\n    for (const entry of MODEL_CATALOG) {\n      for (const tag of entry.ollamaTags) {\n        const isInstalled = installedTags.has(tag);\n        const fitsInVram =\n          entry.minVramGB <= effectiveVram || effectiveVram === 0;\n        const fitsInRam = entry.minRamGB <= availableRam;\n\n        if (!fitsInVram && !fitsInRam) continue;\n\n        const taskScore = this.scoreForTask(entry.benchmarks ?? {}, request.task);\n        const adjustments = this.computeAdjustments(\n          entry,\n          isInstalled,\n          effectiveVram,\n          request\n        );\n        const totalScore = taskScore + adjustments;\n\n        const provider = this.resolveProvider(tag, isInstalled);\n        if (provider === null) continue;\n\n        candidates.push({\n          model: tag,\n          provider,\n          score: totalScore,\n          reason: this.buildReason(entry, request.task, isInstalled, fitsInVram),\n          needsDownload: !isInstalled,\n          estimatedDownloadGB: isInstalled\n            ? undefined\n            : entry.quantizations.length > 0\n            ? entry.quantizations[0].sizeGB\n            : undefined,\n          installed: isInstalled,\n          fitsInVram,\n          fitsInRam,\n          isMoe: entry.architecture === \"moe\",\n          supportsToolUse: entry.supportsToolUse ?? false,\n        });\n      }\n    }\n\n    for (const cloud of CLOUD_MODELS) {\n      if (!cloud.task.includes(request.task)) continue;\n\n      const apiKey = CLOUD_PROVIDER_CONFIG[cloud.provider]?.();\n      if (!apiKey) continue;\n\n      const taskScore = this.scoreForTask(cloud.benchmarks, request.task);\n      const localPenalty = request.preferLocal ? -0.15 : 0;\n      const cloudAdjustment =\n        cloud.supportsToolUse && request.task === \"agents\" ? 0.1 : 0;\n\n      candidates.push({\n        model: cloud.model,\n        provider: cloud.provider,\n        score: taskScore + localPenalty + cloudAdjustment,\n        reason: `Cloud fallback: ${cloud.model} via ${cloud.provider}`,\n        needsDownload: false,\n        installed: false,\n        fitsInVram: false,\n        fitsInRam: false,\n        isMoe: false,\n        supportsToolUse: cloud.supportsToolUse,\n      });\n    }\n\n    candidates.sort((a, b) => b.score - a.score);\n    return candidates;\n  }\n\n  canRunLocally(ollamaTag: string): boolean {\n    const entry = this.findCatalogEntry(ollamaTag);\n    if (!entry) return false;\n\n    const effectiveVram = this.resolveEffectiveVram();\n    return (\n      entry.minVramGB <= effectiveVram ||\n      entry.minRamGB <= (this.profile.availableRamGB ?? 0)\n    );\n  }\n\n  findInstalled(request: SelectionRequest): InstalledModel | null {\n    const installed = this.profile.installedModels ?? [];\n    const taskMap: Record<string, string[]> = {\n      coding: [\"coding\", \"code\", \"programming\"],\n      reasoning: [\"reasoning\", \"math\", \"logic\"],\n      chat: [\"chat\", \"conversation\", \"general\"],\n      agents: [\"agents\", \"tool-use\", \"agentic\", \"coding\"],\n    };\n\n    const keywords = taskMap[request.task] ?? [];\n\n    for (const model of installed) {\n      const entry = this.findCatalogEntry(model.tag);\n      if (!entry) continue;\n\n      const recommended = entry.recommendedFor.map((r) => r.toLowerCase());\n      const matchesTask = recommended.some((r) =>\n        keywords.some((kw) => r.includes(kw))\n      );\n      if (matchesTask) return model;\n    }\n\n    return null;\n  }\n\n  recommendDownload(\n    request: SelectionRequest\n  ): { model: string; sizeGB: number; reason: string } | null {\n    const installed = this.findInstalled(request);\n    if (installed) {\n      return {\n        model: installed.tag,\n        sizeGB: 0,\n        reason: `Already have ${installed.tag} installed for ${request.task}`,\n      };\n    }\n\n    const effectiveVram = this.resolveEffectiveVram();\n    const availableRam = this.profile.availableRamGB ?? 0;\n\n    let best: CatalogEntry | null = null;\n    let bestScore = -Infinity;\n\n    for (const entry of MODEL_CATALOG) {\n      const fitsGpu = entry.minVramGB <= effectiveVram;\n      const fitsCpu = entry.minRamGB <= availableRam;\n      if (!fitsGpu && !fitsCpu) continue;\n\n      if (\n        !entry.recommendedFor.some((r) =>\n          r.toLowerCase().includes(request.task)\n        )\n      )\n        continue;\n\n      const score = this.scoreForTask(entry.benchmarks ?? {}, request.task);\n\n      const downloadSizeGB =\n        entry.quantizations.length > 0 ? entry.quantizations[0].sizeGB : 0;\n      const sizePenalty = downloadSizeGB * 0.02;\n      const adjusted = score - sizePenalty;\n\n      if (adjusted > bestScore) {\n        bestScore = adjusted;\n        best = entry;\n      }\n    }\n\n    if (!best || !best.ollamaTags.length) return null;\n\n    const tag = best.ollamaTags[0];\n    const downloadSize =\n      best.quantizations.length > 0 ? best.quantizations[0].sizeGB : 0;\n    return {\n      model: tag,\n      sizeGB: downloadSize,\n      reason: `Best ${request.task} model that fits your hardware: ${tag} (${best.family}, ${this.summarizeParams(best)})`,\n    };\n  }\n\n  private resolveEffectiveVram(): number {\n    const gpus = this.profile.gpus;\n    if (!gpus || gpus.length === 0) return 0;\n    return gpus.reduce((sum, gpu) => sum + gpu.vramGB, 0);\n  }\n\n  private resolveProvider(\n    ollamaTag: string,\n    isInstalled: boolean\n  ): string | null {\n    const ollamaProvider = this.profile.providers.find(\n      (p) => p.name === \"ollama\" && p.available\n    );\n    if (isInstalled && ollamaProvider) return \"ollama\";\n\n    const lmProvider = this.profile.providers.find(\n      (p) => p.name === \"lmstudio\" && p.available\n    );\n    if (lmProvider) {\n      const lmModels = this.profile.installedModels.filter(\n        (m) => m.provider === \"lmstudio\" && m.tag === ollamaTag\n      );\n      if (lmModels.length > 0) return \"lmstudio\";\n    }\n\n    if (ollamaProvider) return \"ollama\";\n\n    return null;\n  }\n\n  private scoreForTask(benchmarks: Benchmarks, task: string): number {\n    const b = benchmarks;\n    const lc = b.liveCodeBench ?? 0;\n    const swe = b.sweBench ?? 0;\n    const he = b.humaneval ?? 0;\n    const mmlu = b.mmlu ?? 0;\n    const elo = b.codeforcesElo ?? 0;\n    const tools = b.hasTools ?? 0;\n\n    switch (task) {\n      case \"coding\":\n        return lc * 0.5 + swe * 0.3 + he * 0.2;\n      case \"reasoning\":\n        return mmlu * 0.4 + (elo / 2500) * 100 * 0.3 + swe * 0.3;\n      case \"agents\":\n        return swe * 0.5 + lc * 0.3 + tools * 100 * 0.2;\n      case \"chat\":\n        return (\n          (b.mtBench ?? 0) * 10 * 0.5 +\n          mmlu * 0.3 +\n          he * 0.2\n        );\n      default:\n        return lc * 0.4 + swe * 0.3 + mmlu * 0.3;\n    }\n  }\n\n  private computeAdjustments(\n    entry: CatalogEntry,\n    isInstalled: boolean,\n    effectiveVram: number,\n    request: SelectionRequest\n  ): number {\n    let adj = 0;\n\n    if (isInstalled) {\n      adj += 5.0;\n    } else {\n      adj -= 2.0;\n    }\n\n    if (\n      effectiveVram > 0 &&\n      entry.minVramGB > effectiveVram * 0.8\n    ) {\n      const overflow =\n        (entry.minVramGB - effectiveVram * 0.8) / effectiveVram;\n      adj -= overflow * 10;\n    }\n\n    if (entry.architecture === \"moe\" && effectiveVram > 0 && effectiveVram < 16) {\n      const maxParam = parseParamSize(entry.parameterSizes);\n      const activeParam = parseParamSize([entry.activeParams ?? \"0\"]);\n      if (maxParam > 0) {\n        const activeRatio = activeParam / maxParam;\n        adj += (1 - activeRatio) * 3.0;\n      } else {\n        adj += 0.33 * 3.0;\n      }\n    }\n\n    if (request.task === \"agents\" && entry.supportsToolUse) {\n      adj += 4.0;\n    }\n\n    if (request.task === \"agents\" && !entry.supportsToolUse) {\n      adj -= 8.0;\n    }\n\n    if (request.preferSpeed) {\n      const paramCount = parseParamSize(entry.parameterSizes);\n      if (paramCount <= 7) adj += 2.0;\n      else if (paramCount <= 13) adj += 1.0;\n      else if (paramCount >= 70) adj -= 1.5;\n    }\n\n    return adj;\n  }\n\n  private computeConfidence(\n    top: RankedCandidate,\n    ranked: RankedCandidate[]\n  ): number {\n    let conf = 0.5;\n\n    if (top.installed) conf += 0.15;\n    if (top.supportsToolUse) conf += 0.05;\n    if (top.fitsInVram) conf += 0.1;\n\n    if (ranked.length >= 2) {\n      const gap = top.score - ranked[1].score;\n      conf += Math.min(gap / 20, 0.2);\n    }\n\n    if (!top.installed && !top.needsDownload) {\n      conf += 0.05;\n    }\n\n    return Math.max(0, Math.min(1, conf));\n  }\n\n  private buildReason(\n    entry: CatalogEntry,\n    task: string,\n    isInstalled: boolean,\n    fitsInVram: boolean\n  ): string {\n    const parts: string[] = [];\n\n    parts.push(\n      isInstalled\n        ? `Installed ${entry.family}`\n        : `${entry.family} (${this.summarizeParams(entry)})`\n    );\n\n    const b = entry.benchmarks ?? {};\n    const highlights: string[] = [];\n    if (task === \"coding\" && b.liveCodeBench) {\n      highlights.push(`LiveCodeBench ${b.liveCodeBench}`);\n    }\n    if (task === \"reasoning\" && b.mmlu) {\n      highlights.push(`MMLU ${b.mmlu}`);\n    }\n    if ((task === \"coding\" || task === \"agents\") && b.sweBench) {\n      highlights.push(`SWE-bench ${b.sweBench}`);\n    }\n    if (task === \"agents\" && entry.supportsToolUse) {\n      highlights.push(\"tool-use\");\n    }\n    if (entry.architecture === \"moe\") {\n      highlights.push(\"MoE\");\n    }\n\n    if (highlights.length > 0) {\n      parts.push(`[${highlights.join(\", \")}]`);\n    }\n\n    if (!fitsInVram) {\n      parts.push(\"(CPU inference)\");\n    }\n\n    return parts.join(\" \");\n  }\n\n  private summarizeParams(entry: CatalogEntry): string {\n    const sizes = entry.parameterSizes;\n    if (sizes.length === 0) return \"unknown params\";\n    return sizes.join(\"/\");\n  }\n\n  private findCatalogEntry(ollamaTag: string): CatalogEntry | null {\n    for (const entry of MODEL_CATALOG) {\n      if (entry.ollamaTags.includes(ollamaTag)) return entry;\n    }\n    return null;\n  }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\n\nexport interface ProjectProfile {\n  rootDir: string;\n  name: string;\n  languages: LanguageInfo[];\n  frameworks: FrameworkInfo[];\n  packageManager: string | null;\n  totalFiles: number;\n  totalLinesOfCode: number;\n  testFramework: string | null;\n  buildTool: string | null;\n  complexity: \"tiny\" | \"small\" | \"medium\" | \"large\" | \"monorepo\";\n  hasTypeScript: boolean;\n  hasTests: boolean;\n  hasCI: boolean;\n  hasDocker: boolean;\n  modelRequirements: ModelRequirements;\n}\n\nexport interface LanguageInfo {\n  language: string;\n  fileCount: number;\n  percentage: number;\n}\n\nexport interface FrameworkInfo {\n  name: string;\n  category: \"frontend\" | \"backend\" | \"fullstack\" | \"mobile\" | \"data\" | \"infra\";\n}\n\nexport interface ModelRequirements {\n  minContextTokens: number;\n  reasoningNeeded: boolean;\n  toolUseNeeded: boolean;\n  codeHeavy: boolean;\n}\n\nconst EXTENSION_MAP: Record<string, string> = {\n  \".ts\": \"TypeScript\",\n  \".tsx\": \"TypeScript\",\n  \".js\": \"JavaScript\",\n  \".jsx\": \"JavaScript\",\n  \".mjs\": \"JavaScript\",\n  \".cjs\": \"JavaScript\",\n  \".py\": \"Python\",\n  \".pyi\": \"Python\",\n  \".rs\": \"Rust\",\n  \".go\": \"Go\",\n  \".java\": \"Java\",\n  \".kt\": \"Kotlin\",\n  \".kts\": \"Kotlin\",\n  \".cpp\": \"C++\",\n  \".cc\": \"C++\",\n  \".cxx\": \"C++\",\n  \".c\": \"C\",\n  \".h\": \"C/C++\",\n  \".hpp\": \"C++\",\n  \".rb\": \"Ruby\",\n  \".swift\": \"Swift\",\n  \".scala\": \"Scala\",\n  \".php\": \"PHP\",\n  \".cs\": \"C#\",\n  \".fs\": \"F#\",\n  \".dart\": \"Dart\",\n  \".lua\": \"Lua\",\n  \".r\": \"R\",\n  \".R\": \"R\",\n  \".sql\": \"SQL\",\n  \".sh\": \"Shell\",\n  \".bash\": \"Shell\",\n  \".zsh\": \"Shell\",\n  \".ps1\": \"PowerShell\",\n  \".html\": \"HTML\",\n  \".css\": \"CSS\",\n  \".scss\": \"SCSS\",\n  \".sass\": \"Sass\",\n  \".less\": \"Less\",\n  \".vue\": \"Vue\",\n  \".svelte\": \"Svelte\",\n  \".xml\": \"XML\",\n  \".json\": \"JSON\",\n  \".yaml\": \"YAML\",\n  \".yml\": \"YAML\",\n  \".toml\": \"TOML\",\n  \".md\": \"Markdown\",\n  \".ex\": \"Elixir\",\n  \".exs\": \"Elixir\",\n  \".erl\": \"Erlang\",\n  \".hs\": \"Haskell\",\n  \".ml\": \"OCaml\",\n  \".zig\": \"Zig\",\n  \".nim\": \"Nim\",\n  \".proto\": \"Protocol Buffers\",\n  \".graphql\": \"GraphQL\",\n  \".gql\": \"GraphQL\",\n};\n\nconst SKIP_DIRS = new Set([\n  \"node_modules\",\n  \".git\",\n  \"dist\",\n  \"build\",\n  \"target\",\n  \"__pycache__\",\n  \".next\",\n  \".venv\",\n  \"venv\",\n  \".env\",\n  \".tox\",\n  \".mypy_cache\",\n  \".pytest_cache\",\n  \"coverage\",\n  \".nuxt\",\n  \".output\",\n  \".svelte-kit\",\n  \"vendor\",\n  \"Pods\",\n  \".gradle\",\n  \".idea\",\n  \".vscode\",\n  \"bin\",\n  \"obj\",\n  \".dart_tool\",\n  \".flutter-plugins\",\n]);\n\nconst CODE_EXTENSIONS = new Set([\n  \".ts\", \".tsx\", \".js\", \".jsx\", \".mjs\", \".cjs\",\n  \".py\", \".pyi\",\n  \".rs\",\n  \".go\",\n  \".java\", \".kt\", \".kts\",\n  \".cpp\", \".cc\", \".cxx\", \".c\", \".h\", \".hpp\",\n  \".rb\",\n  \".swift\",\n  \".scala\",\n  \".php\",\n  \".cs\", \".fs\",\n  \".dart\",\n  \".lua\",\n  \".r\", \".R\",\n  \".sh\", \".bash\", \".zsh\", \".ps1\",\n  \".vue\", \".svelte\",\n  \".ex\", \".exs\", \".erl\",\n  \".hs\", \".ml\",\n  \".zig\", \".nim\",\n  \".sql\",\n  \".graphql\", \".gql\",\n  \".proto\",\n  \".scss\", \".sass\", \".less\",\n  \".html\", \".css\",\n]);\n\nconst COMPILED_LANGUAGES = new Set([\"Rust\", \"Go\", \"Java\", \"Kotlin\", \"C++\", \"C\", \"C/C++\", \"Swift\", \"Scala\", \"C#\"]);\n\nconst COMPLEXITY_THRESHOLDS = {\n  tiny: 50,\n  small: 200,\n  medium: 1000,\n  large: 5000,\n} as const;\n\nconst CONTEXT_TOKEN_MAP: Record<string, number> = {\n  tiny: 8192,\n  small: 16384,\n  medium: 32768,\n  large: 65536,\n  monorepo: 131072,\n};\n\nexport class ProjectAnalyzer {\n  analyze(rootDir: string): ProjectProfile {\n    const absoluteRoot = path.resolve(rootDir);\n    const name = path.basename(absoluteRoot);\n\n    const allFiles = this.collectFiles(absoluteRoot);\n    const totalFiles = allFiles.length;\n\n    const languageCounts = this.detectLanguages(allFiles);\n    const languages = this.computeLanguagePercentages(languageCounts, totalFiles);\n\n    const rootFileNames = this.listRootFiles(absoluteRoot);\n    const rootFileContent = this.readRootConfigs(absoluteRoot, rootFileNames);\n\n    const packageManager = this.detectPackageManager(rootFileNames, rootFileContent);\n    const frameworks = this.detectFrameworks(absoluteRoot, rootFileNames, rootFileContent);\n    const testFramework = this.detectTestFramework(absoluteRoot, rootFileNames, rootFileContent);\n    const buildTool = this.detectBuildTool(rootFileNames);\n    const hasCI = this.detectCI(absoluteRoot, rootFileNames);\n    const hasDocker = this.detectDocker(rootFileNames);\n    const hasTests = this.detectHasTests(absoluteRoot, allFiles);\n\n    const hasTypeScript = languageCounts[\"TypeScript\"] !== undefined && languageCounts[\"TypeScript\"] > 0;\n\n    const totalLinesOfCode = this.estimateLinesOfCode(allFiles);\n    const complexity = this.computeComplexity(totalFiles);\n    const modelRequirements = this.computeModelRequirements(\n      complexity,\n      languages,\n      allFiles,\n    );\n\n    return {\n      rootDir: absoluteRoot,\n      name,\n      languages,\n      frameworks,\n      packageManager,\n      totalFiles,\n      totalLinesOfCode,\n      testFramework,\n      buildTool,\n      complexity,\n      hasTypeScript,\n      hasTests,\n      hasCI,\n      hasDocker,\n      modelRequirements,\n    };\n  }\n\n  private collectFiles(rootDir: string): string[] {\n    const files: string[] = [];\n    try {\n      const entries = fs.readdirSync(rootDir, {\n        recursive: true,\n        withFileTypes: false,\n      }) as string[];\n\n      for (const entry of entries) {\n        const fullPath = path.join(rootDir, entry);\n        const relativeParts = entry.split(path.sep);\n        const shouldSkip = relativeParts.some((part) => SKIP_DIRS.has(part));\n        if (shouldSkip) continue;\n\n        try {\n          const stat = fs.statSync(fullPath);\n          if (stat.isFile()) {\n            files.push(fullPath);\n          }\n        } catch {\n          continue;\n        }\n      }\n    } catch {\n      return [];\n    }\n    return files;\n  }\n\n  private listRootFiles(rootDir: string): Set<string> {\n    try {\n      const entries = fs.readdirSync(rootDir, { withFileTypes: true });\n      return new Set(\n        entries.filter((e) => e.isFile() || e.isDirectory()).map((e) => e.name),\n      );\n    } catch {\n      return new Set();\n    }\n  }\n\n  private readRootConfigs(\n    rootDir: string,\n    rootFileNames: Set<string>,\n  ): Map<string, string> {\n    const content = new Map<string, string>();\n\n    const configsToRead = [\n      \"package.json\",\n      \"Cargo.toml\",\n      \"go.mod\",\n      \"requirements.txt\",\n      \"Pipfile\",\n      \"pyproject.toml\",\n      \"Gemfile\",\n    ];\n\n    for (const config of configsToRead) {\n      if (rootFileNames.has(config)) {\n        try {\n          const filePath = path.join(rootDir, config);\n          const data = fs.readFileSync(filePath, \"utf-8\");\n          content.set(config, data);\n        } catch {\n          continue;\n        }\n      }\n    }\n\n    return content;\n  }\n\n  private detectLanguages(\n    files: string[],\n  ): Record<string, number> {\n    const counts: Record<string, number> = {};\n\n    for (const file of files) {\n      const ext = path.extname(file).toLowerCase();\n      const language = EXTENSION_MAP[ext];\n      if (language) {\n        counts[language] = (counts[language] || 0) + 1;\n      }\n    }\n\n    return counts;\n  }\n\n  private computeLanguagePercentages(\n    counts: Record<string, number>,\n    totalFiles: number,\n  ): LanguageInfo[] {\n    if (totalFiles === 0) return [];\n\n    const entries = Object.entries(counts).sort((a, b) => b[1] - a[1]);\n\n    return entries.map(([language, fileCount]) => ({\n      language,\n      fileCount,\n      percentage: Math.round((fileCount / totalFiles) * 10000) / 100,\n    }));\n  }\n\n  private detectPackageManager(\n    rootFileNames: Set<string>,\n    rootFileContent: Map<string, string>,\n  ): string | null {\n    if (rootFileNames.has(\"pnpm-lock.yaml\")) return \"pnpm\";\n    if (rootFileNames.has(\"yarn.lock\")) return \"yarn\";\n    if (rootFileNames.has(\"package-lock.json\")) return \"npm\";\n    if (rootFileNames.has(\"bun.lockb\") || rootFileNames.has(\"bun.lock\")) return \"bun\";\n\n    if (rootFileNames.has(\"package.json\") && !rootFileNames.has(\"package-lock.json\") && !rootFileNames.has(\"yarn.lock\") && !rootFileNames.has(\"pnpm-lock.yaml\")) {\n      return \"npm\";\n    }\n\n    if (rootFileNames.has(\"Cargo.toml\")) return \"cargo\";\n    if (rootFileNames.has(\"go.mod\")) return \"go\";\n    if (rootFileNames.has(\"requirements.txt\") || rootFileNames.has(\"Pipfile\") || rootFileNames.has(\"pyproject.toml\")) {\n      if (rootFileNames.has(\"Pipfile\")) return \"pipenv\";\n      if (rootFileNames.has(\"uv.lock\")) return \"uv\";\n      if (rootFileContent.has(\"pyproject.toml\")) {\n        const content = rootFileContent.get(\"pyproject.toml\")!;\n        if (content.includes(\"poetry\")) return \"poetry\";\n        if (content.includes(\"pdm\")) return \"pdm\";\n      }\n      return \"pip\";\n    }\n    if (rootFileNames.has(\"Gemfile\")) return \"bundler\";\n    if (rootFileNames.has(\"pubspec.yaml\")) return \"pub\";\n    if (rootFileNames.has(\"mix.exs\")) return \"mix\";\n    if (rootFileNames.has(\"composer.json\")) return \"composer\";\n\n    return null;\n  }\n\n  private detectFrameworks(\n    rootDir: string,\n    rootFileNames: Set<string>,\n    rootFileContent: Map<string, string>,\n  ): FrameworkInfo[] {\n    const frameworks: FrameworkInfo[] = [];\n    const seen = new Set<string>();\n\n    const addFramework = (name: string, category: FrameworkInfo[\"category\"]) => {\n      if (!seen.has(name)) {\n        seen.add(name);\n        frameworks.push({ name, category });\n      }\n    };\n\n    if (this.matchesGlob(rootFileNames, \"next.config.\")) {\n      addFramework(\"Next.js\", \"fullstack\");\n    }\n\n    if (this.matchesGlob(rootFileNames, \"nuxt.config.\")) {\n      addFramework(\"Nuxt\", \"fullstack\");\n    }\n\n    if (rootFileNames.has(\"angular.json\")) {\n      addFramework(\"Angular\", \"frontend\");\n    }\n\n    if (this.matchesGlob(rootFileNames, \"vite.config.\")) {\n      if (!seen.has(\"Next.js\")) {\n        addFramework(\"Vite\", \"frontend\");\n      }\n    }\n\n    if (rootFileNames.has(\"svelte.config.js\") || rootFileNames.has(\"svelte.config.ts\")) {\n      addFramework(\"SvelteKit\", \"fullstack\");\n    }\n\n    const pkgJson = rootFileContent.get(\"package.json\");\n    if (pkgJson) {\n      try {\n        const pkg = JSON.parse(pkgJson);\n        const allDeps = {\n          ...(pkg.dependencies || {}),\n          ...(pkg.devDependencies || {}),\n        };\n\n        if (allDeps[\"react\"] || allDeps[\"react-dom\"]) addFramework(\"React\", \"frontend\");\n        if (allDeps[\"vue\"] || allDeps[\"vue2\"]) addFramework(\"Vue\", \"frontend\");\n        if (allDeps[\"svelte\"]) addFramework(\"Svelte\", \"frontend\");\n        if (allDeps[\"@angular/core\"]) addFramework(\"Angular\", \"frontend\");\n        if (allDeps[\"express\"]) addFramework(\"Express\", \"backend\");\n        if (allDeps[\"fastify\"]) addFramework(\"Fastify\", \"backend\");\n        if (allDeps[\"koa\"]) addFramework(\"Koa\", \"backend\");\n        if (allDeps[\"nestjs\"] || allDeps[\"@nestjs/core\"]) addFramework(\"NestJS\", \"backend\");\n        if (allDeps[\"hono\"]) addFramework(\"Hono\", \"backend\");\n        if (allDeps[\"@hono/node-server\"]) addFramework(\"Hono\", \"backend\");\n        if (allDeps[\"hapi\"] || allDeps[\"@hapi/hapi\"]) addFramework(\"Hapi\", \"backend\");\n        if (allDeps[\"electron\"]) addFramework(\"Electron\", \"frontend\");\n        if (allDeps[\"react-native\"] || allDeps[\"expo\"]) addFramework(\"React Native\", \"mobile\");\n        if (allDeps[\"@react-native\"]) addFramework(\"React Native\", \"mobile\");\n        if (allDeps[\"tailwindcss\"]) addFramework(\"Tailwind CSS\", \"frontend\");\n        if (allDeps[\"@trpc/server\"] || allDeps[\"@trpc/client\"]) addFramework(\"tRPC\", \"fullstack\");\n        if (allDeps[\"prisma\"] || allDeps[\"@prisma/client\"]) addFramework(\"Prisma\", \"infra\");\n        if (allDeps[\"drizzle-orm\"]) addFramework(\"Drizzle\", \"infra\");\n        if (allDeps[\"@tanstack/react-query\"]) addFramework(\"TanStack Query\", \"frontend\");\n        if (allDeps[\"redux\"] || allDeps[\"@reduxjs/toolkit\"]) addFramework(\"Redux\", \"frontend\");\n        if (allDeps[\"zustand\"]) addFramework(\"Zustand\", \"frontend\");\n        if (allDeps[\"three\"] || allDeps[\"three.js\"]) addFramework(\"Three.js\", \"frontend\");\n        if (allDeps[\"d3\"] || allDeps[\"d3.js\"]) addFramework(\"D3\", \"data\");\n        if (allDeps[\"@remix-run/react\"] || allDeps[\"remix\"]) addFramework(\"Remix\", \"fullstack\");\n        if (allDeps[\"@astrojs/react\"] || allDeps[\"astro\"]) addFramework(\"Astro\", \"frontend\");\n        if (allDeps[\"gatsby\"]) addFramework(\"Gatsby\", \"frontend\");\n        if (allDeps[\"@storybook/react\"] || allDeps[\"storybook\"]) addFramework(\"Storybook\", \"frontend\");\n        if (allDeps[\"jest\"] || allDeps[\"vitest\"]) { /* handled in test detection */ }\n        if (allDeps[\"express\"] && allDeps[\"react\"]) {\n          // Already added individually\n        }\n      } catch {\n        // Invalid JSON\n      }\n    }\n\n    const cargoToml = rootFileContent.get(\"Cargo.toml\");\n    if (cargoToml) {\n      if (cargoToml.includes(\"actix-web\")) addFramework(\"Actix Web\", \"backend\");\n      if (cargoToml.includes(\"axum\")) addFramework(\"Axum\", \"backend\");\n      if (cargoToml.includes(\"rocket\")) addFramework(\"Rocket\", \"backend\");\n      if (cargoToml.includes(\"warp\")) addFramework(\"Warp\", \"backend\");\n      if (cargoToml.includes(\"tokio\")) addFramework(\"Tokio\", \"backend\");\n      if (cargoToml.includes(\"bevy\")) addFramework(\"Bevy\", \"data\");\n      if (cargoToml.includes(\"leptos\")) addFramework(\"Leptos\", \"fullstack\");\n      if (cargoToml.includes(\"yew\")) addFramework(\"Yew\", \"frontend\");\n      if (cargoToml.includes(\"iced\")) addFramework(\"Iced\", \"frontend\");\n      if (cargoToml.includes(\"diesel\")) addFramework(\"Diesel\", \"infra\");\n      if (cargoToml.includes(\"sqlx\")) addFramework(\"SQLx\", \"infra\");\n      if (cargoToml.includes(\"sea-orm\")) addFramework(\"SeaORM\", \"infra\");\n    }\n\n    const goMod = rootFileContent.get(\"go.mod\");\n    if (goMod) {\n      if (goMod.includes(\"gin-gonic/gin\")) addFramework(\"Gin\", \"backend\");\n      if (goMod.includes(\"labstack/echo\") || goMod.includes(\"echo\")) addFramework(\"Echo\", \"backend\");\n      if (goMod.includes(\"fiber\")) addFramework(\"Fiber\", \"backend\");\n      if (goMod.includes(\"gorilla/mux\")) addFramework(\"Gorilla Mux\", \"backend\");\n      if (goMod.includes(\"chi\")) addFramework(\"Chi\", \"backend\");\n      if (goMod.includes(\"go-kratos\")) addFramework(\"Kratos\", \"backend\");\n      if (goMod.includes(\"gorm.io\")) addFramework(\"GORM\", \"infra\");\n    }\n\n    const requirementsTxt = rootFileContent.get(\"requirements.txt\");\n    const pyprojectToml = rootFileContent.get(\"pyproject.toml\");\n\n    const pythonDeps: string[] = [];\n    if (requirementsTxt) {\n      pythonDeps.push(...requirementsTxt.split(\"\\n\"));\n    }\n    if (pyprojectToml) {\n      pythonDeps.push(...pyprojectToml.split(\"\\n\"));\n    }\n    const pythonDepsStr = pythonDeps.join(\"\\n\").toLowerCase();\n\n    if (pythonDepsStr.includes(\"django\")) addFramework(\"Django\", \"backend\");\n    if (pythonDepsStr.includes(\"flask\")) addFramework(\"Flask\", \"backend\");\n    if (pythonDepsStr.includes(\"fastapi\")) addFramework(\"FastAPI\", \"backend\");\n    if (pythonDepsStr.includes(\"starlette\")) addFramework(\"Starlette\", \"backend\");\n    if (pythonDepsStr.includes(\"pyramid\")) addFramework(\"Pyramid\", \"backend\");\n    if (pythonDepsStr.includes(\"sanic\")) addFramework(\"Sanic\", \"backend\");\n    if (pythonDepsStr.includes(\"celery\")) addFramework(\"Celery\", \"backend\");\n    if (pythonDepsStr.includes(\"scrapy\")) addFramework(\"Scrapy\", \"data\");\n    if (pythonDepsStr.includes(\"pandas\")) addFramework(\"Pandas\", \"data\");\n    if (pythonDepsStr.includes(\"numpy\")) addFramework(\"NumPy\", \"data\");\n    if (pythonDepsStr.includes(\"tensorflow\")) addFramework(\"TensorFlow\", \"data\");\n    if (pythonDepsStr.includes(\"torch\") || pythonDepsStr.includes(\"pytorch\")) addFramework(\"PyTorch\", \"data\");\n    if (pythonDepsStr.includes(\"scikit-learn\") || pythonDepsStr.includes(\"sklearn\")) addFramework(\"scikit-learn\", \"data\");\n    if (pythonDepsStr.includes(\"sqlalchemy\")) addFramework(\"SQLAlchemy\", \"infra\");\n    if (pythonDepsStr.includes(\"flask-restful\") || pythonDepsStr.includes(\"flask-restx\")) addFramework(\"Flask-RESTful\", \"backend\");\n    if (pythonDepsStr.includes(\" Strawberry\")) addFramework(\"Strawberry\", \"backend\");\n\n    const gemfile = rootFileContent.get(\"Gemfile\");\n    if (gemfile) {\n      if (gemfile.includes(\"rails\")) addFramework(\"Ruby on Rails\", \"fullstack\");\n      if (gemfile.includes(\"sinatra\")) addFramework(\"Sinatra\", \"backend\");\n      if (gemfile.includes(\"hanami\")) addFramework(\"Hanami\", \"fullstack\");\n      if (gemfile.includes(\"grape\")) addFramework(\"Grape\", \"backend\");\n      if (gemfile.includes(\"sidekiq\")) addFramework(\"Sidekiq\", \"backend\");\n      if (gemfile.includes(\"rspec\")) { /* test framework */ }\n      if (gemfile.includes(\"activerecord\")) addFramework(\"ActiveRecord\", \"infra\");\n    }\n\n    if (rootFileNames.has(\"pubspec.yaml\")) {\n      addFramework(\"Flutter\", \"mobile\");\n    }\n\n    if (rootFileNames.has(\"mix.exs\")) {\n      addFramework(\"Phoenix\", \"fullstack\");\n    }\n\n    if (rootFileNames.has(\"build.gradle\") || rootFileNames.has(\"build.gradle.kts\") || rootFileNames.has(\"pom.xml\")) {\n      if (rootFileNames.has(\"pom.xml\")) addFramework(\"Maven\", \"infra\");\n      else addFramework(\"Gradle\", \"infra\");\n\n      const springSource = rootFileNames.has(\"pom.xml\")\n        ? this.tryRead(path.join(rootDir, \"pom.xml\"))\n        : this.tryRead(path.join(rootDir, \"build.gradle\")) || this.tryRead(path.join(rootDir, \"build.gradle.kts\"));\n      if (springSource && springSource.includes(\"spring\")) {\n        addFramework(\"Spring\", \"backend\");\n      }\n    }\n\n    if (rootFileNames.has(\"docker-compose.yml\") || rootFileNames.has(\"docker-compose.yaml\")) {\n      addFramework(\"Docker Compose\", \"infra\");\n    }\n\n    if (rootFileNames.has(\"terraform\") || this.hasDir(rootDir, \"terraform\")) {\n      addFramework(\"Terraform\", \"infra\");\n    }\n\n    if (rootFileNames.has(\"serverless.yml\") || rootFileNames.has(\"serverless.yaml\")) {\n      addFramework(\"Serverless\", \"infra\");\n    }\n\n    if (rootFileNames.has(\"sam.yaml\") || rootFileNames.has(\"template.yaml\")) {\n      addFramework(\"AWS SAM\", \"infra\");\n    }\n\n    return frameworks;\n  }\n\n  private detectTestFramework(\n    rootDir: string,\n    rootFileNames: Set<string>,\n    rootFileContent: Map<string, string>,\n  ): string | null {\n    if (this.matchesGlob(rootFileNames, \"vitest.config.\")) return \"Vitest\";\n    if (this.matchesGlob(rootFileNames, \"jest.config.\")) return \"Jest\";\n\n    const pkgJson = rootFileContent.get(\"package.json\");\n    if (pkgJson) {\n      try {\n        const pkg = JSON.parse(pkgJson);\n        const allDeps = {\n          ...(pkg.dependencies || {}),\n          ...(pkg.devDependencies || {}),\n        };\n        if (allDeps[\"vitest\"]) return \"Vitest\";\n        if (allDeps[\"jest\"]) return \"Jest\";\n        if (allDeps[\"mocha\"]) return \"Mocha\";\n        if (allDeps[\"ava\"]) return \"AVA\";\n        if (allDeps[\"cypress\"]) return \"Cypress\";\n        if (allDeps[\"@playwright/test\"]) return \"Playwright\";\n        if (allDeps[\"@testing-library/react\"]) return \"Testing Library\";\n        if (allDeps[\"tap\"]) return \"tap\";\n        if (allDeps[\"uvu\"]) return \"UVU\";\n        if (allDeps[\"buster\"]) return \"Buster\";\n      } catch {\n        // Invalid JSON\n      }\n    }\n\n    if (rootFileNames.has(\"pytest.ini\") || rootFileNames.has(\"conftest.py\")) return \"pytest\";\n    const pyproject = rootFileContent.get(\"pyproject.toml\");\n    if (pyproject && (pyproject.includes(\"pytest\") || pyproject.includes(\"[tool.pytest\"))) return \"pytest\";\n\n    const cargoToml = rootFileContent.get(\"Cargo.toml\");\n    if (cargoToml && cargoToml.includes(\"[dev-dependencies]\")) return \"cargo test\";\n\n    if (rootFileNames.has(\"go.mod\")) {\n      const goTestDir = path.join(rootDir, \"..._test.go\");\n      try {\n        const testFiles = fs.readdirSync(rootDir, { recursive: true }) as string[];\n        if (testFiles.some((f) => typeof f === \"string\" && f.endsWith(\"_test.go\"))) {\n          return \"go test\";\n        }\n      } catch {\n        // ignore\n      }\n    }\n\n    const gemfile = rootFileContent.get(\"Gemfile\");\n    if (gemfile && gemfile.includes(\"rspec\")) return \"RSpec\";\n\n    if (rootFileNames.has(\"Makefile\")) {\n      const makefile = this.tryRead(path.join(rootDir, \"Makefile\"));\n      if (makefile && makefile.includes(\"test\")) return \"make test\";\n    }\n\n    return null;\n  }\n\n  private detectBuildTool(rootFileNames: Set<string>): string | null {\n    if (rootFileNames.has(\"tsconfig.json\")) return \"tsc\";\n    if (this.matchesGlob(rootFileNames, \"webpack.config.\")) return \"webpack\";\n    if (this.matchesGlob(rootFileNames, \"vite.config.\")) return \"vite\";\n    if (this.matchesGlob(rootFileNames, \"rollup.config.\")) return \"rollup\";\n    if (this.matchesGlob(rootFileNames, \"esbuild.\") || rootFileNames.has(\"esbuild.js\") || rootFileNames.has(\"esbuild.ts\") || rootFileNames.has(\"esbuild.mjs\")) return \"esbuild\";\n    if (rootFileNames.has(\"turbo.json\")) return \"Turborepo\";\n    if (this.matchesGlob(rootFileNames, \"parcelrc\") || this.matchesGlob(rootFileNames, \".parcelrc\")) return \"Parcel\";\n    if (rootFileNames.has(\"Gruntfile.js\") || rootFileNames.has(\"Gruntfile.ts\")) return \"Grunt\";\n    if (rootFileNames.has(\"Gulpfile.js\") || rootFileNames.has(\"Gulpfile.ts\") || rootFileNames.has(\"Gulpfile.mjs\")) return \"Gulp\";\n    if (rootFileNames.has(\"Makefile\")) return \"make\";\n    if (rootFileNames.has(\"CMakeLists.txt\")) return \"CMake\";\n    if (rootFileNames.has(\"Cargo.toml\")) return \"cargo\";\n    if (rootFileNames.has(\"build.gradle\") || rootFileNames.has(\"build.gradle.kts\")) return \"Gradle\";\n    if (rootFileNames.has(\"pom.xml\")) return \"Maven\";\n    if (rootFileNames.has(\"build.sbt\")) return \"sbt\";\n    if (rootFileNames.has(\"justfile\") || rootFileNames.has(\"Justfile\")) return \"just\";\n    if (rootFileNames.has(\"Taskfile.yml\") || rootFileNames.has(\"Taskfile.yaml\")) return \"Task\";\n    if (rootFileNames.has(\"bazel\") || rootFileNames.has(\"WORKSPACE\") || rootFileNames.has(\"WORKSPACE.bazel\")) return \"Bazel\";\n    if (rootFileNames.has(\"BUCK\") || rootFileNames.has(\".buckconfig\")) return \"Buck\";\n    if (rootFileNames.has(\"meson.build\")) return \"Meson\";\n    if (rootFileNames.has(\"build.zig\")) return \"Zig Build\";\n\n    return null;\n  }\n\n  private detectCI(rootDir: string, rootFileNames: Set<string>): boolean {\n    if (rootFileNames.has(\".github\")) {\n      const workflowsDir = path.join(rootDir, \".github\", \"workflows\");\n      try {\n        const stat = fs.statSync(workflowsDir);\n        if (stat.isDirectory()) {\n          const files = fs.readdirSync(workflowsDir);\n          if (files.length > 0) return true;\n        }\n      } catch {\n        // .github exists but no workflows\n      }\n    }\n\n    // Re-check by trying to read .github/workflows directly\n    try {\n      const workflowsDir = path.join(rootDir, \".github\", \"workflows\");\n      const files = fs.readdirSync(workflowsDir);\n      if (files.length > 0) return true;\n    } catch {\n      // doesn't exist\n    }\n\n    if (rootFileNames.has(\".gitlab-ci.yml\")) return true;\n    if (rootFileNames.has(\"Jenkinsfile\")) return true;\n    if (rootFileNames.has(\".circleci\") || rootFileNames.has(\".circleci\")) {\n      try {\n        const configPath = path.join(rootDir, \".circleci\", \"config.yml\");\n        if (fs.existsSync(configPath)) return true;\n      } catch {\n        // ignore\n      }\n    }\n    if (rootFileNames.has(\".travis.yml\")) return true;\n    if (rootFileNames.has(\"azure-pipelines.yml\") || rootFileNames.has(\"azure-pipelines.yaml\")) return true;\n    if (rootFileNames.has(\"bitbucket-pipelines.yml\")) return true;\n    if (rootFileNames.has(\"cloudbuild.yaml\") || rootFileNames.has(\"cloudbuild.yml\")) return true;\n    if (rootFileNames.has(\"buildkite.yml\") || rootFileNames.has(\"buildkite.yaml\")) return true;\n\n    return false;\n  }\n\n  private detectDocker(rootFileNames: Set<string>): boolean {\n    if (rootFileNames.has(\"Dockerfile\")) return true;\n    if (this.matchesGlob(rootFileNames, \"docker-compose.\")) return true;\n    if (rootFileNames.has(\"Dockerfile.dev\") || rootFileNames.has(\"Dockerfile.prod\")) return true;\n    if (rootFileNames.has(\".dockerignore\")) return true;\n\n    return false;\n  }\n\n  private detectHasTests(rootDir: string, allFiles: string[]): boolean {\n    for (const file of allFiles) {\n      const base = path.basename(file);\n      if (\n        base.includes(\".test.\") ||\n        base.includes(\".spec.\") ||\n        base.includes(\"_test.\") ||\n        base.includes(\"_spec.\") ||\n        base.includes(\"Test.\") ||\n        base.startsWith(\"test_\") ||\n        base.startsWith(\"tests/\")\n      ) {\n        return true;\n      }\n    }\n\n    const testDirs = [\"test\", \"tests\", \"__tests__\", \"spec\", \"specs\", \"testing\"];\n    try {\n      const rootEntries = fs.readdirSync(rootDir, { withFileTypes: true });\n      for (const entry of rootEntries) {\n        if (entry.isDirectory() && testDirs.includes(entry.name)) {\n          return true;\n        }\n      }\n    } catch {\n      // ignore\n    }\n\n    return false;\n  }\n\n  private estimateLinesOfCode(files: string[]): number {\n    if (files.length === 0) return 0;\n\n    const codeFiles = files.filter((f) => {\n      const ext = path.extname(f).toLowerCase();\n      return CODE_EXTENSIONS.has(ext);\n    });\n\n    if (codeFiles.length === 0) return 0;\n\n    const sortedBySize = codeFiles\n      .map((f) => {\n        try {\n          return { file: f, size: fs.statSync(f).size };\n        } catch {\n          return { file: f, size: 0 };\n        }\n      })\n      .filter((entry) => entry.size > 0)\n      .sort((a, b) => b.size - a.size);\n\n    const sampleSize = Math.min(sortedBySize.length, 100);\n    const sampleFiles = sortedBySize.slice(0, sampleSize);\n\n    let sampledLines = 0;\n    let sampledBytes = 0;\n\n    for (const entry of sampleFiles) {\n      try {\n        const content = fs.readFileSync(entry.file, \"utf-8\");\n        const lines = content.split(\"\\n\").length;\n        sampledLines += lines;\n        sampledBytes += entry.size;\n      } catch {\n        continue;\n      }\n    }\n\n    if (sampledBytes === 0) return 0;\n\n    const avgLinesPerByte = sampledLines / sampledBytes;\n\n    let totalBytes = 0;\n    for (const entry of sortedBySize) {\n      totalBytes += entry.size;\n    }\n\n    return Math.round(avgLinesPerByte * totalBytes);\n  }\n\n  private computeComplexity(totalFiles: number): ProjectProfile[\"complexity\"] {\n    if (totalFiles < COMPLEXITY_THRESHOLDS.tiny) return \"tiny\";\n    if (totalFiles < COMPLEXITY_THRESHOLDS.small) return \"small\";\n    if (totalFiles < COMPLEXITY_THRESHOLDS.medium) return \"medium\";\n    if (totalFiles < COMPLEXITY_THRESHOLDS.large) return \"large\";\n    return \"monorepo\";\n  }\n\n  private computeModelRequirements(\n    complexity: ProjectProfile[\"complexity\"],\n    languages: LanguageInfo[],\n    allFiles: string[],\n  ): ModelRequirements {\n    const minContextTokens = CONTEXT_TOKEN_MAP[complexity];\n\n    const hasCompiledLanguage = languages.some(\n      (l) => COMPILED_LANGUAGES.has(l.language),\n    );\n\n    let codeFileCount = 0;\n    for (const file of allFiles) {\n      const ext = path.extname(file).toLowerCase();\n      if (CODE_EXTENSIONS.has(ext)) codeFileCount++;\n    }\n    const codeRatio = allFiles.length > 0 ? codeFileCount / allFiles.length : 0;\n\n    return {\n      minContextTokens,\n      reasoningNeeded: hasCompiledLanguage,\n      toolUseNeeded: true,\n      codeHeavy: codeRatio > 0.6,\n    };\n  }\n\n  private matchesGlob(fileNames: Set<string>, prefix: string): boolean {\n    for (const name of fileNames) {\n      if (name.startsWith(prefix)) return true;\n    }\n    return false;\n  }\n\n  private tryRead(filePath: string): string | null {\n    try {\n      return fs.readFileSync(filePath, \"utf-8\");\n    } catch {\n      return null;\n    }\n  }\n\n  private hasDir(rootDir: string, name: string): boolean {\n    try {\n      const stat = fs.statSync(path.join(rootDir, name));\n      return stat.isDirectory();\n    } catch {\n      return false;\n    }\n  }\n}\n","export const RESET = \"\\x1b[0m\";\nexport const BOLD = \"\\x1b[1m\";\nexport const DIM = \"\\x1b[2m\";\nexport const ITALIC = \"\\x1b[3m\";\nexport const UNDERLINE = \"\\x1b[4m\";\nexport const BLINK = \"\\x1b[5m\";\nexport const REVERSE = \"\\x1b[7m\";\nexport const STRIKETHROUGH = \"\\x1b[9m\";\nexport const HIDDEN = \"\\x1b[8m\";\n\nexport function fg(r: number, g: number, b: number): string {\n  return `\\x1b[38;2;${r};${g};${b}m`;\n}\n\nexport function bg(r: number, g: number, b: number): string {\n  return `\\x1b[48;2;${r};${g};${b}m`;\n}\n\nexport function fg256(n: number): string {\n  return `\\x1b[38;5;${n}m`;\n}\n\nexport function bg256(n: number): string {\n  return `\\x1b[48;5;${n}m`;\n}\n\nexport function fg16(name: string): string {\n  const codes: Record<string, string> = {\n    black: \"\\x1b[30m\", red: \"\\x1b[31m\", green: \"\\x1b[32m\",\n    yellow: \"\\x1b[33m\", blue: \"\\x1b[34m\", magenta: \"\\x1b[35m\",\n    cyan: \"\\x1b[36m\", white: \"\\x1b[37m\",\n    bright_black: \"\\x1b[90m\", bright_red: \"\\x1b[91m\",\n    bright_green: \"\\x1b[92m\", bright_yellow: \"\\x1b[93m\",\n    bright_blue: \"\\x1b[94m\", bright_magenta: \"\\x1b[95m\",\n    bright_cyan: \"\\x1b[96m\", bright_white: \"\\x1b[97m\",\n  };\n  return codes[name] ?? \"\";\n}\n\nexport type ColorLevel = 0 | 1 | 2 | 3;\n\nexport function detectColorLevel(): ColorLevel {\n  const term = process.env.TERM ?? \"\";\n  const colorTerm = process.env.COLORTERM ?? \"\";\n  const noColor = process.env.NO_COLOR ?? process.env.NODE_DISABLE_COLORS;\n  if (noColor && noColor !== \"0\") return 0;\n  if (colorTerm === \"truecolor\" || colorTerm === \"24bit\") return 3;\n  if (term.includes(\"256color\") || term.includes(\"xterm\")) return 2;\n  if (term.includes(\"ansi\") || term.includes(\"color\")) return 1;\n  if (process.platform === \"win32\") return 1;\n  return 1;\n}\n\nexport function rgbTo256(r: number, g: number, b: number): number {\n  if (r === g && g === b) {\n    if (r < 8) return 16;\n    if (r > 248) return 231;\n    return Math.round(((r - 8) / 247) * 24) + 232;\n  }\n  return (\n    16 +\n    36 * Math.round((r / 255) * 5) +\n    6 * Math.round((g / 255) * 5) +\n    Math.round((b / 255) * 5)\n  );\n}\n\nexport interface Style {\n  fg?: [number, number, number];\n  bg?: [number, number, number];\n  bold?: boolean;\n  dim?: boolean;\n  italic?: boolean;\n  underline?: boolean;\n}\n\nexport function applyStyle(s: Style, level: ColorLevel = detectColorLevel()): string {\n  const parts: string[] = [];\n  if (s.bold) parts.push(BOLD);\n  if (s.dim) parts.push(DIM);\n  if (s.italic) parts.push(ITALIC);\n  if (s.underline) parts.push(UNDERLINE);\n  if (s.fg) {\n    if (level >= 3) parts.push(fg(s.fg[0], s.fg[1], s.fg[2]));\n    else if (level >= 2) parts.push(fg256(rgbTo256(s.fg[0], s.fg[1], s.fg[2])));\n    else parts.push(fg16(approximate16(s.fg)));\n  }\n  if (s.bg) {\n    if (level >= 3) parts.push(bg(s.bg[0], s.bg[1], s.bg[2]));\n    else if (level >= 2) parts.push(bg256(rgbTo256(s.bg[0], s.bg[1], s.bg[2])));\n  }\n  return parts.join(\"\");\n}\n\nfunction approximate16(rgb: [number, number, number]): string {\n  const [r, g, b] = rgb;\n  if (r > 200 && g < 80 && b < 80) return \"red\";\n  if (r < 80 && g > 200 && b < 80) return \"green\";\n  if (r < 80 && g < 80 && b > 200) return \"blue\";\n  if (r > 200 && g > 200 && b < 80) return \"yellow\";\n  if (r > 200 && g < 80 && b > 200) return \"magenta\";\n  if (r < 80 && g > 200 && b > 200) return \"cyan\";\n  if (r > 200 && g > 200 && b > 200) return \"white\";\n  if (r > 128 || g > 128 || b > 128) return \"bright_black\";\n  return \"white\";\n}\n\nexport function styled(text: string, s: Style): string {\n  return `${applyStyle(s)}${text}${RESET}`;\n}\n\nexport function moveUp(n: number): string {\n  return n > 0 ? `\\x1b[${n}A` : \"\";\n}\n\nexport function moveDown(n: number): string {\n  return n > 0 ? `\\x1b[${n}B` : \"\";\n}\n\nexport function clearLine(): string {\n  return \"\\x1b[2K\\r\";\n}\n\nexport function terminalWidth(): number {\n  return process.stdout.columns ?? 80;\n}\n\nexport function stripAnsi(str: string): number {\n  let len = 0;\n  let inEscape = false;\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === \"\\x1b\") { inEscape = true; continue; }\n    if (inEscape) {\n      if (str[i] >= \"@\" && str[i] <= \"~\") inEscape = false;\n      continue;\n    }\n    len++;\n  }\n  return len;\n}\n\nexport function padAnsi(str: string, width: number, align: \"left\" | \"center\" | \"right\" = \"left\"): string {\n  const visual = stripAnsi(str);\n  const pad = Math.max(0, width - visual);\n  if (align === \"right\") return \" \".repeat(pad) + str;\n  if (align === \"center\") return \" \".repeat(Math.floor(pad / 2)) + str + \" \".repeat(Math.ceil(pad / 2));\n  return str + \" \".repeat(pad);\n}\n\nexport function wrapText(text: string, width: number): string[] {\n  if (width <= 0) return [text];\n  const words = text.split(\" \");\n  const lines: string[] = [];\n  let current = \"\";\n  for (const word of words) {\n    if (current.length === 0) {\n      current = word;\n    } else if (stripAnsi(current) + 1 + stripAnsi(word) <= width) {\n      current += \" \" + word;\n    } else {\n      lines.push(current);\n      current = word;\n    }\n  }\n  if (current.length > 0) lines.push(current);\n  return lines.length > 0 ? lines : [\"\"];\n}\n\nexport const C = {\n  black: [0, 0, 0] as [number, number, number],\n  white: [255, 255, 255] as [number, number, number],\n  gray: [120, 120, 120] as [number, number, number],\n  darkGray: [60, 60, 60] as [number, number, number],\n  red: [220, 50, 50] as [number, number, number],\n  green: [50, 200, 80] as [number, number, number],\n  blue: [60, 120, 220] as [number, number, number],\n  cyan: [80, 200, 200] as [number, number, number],\n  yellow: [220, 200, 50] as [number, number, number],\n  magenta: [180, 80, 220] as [number, number, number],\n  orange: [240, 150, 40] as [number, number, number],\n  purple: [150, 80, 200] as [number, number, number],\n  teal: [40, 180, 160] as [number, number, number],\n  pink: [240, 100, 150] as [number, number, number],\n  lime: [160, 220, 60] as [number, number, number],\n  indigo: [80, 60, 200] as [number, number, number],\n  amber: [240, 180, 40] as [number, number, number],\n  rose: [220, 60, 100] as [number, number, number],\n  sky: [100, 180, 240] as [number, number, number],\n  mint: [100, 220, 160] as [number, number, number],\n\n  synthBlack: [18, 18, 24] as [number, number, number],\n  synthBg: [26, 26, 36] as [number, number, number],\n  synthFg: [220, 220, 230] as [number, number, number],\n  synthAccent: [100, 180, 255] as [number, number, number],\n  synthGreen: [80, 220, 120] as [number, number, number],\n  synthYellow: [240, 200, 60] as [number, number, number],\n  synthRed: [240, 80, 80] as [number, number, number],\n  synthMuted: [100, 100, 120] as [number, number, number],\n  synthDim: [70, 70, 85] as [number, number, number],\n};\n\nexport function blend(a: [number, number, number], b: [number, number, number], t: number): [number, number, number] {\n  return [\n    Math.round(a[0] + (b[0] - a[0]) * t),\n    Math.round(a[1] + (b[1] - a[1]) * t),\n    Math.round(a[2] + (b[2] - a[2]) * t),\n  ];\n}\n","export const BAR = [\" \", \"\\u2581\", \"\\u2582\", \"\\u2583\", \"\\u2584\", \"\\u2585\", \"\\u2586\", \"\\u2587\", \"\\u2588\"] as const;\nexport const BLOCK = [\" \", \"\\u258F\", \"\\u258E\", \"\\u258D\", \"\\u258C\", \"\\u258B\", \"\\u258A\", \"\\u2589\", \"\\u2588\"] as const;\nexport const SHADE = [\" \", \"\\u2591\", \"\\u2592\", \"\\u2593\", \"\\u2588\"] as const;\n\nexport interface BorderSet {\n  topLeft: string;\n  top: string;\n  topRight: string;\n  midLeft: string;\n  midRight: string;\n  bottomLeft: string;\n  bottom: string;\n  bottomRight: string;\n  headLeft: string;\n  head: string;\n  headRight: string;\n  headCross: string;\n}\n\nexport const ROUNDED: BorderSet = {\n  topLeft: \"\\u256D\", top: \"\\u2500\", topRight: \"\\u256E\",\n  midLeft: \"\\u2502\", midRight: \"\\u2502\",\n  bottomLeft: \"\\u2570\", bottom: \"\\u2500\", bottomRight: \"\\u256F\",\n  headLeft: \"\\u251C\", head: \"\\u2500\", headRight: \"\\u2524\",\n  headCross: \"\\u253C\",\n};\n\nexport const THICK = {\n  topLeft: \"\\u250F\", top: \"\\u2501\", topRight: \"\\u2513\",\n  midLeft: \"\\u2503\", midRight: \"\\u2503\",\n  bottomLeft: \"\\u2517\", bottom: \"\\u2501\", bottomRight: \"\\u251B\",\n  headLeft: \"\\u2523\", head: \"\\u2501\", headRight: \"\\u252B\",\n  headCross: \"\\u254B\",\n};\n\nexport const DOUBLE = {\n  topLeft: \"\\u2554\", top: \"\\u2550\", topRight: \"\\u2557\",\n  midLeft: \"\\u2551\", midRight: \"\\u2551\",\n  bottomLeft: \"\\u255A\", bottom: \"\\u2550\", bottomRight: \"\\u255D\",\n  headLeft: \"\\u2560\", head: \"\\u2550\", headRight: \"\\u2563\",\n  headCross: \"\\u256C\",\n};\n\nexport const PLAIN = {\n  topLeft: \"\\u250C\", top: \"\\u2500\", topRight: \"\\u2510\",\n  midLeft: \"\\u2502\", midRight: \"\\u2502\",\n  bottomLeft: \"\\u2514\", bottom: \"\\u2500\", bottomRight: \"\\u2518\",\n  headLeft: \"\\u251C\", head: \"\\u2500\", headRight: \"\\u2524\",\n  headCross: \"\\u253C\",\n};\n\nexport const ASCII = {\n  topLeft: \"+\", top: \"-\", topRight: \"+\",\n  midLeft: \"|\", midRight: \"|\",\n  bottomLeft: \"+\", bottom: \"-\", bottomRight: \"+\",\n  headLeft: \"+\", head: \"-\", headRight: \"+\",\n  headCross: \"+\",\n};\n\nexport const HEAVY_HEAD = {\n  topLeft: \"\\u250C\", top: \"\\u2500\", topRight: \"\\u2510\",\n  midLeft: \"\\u2502\", midRight: \"\\u2502\",\n  bottomLeft: \"\\u2514\", bottom: \"\\u2500\", bottomRight: \"\\u2518\",\n  headLeft: \"\\u251C\", head: \"\\u2501\", headRight: \"\\u2524\",\n  headCross: \"\\u253F\",\n};\n\nexport const TREE_GUIDES = {\n  space: \"    \",\n  continue: \"\\u2502   \",\n  fork: \"\\u251C\\u2500\\u2500 \",\n  end: \"\\u2514\\u2500\\u2500 \",\n};\n\nexport const THICK_TREE_GUIDES = {\n  space: \"    \",\n  continue: \"\\u2503   \",\n  fork: \"\\u2523\\u2501\\u2501 \",\n  end: \"\\u2517\\u2501\\u2501 \",\n};\n\nexport const HLINE = {\n  thin: \"\\u2500\",\n  thick: \"\\u2501\",\n  double: \"\\u2550\",\n  rounded: \"\\u2500\",\n  dot: \"\\u2504\",\n  dash: \"\\u2506\",\n};\n\nexport const CHECK = \"\\u2713\";\nexport const CROSS = \"\\u2717\";\nexport const BULLET = \"\\u2022\";\nexport const ARROW_R = \"\\u2192\";\nexport const STAR = \"\\u2605\";\nexport const DIAMOND = \"\\u25C6\";\nexport const TRIANGLE_R = \"\\u25B6\";\nexport const HLINE_CHAR = \"\\u2500\";\nexport const VLINE_CHAR = \"\\u2502\";\n","import { type BorderSet, ROUNDED } from \"./symbols.js\";\nimport { styled, RESET, padAnsi, stripAnsi, type Style, terminalWidth } from \"./ansi.js\";\n\nexport function panel(\n  content: string,\n  opts?: {\n    title?: string;\n    subtitle?: string;\n    border?: BorderSet;\n    borderStyle?: Style;\n    width?: number;\n    padding?: number;\n  }\n): string {\n  const b = opts?.border ?? ROUNDED;\n  const pad = opts?.padding ?? 1;\n  const termWidth = opts?.width ?? terminalWidth();\n  const bStyle = opts?.borderStyle;\n\n  const innerWidth = termWidth - 2;\n  const contentWidth = innerWidth - pad * 2;\n\n  const lines = content.split(\"\\n\");\n  const padded = lines.map((l) =>\n    \" \".repeat(pad) + padAnsi(l, contentWidth) + \" \".repeat(pad)\n  );\n\n  const left = bStyle ? styled(b.midLeft, bStyle) : b.midLeft;\n  const right = bStyle ? styled(b.midRight, bStyle) : b.midRight;\n\n  const topBorder = buildHorizontalBorder(\n    b.topLeft, b.top, b.topRight,\n    innerWidth,\n    opts?.title,\n    bStyle\n  );\n\n  const bottomBorder = buildHorizontalBorder(\n    b.bottomLeft, b.bottom, b.bottomRight,\n    innerWidth,\n    opts?.subtitle,\n    bStyle\n  );\n\n  const contentLines = padded.map((l) => `${left}${l}${right}`);\n\n  return [topBorder, ...contentLines, bottomBorder].join(\"\\n\");\n}\n\nfunction buildHorizontalBorder(\n  left: string,\n  mid: string,\n  right: string,\n  width: number,\n  title?: string,\n  style?: Style\n): string {\n  if (!title) {\n    const line = mid.repeat(width);\n    return style\n      ? styled(`${left}${line}${right}`, style)\n      : `${left}${line}${right}`;\n  }\n\n  const titleText = ` ${title} `;\n  const titleVisual = stripAnsi(titleText);\n  const lineLen = Math.max(1, width - titleVisual - 2);\n  const leftLen = Math.floor(lineLen / 2);\n  const rightLen = lineLen - leftLen;\n\n  const leftPart = mid.repeat(leftLen);\n  const rightPart = mid.repeat(rightLen);\n\n  const borderStr = `${left}${leftPart} ${title} ${rightPart}${right}`;\n  return style ? styled(borderStr, style) : borderStr;\n}\n\nexport function rule(\n  title?: string,\n  opts?: {\n    char?: string;\n    style?: Style;\n    width?: number;\n    align?: \"left\" | \"center\" | \"right\";\n  }\n): string {\n  const ch = opts?.char ?? \"\\u2500\";\n  const width = opts?.width ?? terminalWidth();\n  const align = opts?.align ?? \"center\";\n\n  if (!title) {\n    const line = ch.repeat(width);\n    return opts?.style ? styled(line, opts.style) : line;\n  }\n\n  const titleText = ` ${title} `;\n  const titleVisual = stripAnsi(titleText);\n  const lineLen = Math.max(0, width - titleVisual - 2);\n  const styledTitle = opts?.style ? styled(title, opts.style) : title;\n\n  if (align === \"left\") {\n    const right = ch.repeat(lineLen);\n    const line = `${ch} ${styledTitle} ${ch}${right}`;\n    return opts?.style ? styled(line, opts.style) : line;\n  }\n  if (align === \"right\") {\n    const left = ch.repeat(lineLen);\n    const line = `${left}${ch} ${styledTitle} ${ch}`;\n    return opts?.style ? styled(line, opts.style) : line;\n  }\n\n  const leftLen = Math.floor(lineLen / 2);\n  const rightLen = lineLen - leftLen;\n  const left = ch.repeat(leftLen);\n  const right = ch.repeat(rightLen);\n  const line = `${left}${ch} ${styledTitle} ${ch}${right}`;\n  return opts?.style ? styled(line, opts.style) : line;\n}\n","import { BAR, BLOCK } from \"./symbols.js\";\nimport { styled, type Style, blend, C } from \"./ansi.js\";\n\nexport function bar(\n  value: number,\n  max: number,\n  width: number,\n  opts?: {\n    filledStyle?: Style;\n    emptyStyle?: Style;\n    label?: string;\n    showValue?: boolean;\n  }\n): string {\n  const ratio = Math.min(1, Math.max(0, value / max));\n  const totalEighths = Math.round(width * 8 * ratio);\n  const fullBlocks = Math.floor(totalEighths / 8);\n  const remainder = totalEighths % 8;\n\n  const filled = \"\\u2588\".repeat(fullBlocks) + (remainder > 0 ? BLOCK[remainder] : \"\");\n  const empty = \" \".repeat(width - fullBlocks - (remainder > 0 ? 1 : 0));\n\n  const filledStr = opts?.filledStyle\n    ? styled(filled, opts.filledStyle)\n    : filled;\n  const emptyStr = opts?.emptyStyle\n    ? styled(empty, opts.emptyStyle)\n    : empty;\n\n  let result = filledStr + emptyStr;\n\n  if (opts?.label) {\n    result = overlay(result, opts.label, width);\n  }\n\n  return result;\n}\n\nexport function sparkline(\n  values: number[],\n  opts?: {\n    style?: Style;\n    width?: number;\n    min?: number;\n    max?: number;\n  }\n): string {\n  if (values.length === 0) return \"\";\n\n  const min = opts?.min ?? Math.min(...values);\n  const max = opts?.max ?? Math.max(...values);\n  const range = max - min || 1;\n\n  const chars = values.map((v) => {\n    const idx = Math.round(((v - min) / range) * 8);\n    return BAR[Math.min(8, Math.max(0, idx))];\n  });\n\n  const text = chars.join(\"\");\n  return opts?.style ? styled(text, opts.style) : text;\n}\n\nexport function gauge(\n  value: number,\n  max: number,\n  width: number,\n  opts?: {\n    filledChar?: string;\n    emptyChar?: string;\n    tipChar?: string;\n    filledStyle?: Style;\n    emptyStyle?: Style;\n    label?: string;\n  }\n): string {\n  const ratio = Math.min(1, Math.max(0, value / max));\n  const filledWidth = Math.round(width * ratio);\n\n  const filledCh = opts?.filledChar ?? \"\\u2501\";\n  const emptyCh = opts?.emptyChar ?? \"\\u2500\";\n  const tipCh = opts?.tipChar ?? \"\\u2578\";\n\n  let filled: string;\n  if (filledWidth === 0) {\n    filled = \"\";\n  } else if (ratio < 1) {\n    filled = filledCh.repeat(filledWidth - 1) + tipCh;\n  } else {\n    filled = filledCh.repeat(filledWidth);\n  }\n\n  const empty = emptyCh.repeat(width - filledWidth);\n\n  const filledStr = opts?.filledStyle\n    ? styled(filled, opts.filledStyle)\n    : filled;\n  const emptyStr = opts?.emptyStyle\n    ? styled(empty, opts.emptyStyle)\n    : empty;\n\n  let result = filledStr + emptyStr;\n\n  if (opts?.label) {\n    result = overlay(result, opts.label, width);\n  }\n\n  return result;\n}\n\nexport function gradientBar(\n  value: number,\n  max: number,\n  width: number,\n  fromColor: [number, number, number],\n  toColor: [number, number, number],\n  bgColor?: [number, number, number]\n): string {\n  const ratio = Math.min(1, Math.max(0, value / max));\n  const filledWidth = Math.round(width * ratio);\n\n  const parts: string[] = [];\n  for (let i = 0; i < width; i++) {\n    const t = width > 1 ? i / (width - 1) : 0;\n    const c = i < filledWidth ? blend(fromColor, toColor, t) : (bgColor ?? [30, 30, 40]);\n    parts.push(styled(\"\\u2588\", { bg: c }));\n  }\n  return parts.join(\"\");\n}\n\nexport function benchmarkBar(\n  value: number,\n  max: number,\n  width: number,\n  opts?: {\n    color?: [number, number, number];\n    bgColor?: [number, number, number];\n    showPercent?: boolean;\n  }\n): string {\n  const ratio = Math.min(1, Math.max(0, value / max));\n  const filledWidth = Math.round(width * ratio);\n  const fg = opts?.color ?? [80, 180, 255];\n  const bg = opts?.bgColor ?? [35, 35, 50];\n\n  const filled = styled(\"\\u2588\".repeat(filledWidth), { bg: fg });\n  const empty = styled(\"\\u2588\".repeat(width - filledWidth), { bg });\n  let result = filled + empty;\n\n  if (opts?.showPercent) {\n    const pctStr = `${Math.round(ratio * 100)}%`;\n    result = overlay(result, pctStr, width);\n  }\n\n  return result;\n}\n\nfunction overlay(barStr: string, label: string, barWidth: number): string {\n  const labelStart = Math.floor((barWidth - label.length) / 2);\n  if (labelStart < 0) return barStr;\n  const resetLabel = `\\x1b[0m${label}\\x1b[0m`;\n  return barStr.slice(0, labelStart * 12) + resetLabel + barStr.slice((labelStart + label.length) * 12);\n}\n","import { styled, padAnsi, terminalWidth, C, type Style, RESET } from \"../ansi.js\";\nimport { panel, rule } from \"../panel.js\";\nimport { type BorderSet, ROUNDED, THICK, CHECK, CROSS, BULLET, DIAMOND, STAR } from \"../symbols.js\";\nimport { gauge, benchmarkBar } from \"../bar.js\";\nimport type { MachineProfile, GPUInfo, ProviderAvailability, InstalledModel } from \"../../model/inspector.js\";\n\nexport function renderInspectScreen(machine: MachineProfile): string {\n  const w = Math.min(terminalWidth(), 80);\n  const accent: Style = { fg: C.synthAccent, bold: true };\n  const muted: Style = { fg: C.synthMuted };\n  const green: Style = { fg: C.synthGreen };\n  const red: Style = { fg: C.synthRed };\n  const yellow: Style = { fg: C.synthYellow };\n\n  const sections: string[] = [];\n\n  sections.push(styled(\"SynthCode Adapt\", { fg: C.synthAccent, bold: true }));\n  sections.push(rule(\"Machine Inspection\", { char: \"\\u2500\", style: muted, width: w }));\n  sections.push(\"\");\n\n  sections.push(renderSystemInfo(machine, w, accent, muted));\n  sections.push(\"\");\n\n  if (machine.gpus.length > 0) {\n    sections.push(renderGPUInfo(machine.gpus, accent, muted, green));\n    sections.push(\"\");\n  }\n\n  sections.push(renderProviders(machine.providers, accent, green, red, muted));\n  sections.push(\"\");\n\n  if (machine.installedModels.length > 0) {\n    sections.push(renderInstalledModels(machine.installedModels, accent, muted));\n  }\n\n  return sections.join(\"\\n\");\n}\n\nfunction renderSystemInfo(\n  m: MachineProfile,\n  w: number,\n  accent: Style,\n  muted: Style\n): string {\n  const lines: string[] = [];\n\n  lines.push(styled(\"  System\", accent));\n  lines.push(\n    `  ${styled(\"Hostname\", muted)}  ${m.hostname}`\n  );\n  lines.push(\n    `  ${styled(\"Platform\", muted)}  ${m.platform}/${m.arch}`\n  );\n  lines.push(\n    `  ${styled(\"CPU\", muted)}      ${m.cpuModel}`\n  );\n  lines.push(\n    `  ${styled(\"Cores\", muted)}    ${m.cpuCores}`\n  );\n\n  const ramUsed = m.totalRamGB - m.availableRamGB;\n  const ramPct = (ramUsed / m.totalRamGB) * 100;\n  const ramBar = gauge(ramUsed, m.totalRamGB, 20, {\n    filledStyle: { fg: C.synthAccent },\n    emptyStyle: muted,\n    label: `${m.availableRamGB.toFixed(1)} GB free`,\n  });\n  lines.push(\n    `  ${styled(\"RAM\", muted)}      ${m.totalRamGB.toFixed(1)} GB  ${ramBar}`\n  );\n\n  return panel(lines.join(\"\\n\"), { border: ROUNDED, borderStyle: muted, width: w, padding: 0 });\n}\n\nfunction renderGPUInfo(\n  gpus: GPUInfo[],\n  accent: Style,\n  muted: Style,\n  green: Style\n): string {\n  const lines: string[] = [];\n  lines.push(styled(\"  Graphics\", accent));\n\n  for (const gpu of gpus) {\n    const typeLabel = gpu.type === \"apple-silicon\"\n      ? styled(\"Apple Silicon\", green)\n      : styled(gpu.type.toUpperCase(), { fg: C.orange });\n    const vramLabel = gpu.vramGB > 0\n      ? `  ${styled(`${gpu.vramGB.toFixed(1)} GB`, { fg: C.synthYellow })}`\n      : \"\";\n    lines.push(`  ${DIAMOND} ${gpu.name}  ${typeLabel}${vramLabel}`);\n  }\n\n  return lines.join(\"\\n\");\n}\n\nfunction renderProviders(\n  providers: ProviderAvailability[],\n  accent: Style,\n  green: Style,\n  red: Style,\n  muted: Style\n): string {\n  const lines: string[] = [];\n  lines.push(styled(\"  Providers\", accent));\n\n  for (const p of providers) {\n    const icon = p.available ? styled(CHECK, green) : styled(CROSS, { fg: C.synthDim });\n    const name = p.available ? styled(p.name, { fg: C.synthFg }) : styled(p.name, muted);\n    const details: string[] = [];\n    if (p.version) details.push(styled(`v${p.version}`, { fg: C.synthMuted }));\n    if (p.installedModels != null && p.installedModels > 0) {\n      details.push(styled(`${p.installedModels} models`, { fg: C.synthMuted }));\n    }\n    if (p.endpoint) details.push(styled(p.endpoint, { fg: C.synthDim }));\n    const detailStr = details.length > 0 ? `  ${details.join(\"  \")}` : \"\";\n    lines.push(`  ${icon}  ${name}${detailStr}`);\n  }\n\n  return lines.join(\"\\n\");\n}\n\nfunction renderInstalledModels(\n  models: InstalledModel[],\n  accent: Style,\n  muted: Style\n): string {\n  const lines: string[] = [];\n  lines.push(styled(\"  Installed Models\", accent));\n\n  for (const m of models) {\n    const sizeStr = m.sizeGB > 0 ? styled(`  ${m.sizeGB.toFixed(1)} GB`, { fg: C.synthYellow }) : \"\";\n    const quantStr = m.quantization ? styled(`  ${m.quantization}`, muted) : \"\";\n    lines.push(`  ${BULLET}  ${styled(m.tag, { fg: C.synthFg })}${sizeStr}${quantStr}`);\n  }\n\n  return lines.join(\"\\n\");\n}\n","import { styled, padAnsi, terminalWidth, stripAnsi, C, type Style, RESET } from \"../ansi.js\";\nimport { panel, rule } from \"../panel.js\";\nimport { table, type Column, type TableOpts } from \"../table.js\";\nimport { gauge, benchmarkBar, sparkline } from \"../bar.js\";\nimport { ROUNDED, THICK, HEAVY_HEAD, BULLET, DIAMOND, STAR, CHECK, CROSS, ARROW_R } from \"../symbols.js\";\nimport type { CatalogEntry } from \"../../model/catalog.js\";\nimport { MODEL_CATALOG } from \"../../model/catalog.js\";\nimport type { MachineProfile } from \"../../model/inspector.js\";\n\nexport function renderCatalogScreen(\n  machine: MachineProfile | null,\n  filter?: {\n    task?: string;\n    onlyLocal?: boolean;\n    family?: string;\n  }\n): string {\n  const w = Math.min(terminalWidth(), 100);\n  const accent: Style = { fg: C.synthAccent, bold: true };\n  const muted: Style = { fg: C.synthMuted };\n  const green: Style = { fg: C.synthGreen };\n  const yellow: Style = { fg: C.synthYellow };\n\n  const sections: string[] = [];\n  sections.push(styled(\"SynthCode Model Catalog\", accent));\n  sections.push(rule(`${MODEL_CATALOG.length} models`, { char: \"\\u2500\", style: muted, width: w }));\n  sections.push(\"\");\n\n  const effectiveVram = machine\n    ? machine.gpus.reduce((s, g) => s + g.vramGB, 0)\n    : 0;\n\n  let entries = MODEL_CATALOG;\n  if (filter?.onlyLocal) {\n    entries = entries.filter((e) => e.minVramGB <= effectiveVram || e.minRamGB <= (machine?.availableRamGB ?? 0));\n  }\n  if (filter?.family) {\n    entries = entries.filter((e) => e.family === filter.family);\n  }\n  if (filter?.task) {\n    entries = entries.filter((e) => e.recommendedFor.includes(filter.task as any));\n  }\n\n  const grouped = groupByFamily(entries);\n  for (const [family, models] of Object.entries(grouped)) {\n    sections.push(renderFamilyGroup(family, models, effectiveVram, machine?.availableRamGB ?? 0, w, accent, muted, green, yellow));\n    sections.push(\"\");\n  }\n\n  return sections.join(\"\\n\");\n}\n\nfunction renderFamilyGroup(\n  family: string,\n  entries: CatalogEntry[],\n  vram: number,\n  ram: number,\n  width: number,\n  accent: Style,\n  muted: Style,\n  green: Style,\n  yellow: Style\n): string {\n  const lines: string[] = [];\n  const maker = entries[0].maker;\n  const makerStyle: Style = { fg: C.synthMuted };\n\n  lines.push(`${styled(family, accent)}  ${styled(`by ${maker}`, makerStyle)}`);\n\n  for (const entry of entries) {\n    const canRun = entry.minVramGB <= vram || entry.minRamGB <= ram;\n    const statusIcon = canRun ? styled(CHECK, green) : styled(CROSS, { fg: C.synthDim });\n    const nameStyle: Style = canRun ? { fg: C.synthFg } : { fg: C.synthDim };\n    const params = entry.parameterSizes.join(\"/\");\n    const arch = entry.architecture === \"moe\" ? styled(\"MoE\", { fg: C.orange }) : \"\";\n    const activeLabel = entry.activeParams ? styled(`(${entry.activeParams} active)`, { fg: C.orange }) : \"\";\n    const sizeStr = entry.quantizations.length > 0\n      ? styled(`${entry.quantizations[0].sizeGB} GB`, { fg: C.synthYellow })\n      : \"\";\n    const ctxLabel = formatContext(entry.contextWindow);\n    const toolsLabel = entry.supportsToolUse ? styled(\"tools\", { fg: C.teal }) : \"\";\n    const thinkLabel = entry.supportsThinking ? styled(\"think\", { fg: C.purple }) : \"\";\n    const visionLabel = entry.supportsVision ? styled(\"vision\", { fg: C.pink }) : \"\";\n    const caps = [toolsLabel, thinkLabel, visionLabel].filter(Boolean).join(\" \");\n\n    const tags = entry.ollamaTags.slice(0, 2).map((t) => styled(t, muted)).join(\", \");\n\n    lines.push(\n      `  ${statusIcon}  ${styled(`${params}`, nameStyle)} ${arch} ${activeLabel}  ${sizeStr}  ${ctxLabel}  ${caps}`\n    );\n    lines.push(\n      `      ${tags}`\n    );\n\n    if (entry.benchmarks) {\n      const bm = entry.benchmarks;\n      const bmParts: string[] = [];\n      if (bm.liveCodeBench) bmParts.push(`LCB ${bm.liveCodeBench}`);\n      if (bm.sweBench) bmParts.push(`SWE ${bm.sweBench}`);\n      if (bm.mmlu) bmParts.push(`MMLU ${bm.mmlu}`);\n      if (bm.humaneval) bmParts.push(`HE ${bm.humaneval}`);\n      if (bm.codeforcesElo) bmParts.push(`Elo ${bm.codeforcesElo}`);\n      lines.push(`      ${styled(bmParts.join(\"  \"), { fg: C.synthDim })}`);\n    }\n  }\n\n  return panel(lines.join(\"\\n\"), { border: ROUNDED, borderStyle: { fg: C.synthDim }, width, padding: 0 });\n}\n\nexport function renderLeaderboardScreen(\n  task: \"coding\" | \"reasoning\" | \"agents\" | \"chat\" = \"coding\",\n  machine: MachineProfile | null\n): string {\n  const w = Math.min(terminalWidth(), 90);\n  const accent: Style = { fg: C.synthAccent, bold: true };\n  const muted: Style = { fg: C.synthMuted };\n\n  const effectiveVram = machine\n    ? machine.gpus.reduce((s, g) => s + g.vramGB, 0)\n    : 0;\n\n  const scored = MODEL_CATALOG\n    .filter((e) => e.openWeight && e.ollamaTags.length > 0)\n    .map((e) => ({\n      entry: e,\n      score: scoreForTask(e, task),\n      canRun: e.minVramGB <= effectiveVram || e.minRamGB <= (machine?.availableRamGB ?? 0),\n    }))\n    .sort((a, b) => b.score - a.score);\n\n  const sections: string[] = [];\n  sections.push(styled(\"SynthCode Model Leaderboard\", accent));\n  sections.push(rule(`${task} performance ranking`, { char: \"\\u2500\", style: muted, width: w }));\n  sections.push(\"\");\n\n  const maxScore = scored.length > 0 ? scored[0].score : 100;\n  const barWidth = 30;\n\n  const rows = scored.map((s, i) => {\n    const rank = i + 1;\n    const medal = rank === 1 ? styled(\"\\u2605\", { fg: [255, 215, 0] }) : rank === 2 ? styled(\"\\u2605\", { fg: [192, 192, 192] }) : rank === 3 ? styled(\"\\u2605\", { fg: [205, 127, 50] }) : `${rank}`.padStart(2);\n    const name = s.canRun ? styled(s.entry.name, { fg: C.synthFg }) : styled(s.entry.name, { fg: C.synthDim });\n    const scoreStr = styled(s.score.toFixed(1), { fg: C.synthAccent, bold: true });\n    const barStr = benchmarkBar(s.score, maxScore, barWidth, {\n      color: s.canRun ? C.synthAccent : C.synthDim,\n      bgColor: s.canRun ? [30, 40, 60] : [25, 25, 35],\n    });\n    const runLabel = s.canRun ? styled(\"RUN\", { fg: C.synthGreen }) : styled(\"--\", { fg: C.synthDim });\n    const sizeStr = s.entry.quantizations.length > 0\n      ? `${s.entry.quantizations[0].sizeGB} GB`.padStart(7)\n      : \"       \";\n\n    return `${medal}  ${name.padEnd(30)}  ${barStr}  ${scoreStr}  ${runLabel}  ${sizeStr}`;\n  });\n\n  sections.push(...rows);\n  sections.push(\"\");\n  sections.push(styled(`  ${DIAMOND} Ranked by ${task} score  ${DIAMOND} Can run on your machine`, muted));\n\n  return sections.join(\"\\n\");\n}\n\nexport function renderModelDetails(\n  entry: CatalogEntry,\n  machine: MachineProfile | null\n): string {\n  const w = Math.min(terminalWidth(), 80);\n  const accent: Style = { fg: C.synthAccent, bold: true };\n  const muted: Style = { fg: C.synthMuted };\n  const green: Style = { fg: C.synthGreen };\n  const yellow: Style = { fg: C.synthYellow };\n\n  const effectiveVram = machine\n    ? machine.gpus.reduce((s, g) => s + g.vramGB, 0)\n    : 0;\n  const canRun = entry.minVramGB <= effectiveVram || entry.minRamGB <= (machine?.availableRamGB ?? 0);\n\n  const sections: string[] = [];\n  sections.push(styled(`${entry.name}`, { fg: C.synthAccent, bold: true }));\n  sections.push(rule(`${entry.maker}  ${entry.openWeight ? \"Open Weight\" : \"Proprietary\"}`, { char: \"\\u2500\", style: muted, width: w }));\n  sections.push(\"\");\n\n  sections.push(renderDetailRow(\"Family\", entry.family, muted));\n  sections.push(renderDetailRow(\"Parameters\", entry.parameterSizes.join(\", \"), muted));\n  if (entry.activeParams) {\n    sections.push(renderDetailRow(\"Active Params\", entry.activeParams, { fg: C.orange }));\n  }\n  sections.push(renderDetailRow(\"Architecture\", entry.architecture.toUpperCase(), muted));\n  sections.push(renderDetailRow(\"Context\", formatContext(entry.contextWindow), muted));\n  sections.push(renderDetailRow(\"Released\", entry.released, muted));\n  sections.push(\"\");\n\n  sections.push(styled(\"  Capabilities\", accent));\n  sections.push(renderDetailRow(\"Tool Use\", entry.supportsToolUse ? styled(\"Yes\", green) : styled(\"No\", { fg: C.synthDim }), muted));\n  sections.push(renderDetailRow(\"Streaming\", entry.supportsStreaming ? styled(\"Yes\", green) : styled(\"No\", { fg: C.synthDim }), muted));\n  sections.push(renderDetailRow(\"Vision\", entry.supportsVision ? styled(\"Yes\", green) : styled(\"No\", { fg: C.synthDim }), muted));\n  sections.push(renderDetailRow(\"Thinking\", entry.supportsThinking ? styled(\"Yes\", green) : styled(\"No\", { fg: C.synthDim }), muted));\n  sections.push(\"\");\n\n  sections.push(styled(\"  Requirements\", accent));\n  const vramBar = benchmarkBar(entry.minVramGB, 48, 20, {\n    color: canRun ? C.synthGreen : C.synthRed,\n    bgColor: [35, 35, 50],\n    showPercent: true,\n  });\n  sections.push(renderDetailRow(\"Min VRAM\", `${entry.minVramGB} GB  ${vramBar}`, muted));\n  sections.push(renderDetailRow(\"Min RAM\", `${entry.minRamGB} GB`, muted));\n  sections.push(renderDetailRow(\"Can Run\", canRun ? styled(\"Yes\", { fg: C.synthGreen, bold: true }) : styled(\"No\", { fg: C.synthRed, bold: true }), muted));\n  sections.push(\"\");\n\n  if (entry.quantizations.length > 0) {\n    sections.push(styled(\"  Quantizations\", accent));\n    for (const q of entry.quantizations) {\n      sections.push(`  ${BULLET}  ${styled(q.name, { fg: C.synthFg })}  ${styled(`${q.sizeGB} GB`, yellow)}`);\n    }\n    sections.push(\"\");\n  }\n\n  if (entry.benchmarks) {\n    sections.push(styled(\"  Benchmarks\", accent));\n    const bm = entry.benchmarks;\n    const barW = 25;\n    if (bm.liveCodeBench != null) {\n      sections.push(renderBenchmarkRow(\"LiveCodeBench\", bm.liveCodeBench, 100, barW, C.synthAccent, muted));\n    }\n    if (bm.sweBench != null) {\n      sections.push(renderBenchmarkRow(\"SWE-bench\", bm.sweBench, 100, barW, C.synthGreen, muted));\n    }\n    if (bm.humaneval != null) {\n      sections.push(renderBenchmarkRow(\"HumanEval\", bm.humaneval, 100, barW, C.teal, muted));\n    }\n    if (bm.mmlu != null) {\n      sections.push(renderBenchmarkRow(\"MMLU\", bm.mmlu, 100, barW, C.purple, muted));\n    }\n    if (bm.codeforcesElo != null) {\n      sections.push(renderBenchmarkRow(\"Codeforces\", bm.codeforcesElo, 2500, barW, C.orange, muted));\n    }\n    sections.push(\"\");\n  }\n\n  if (entry.ollamaTags.length > 0) {\n    sections.push(styled(\"  Ollama Tags\", accent));\n    for (const tag of entry.ollamaTags) {\n      sections.push(`  ${ARROW_R}  ${styled(tag, { fg: C.synthAccent })}`);\n    }\n    sections.push(\"\");\n  }\n\n  sections.push(styled(\"  Recommended For\", accent));\n  sections.push(`  ${entry.recommendedFor.map((r) => styled(r, { fg: C.synthFg })).join(\", \")}`);\n\n  return panel(sections.join(\"\\n\"), { border: ROUNDED, borderStyle: { fg: C.synthDim }, width: w, padding: 0 });\n}\n\nfunction renderDetailRow(label: string, value: string, labelStyle: Style): string {\n  const padded = padAnsi(styled(label.padEnd(14), labelStyle), 14);\n  return `  ${padded}  ${value}`;\n}\n\nfunction renderBenchmarkRow(\n  name: string,\n  value: number,\n  max: number,\n  barWidth: number,\n  color: [number, number, number],\n  labelStyle: Style\n): string {\n  const barStr = benchmarkBar(value, max, barWidth, { color, bgColor: [35, 35, 50] });\n  const valueStr = typeof max === \"number\" && max > 100 ? `${value}` : `${value}`;\n  return `  ${padAnsi(styled(name.padEnd(14), labelStyle), 14)}  ${barStr}  ${styled(valueStr, { fg: color, bold: true })}`;\n}\n\nfunction scoreForTask(entry: CatalogEntry, task: string): number {\n  const bm = entry.benchmarks ?? {};\n  const lc = bm.liveCodeBench ?? 0;\n  const swe = bm.sweBench ?? 0;\n  const he = bm.humaneval ?? 0;\n  const mmlu = bm.mmlu ?? 0;\n  const elo = bm.codeforcesElo ?? 0;\n  const tools = entry.supportsToolUse ? 1 : 0;\n\n  switch (task) {\n    case \"coding\":\n      return lc * 0.5 + swe * 0.3 + he * 0.2;\n    case \"reasoning\":\n      return mmlu * 0.4 + (elo / 2500) * 100 * 0.3 + swe * 0.3;\n    case \"agents\":\n      return swe * 0.5 + lc * 0.3 + tools * 100 * 0.2;\n    default:\n      return lc * 0.4 + swe * 0.3 + mmlu * 0.3;\n  }\n}\n\nfunction groupByFamily(entries: CatalogEntry[]): Record<string, CatalogEntry[]> {\n  const groups: Record<string, CatalogEntry[]> = {};\n  for (const e of entries) {\n    if (!groups[e.family]) groups[e.family] = [];\n    groups[e.family].push(e);\n  }\n  return groups;\n}\n\nfunction formatContext(tokens: number): string {\n  if (tokens >= 1048576) return `${(tokens / 1048576).toFixed(0)}M ctx`;\n  if (tokens >= 1024) return `${(tokens / 1024).toFixed(0)}K ctx`;\n  return `${tokens} ctx`;\n}\n","import { type BorderSet, ROUNDED, HEAVY_HEAD } from \"./symbols.js\";\nimport { styled, padAnsi, stripAnsi, type Style, terminalWidth, RESET } from \"./ansi.js\";\n\nexport interface Column {\n  header: string;\n  key: string;\n  width?: number;\n  align?: \"left\" | \"center\" | \"right\";\n  style?: Style;\n  headerStyle?: Style;\n}\n\nexport interface TableOpts {\n  border?: BorderSet;\n  borderStyle?: Style;\n  headerStyle?: Style;\n  rowStyle?: Style;\n  alternateRowBg?: [number, number, number];\n  columns: Column[];\n  rows: Record<string, string>[];\n  width?: number;\n  showHeader?: boolean;\n  compact?: boolean;\n}\n\nexport function table(opts: TableOpts): string {\n  const b = opts.border ?? HEAVY_HEAD;\n  const termWidth = opts.width ?? terminalWidth();\n  const colDefs = opts.columns;\n  const rows = opts.rows;\n\n  const colWidths = computeWidths(colDefs, rows, termWidth);\n  const lines: string[] = [];\n\n  if (opts.showHeader !== false) {\n    lines.push(renderBorder(b, colWidths, \"top\", opts.borderStyle));\n    lines.push(renderHeaderRow(colDefs, colWidths, b, opts.headerStyle, opts.borderStyle));\n    lines.push(renderBorder(b, colWidths, \"head\", opts.borderStyle));\n  } else {\n    lines.push(renderBorder(b, colWidths, \"top\", opts.borderStyle));\n  }\n\n  for (let i = 0; i < rows.length; i++) {\n    const rowStyle = getRowStyle(i, opts);\n    lines.push(renderRow(colDefs, colWidths, rows[i], b, rowStyle, opts.borderStyle));\n  }\n\n  lines.push(renderBorder(b, colWidths, \"bottom\", opts.borderStyle));\n  return lines.join(\"\\n\");\n}\n\nfunction computeWidths(\n  cols: Column[],\n  rows: Record<string, string>[],\n  totalWidth: number\n): number[] {\n  const borderWidth = 1 + cols.length;\n  const available = totalWidth - borderWidth;\n\n  const minWidths = cols.map((c) => {\n    const headerLen = stripAnsi(c.header);\n    let maxDataLen = headerLen;\n    for (const row of rows) {\n      const val = row[c.key] ?? \"\";\n      const len = stripAnsi(val);\n      if (len > maxDataLen) maxDataLen = len;\n    }\n    return Math.min(maxDataLen, Math.floor(totalWidth / 2));\n  });\n\n  const explicitWidths = cols.map((c) => c.width);\n  const hasExplicit = explicitWidths.some((w) => w != null);\n\n  if (hasExplicit) {\n    const explicitSum = explicitWidths.reduce(\n      (sum: number, w, i) => sum + (w ?? minWidths[i] ?? 0),\n      0\n    );\n    return explicitWidths.map((w, i) => w ?? minWidths[i]);\n  }\n\n  const totalMin = minWidths.reduce((a, b) => a + b, 0);\n  if (totalMin <= available) {\n    const extra = available - totalMin;\n    const perCol = Math.floor(extra / cols.length);\n    return minWidths.map((w) => w + perCol);\n  }\n\n  return minWidths.map((w) => Math.max(4, Math.floor(available / cols.length)));\n}\n\nfunction renderBorder(\n  b: BorderSet,\n  widths: number[],\n  type: \"top\" | \"head\" | \"bottom\",\n  style?: Style\n): string {\n  const left = type === \"top\" ? b.topLeft : type === \"head\" ? b.headLeft : b.bottomLeft;\n  const mid = type === \"top\" ? b.top : type === \"head\" ? b.head : b.bottom;\n  const right = type === \"top\" ? b.topRight : type === \"head\" ? b.headRight : b.bottomRight;\n\n  const parts = widths.map((w) => mid.repeat(w));\n  const line = `${left}${parts.join(mid)}${right}`;\n  return style ? styled(line, style) : line;\n}\n\nfunction renderHeaderRow(\n  cols: Column[],\n  widths: number[],\n  b: BorderSet,\n  headerStyle?: Style,\n  borderStyle?: Style\n): string {\n  const left = borderStyle ? styled(b.midLeft, borderStyle) : b.midLeft;\n  const right = borderStyle ? styled(b.midRight, borderStyle) : b.midRight;\n  const sep = borderStyle ? styled(b.midLeft, borderStyle) : \"\\u2502\";\n\n  const cells = cols.map((c, i) => {\n    const s = c.headerStyle ?? headerStyle;\n    const text = s ? styled(c.header, s) : c.header;\n    return padAnsi(text, widths[i], c.align ?? \"left\");\n  });\n\n  return `${left}${cells.join(sep)}${right}`;\n}\n\nfunction renderRow(\n  cols: Column[],\n  widths: number[],\n  row: Record<string, string>,\n  b: BorderSet,\n  rowStyle?: Style,\n  borderStyle?: Style\n): string {\n  const left = borderStyle ? styled(b.midLeft, borderStyle) : b.midLeft;\n  const right = borderStyle ? styled(b.midRight, borderStyle) : b.midRight;\n  const sep = borderStyle ? styled(b.midLeft, borderStyle) : \"\\u2502\";\n\n  const cells = cols.map((c, i) => {\n    let text = row[c.key] ?? \"\";\n    if (rowStyle && !c.style) text = styled(text, rowStyle);\n    if (c.style) text = styled(stripAnsiRaw(text), c.style);\n    return padAnsi(text, widths[i], c.align ?? \"left\");\n  });\n\n  return `${left}${cells.join(sep)}${right}`;\n}\n\nfunction getRowStyle(index: number, opts: TableOpts): Style | undefined {\n  if (opts.rowStyle) return opts.rowStyle;\n  if (opts.alternateRowBg && index % 2 === 1) {\n    return { bg: opts.alternateRowBg };\n  }\n  return undefined;\n}\n\nfunction stripAnsiRaw(str: string): string {\n  const parts: string[] = [];\n  let inEscape = false;\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === \"\\x1b\") { inEscape = true; continue; }\n    if (inEscape) {\n      if (str[i] >= \"@\" && str[i] <= \"~\") inEscape = false;\n      continue;\n    }\n    parts.push(str[i]);\n  }\n  return parts.join(\"\");\n}\n","export { renderInspectScreen } from \"./screens/inspect.js\";\nexport { renderCatalogScreen, renderLeaderboardScreen, renderModelDetails } from \"./screens/catalog.js\";\n\nexport { styled, applyStyle, type Style, C, blend, terminalWidth, padAnsi, stripAnsi } from \"./ansi.js\";\nexport { panel, rule } from \"./panel.js\";\nexport { table, type Column, type TableOpts } from \"./table.js\";\nexport { bar, sparkline, gauge, benchmarkBar, gradientBar } from \"./bar.js\";\nexport * as Symbols from \"./symbols.js\";\n","import { MachineInspector, type MachineProfile } from \"../model/inspector.js\";\nimport { AutoSelector, type SelectionRequest, type SelectionResult } from \"../model/selector.js\";\nimport { ProjectAnalyzer, type ProjectProfile } from \"../model/project.js\";\nimport { MODEL_CATALOG, type CatalogEntry } from \"../model/catalog.js\";\nimport {\n  renderInspectScreen,\n  renderCatalogScreen,\n  renderLeaderboardScreen,\n  renderModelDetails,\n} from \"../tui/index.js\";\nimport { styled, C, type Style, terminalWidth } from \"../tui/ansi.js\";\nimport { panel, rule } from \"../tui/panel.js\";\nimport { ROUNDED, THICK } from \"../tui/symbols.js\";\nimport { benchmarkBar, gauge } from \"../tui/bar.js\";\n\nexport interface AdaptedConfig {\n  provider: string;\n  model: string;\n  maxTokens: number;\n  temperature: number;\n  dualPathVerifier: boolean;\n}\n\ntype TaskType = \"coding\" | \"reasoning\" | \"chat\" | \"agents\";\ntype RunMode = \"full\" | \"inspect\" | \"analyze\" | \"catalog\" | \"leaderboard\" | \"model\";\n\nfunction detectTask(project: ProjectProfile | null): TaskType {\n  if (!project) return \"coding\";\n\n  const frameworks = project.frameworks ?? [];\n  const hasAgentFramework = frameworks.some(\n    (f) =>\n      f.name.toLowerCase().includes(\"langchain\") ||\n      f.name.toLowerCase().includes(\"crewai\") ||\n      f.name.toLowerCase().includes(\"autogen\") ||\n      f.name.toLowerCase().includes(\"semantic kernel\") ||\n      f.name.toLowerCase().includes(\"agentic\")\n  );\n  if (hasAgentFramework) return \"agents\";\n\n  if (project.hasTests) return \"coding\";\n\n  const languages = project.languages ?? [];\n  const dataLangs = [\"Jupyter Notebook\", \"R\", \"Julia\"];\n  const dataShare = languages\n    .filter((l) => dataLangs.includes(l.language))\n    .reduce((sum, l) => sum + l.percentage, 0);\n  if (dataShare > 30) return \"reasoning\";\n\n  return \"coding\";\n}\n\nfunction buildAdaptedConfig(\n  selection: SelectionResult,\n  _profile: MachineProfile | null\n): AdaptedConfig {\n  const provider = selection.provider;\n  const model = selection.model;\n  const isLocal = provider === \"ollama\" || provider === \"lmstudio\";\n  const maxTokens = 131072;\n  const temperature = 0.2;\n  const dualPathVerifier = isLocal;\n\n  return {\n    provider,\n    model,\n    maxTokens,\n    temperature,\n    dualPathVerifier,\n  };\n}\n\nfunction renderAdaptTUI(\n  machine: MachineProfile | null,\n  project: ProjectProfile | null,\n  selection: SelectionResult | null,\n  config: AdaptedConfig | null\n): string {\n  const w = Math.min(terminalWidth(), 90);\n  const accent: Style = { fg: C.synthAccent, bold: true };\n  const muted: Style = { fg: C.synthMuted };\n  const green: Style = { fg: C.synthGreen };\n  const yellow: Style = { fg: C.synthYellow };\n\n  const sections: string[] = [];\n\n  sections.push(\"\");\n  sections.push(styled(\"  SynthCode Adapt\", { fg: C.synthAccent, bold: true, underline: true }));\n  sections.push(rule(\"self-adapting model selection\", { char: \"\\u2500\", style: muted, width: w }));\n  sections.push(\"\");\n\n  if (machine) {\n    sections.push(renderInspectScreen(machine));\n    sections.push(\"\");\n  }\n\n  if (project) {\n    const lines: string[] = [];\n    lines.push(styled(\"  Project Analysis\", accent));\n    lines.push(`  ${styled(\"Name\", muted).padEnd(16)}  ${project.name}`);\n    const topLangs = (project.languages ?? []).slice(0, 5);\n    if (topLangs.length > 0) {\n      const langStr = topLangs.map((l) => `${l.language} (${Math.round(l.percentage)}%)`).join(\", \");\n      lines.push(`  ${styled(\"Languages\", muted).padEnd(16)}  ${langStr}`);\n    }\n    const fwStr = (project.frameworks ?? []).map((f) => f.name).join(\", \");\n    if (fwStr) lines.push(`  ${styled(\"Frameworks\", muted).padEnd(16)}  ${fwStr}`);\n    lines.push(`  ${styled(\"Size\", muted).padEnd(16)}  ${project.totalFiles} files, ~${project.totalLinesOfCode.toLocaleString()} lines (${project.complexity})`);\n    if (project.testFramework) lines.push(`  ${styled(\"Tests\", muted).padEnd(16)}  ${project.testFramework}`);\n\n    sections.push(panel(lines.join(\"\\n\"), { border: ROUNDED, borderStyle: muted, width: w, padding: 0 }));\n    sections.push(\"\");\n  }\n\n  if (selection && machine) {\n    const lines: string[] = [];\n    lines.push(styled(\"  Recommended Model\", accent));\n    lines.push(\"\");\n\n    const modelPanel = panel(\n      [\n        `  ${styled(selection.model, { fg: C.synthAccent, bold: true })}`,\n        `  via ${styled(selection.provider, { fg: C.synthFg })}`,\n        \"\",\n        `  ${styled(\"Confidence\", muted).padEnd(14)}  ${benchmarkBar(selection.confidence, 1, 20, { color: C.synthAccent, bgColor: [30, 30, 45] })}  ${styled(`${Math.round(selection.confidence * 100)}%`, { fg: C.synthAccent, bold: true })}`,\n        \"\",\n        `  ${styled(\"Reason\", muted)}`,\n        `  ${selection.reason}`,\n        \"\",\n        `  ${styled(\"Download\", muted).padEnd(14)}  ${selection.needsDownload ? styled(\"Required\", { fg: C.synthYellow }) : styled(\"Already installed\", green)}`,\n      ].join(\"\\n\"),\n      { border: THICK, borderStyle: { fg: C.synthAccent }, width: 50, padding: 0 }\n    );\n    lines.push(modelPanel);\n\n    if (selection.alternatives.length > 0) {\n      lines.push(\"\");\n      lines.push(styled(\"  Alternatives\", accent));\n      const maxShow = Math.min(selection.alternatives.length, 4);\n      for (let i = 0; i < maxShow; i++) {\n        const alt = selection.alternatives[i];\n        lines.push(`  ${styled(`${i + 1}.`, muted)}  ${styled(alt.model, { fg: C.synthFg })}  via ${styled(alt.provider, muted)}`);\n        lines.push(`      ${styled(alt.reason, { fg: C.synthDim })}`);\n      }\n    }\n\n    sections.push(lines.join(\"\\n\"));\n    sections.push(\"\");\n  }\n\n  if (config) {\n    const lines: string[] = [];\n    lines.push(styled(\"  SynthCode Config\", accent));\n    const modelStr = `${config.provider}:${config.model}`;\n    const obj = {\n      model: modelStr,\n      dualPathVerifier: config.dualPathVerifier,\n      maxTurns: 100,\n      context: { maxTokens: config.maxTokens },\n    };\n    lines.push(\"  \" + JSON.stringify(obj, null, 2).replace(/\\n/g, \"\\n  \"));\n\n    sections.push(panel(lines.join(\"\\n\"), { border: ROUNDED, borderStyle: muted, width: w, padding: 0 }));\n  }\n\n  return sections.join(\"\\n\");\n}\n\nfunction parseArgs(args: string[]): {\n  mode: RunMode;\n  json: boolean;\n  taskOverride: TaskType | null;\n  modelId: string | null;\n  family: string | null;\n} {\n  let mode: RunMode = \"full\";\n  let json = false;\n  let taskOverride: TaskType | null = null;\n  let modelId: string | null = null;\n  let family: string | null = null;\n\n  for (let i = 0; i < args.length; i++) {\n    const arg = args[i];\n\n    switch (arg) {\n      case \"--inspect\":\n        mode = \"inspect\";\n        break;\n      case \"--analyze\":\n        mode = \"analyze\";\n        break;\n      case \"--json\":\n        json = true;\n        break;\n      case \"catalog\":\n        mode = \"catalog\";\n        break;\n      case \"leaderboard\":\n        mode = \"leaderboard\";\n        break;\n      case \"model\":\n        mode = \"model\";\n        modelId = args[++i] ?? null;\n        break;\n      case \"--task\": {\n        const val = args[++i];\n        const valid: TaskType[] = [\"coding\", \"reasoning\", \"chat\", \"agents\"];\n        if (!val || !valid.includes(val as TaskType)) {\n          throw new Error(\n            `--task requires one of: ${valid.join(\", \")} (got ${val ?? \"nothing\"})`\n          );\n        }\n        taskOverride = val as TaskType;\n        break;\n      }\n      case \"--model\": {\n        modelId = args[++i] ?? null;\n        break;\n      }\n      case \"--family\": {\n        family = args[++i] ?? null;\n        break;\n      }\n      default:\n        if (arg.startsWith(\"--\")) {\n          throw new Error(`Unknown option: ${arg}`);\n        }\n        break;\n    }\n  }\n\n  return { mode, json, taskOverride, modelId, family };\n}\n\nexport async function runAdaptCommand(args: string[]): Promise<void> {\n  const { mode, json, taskOverride, modelId, family } = parseArgs(args);\n\n  let machine: MachineProfile | null = null;\n\n  if (\n    mode === \"full\" ||\n    mode === \"inspect\" ||\n    mode === \"catalog\" ||\n    mode === \"leaderboard\"\n  ) {\n    const inspector = new MachineInspector();\n    machine = await inspector.inspect();\n  }\n\n  if (mode === \"catalog\") {\n    console.log(\n      renderCatalogScreen(machine, {\n        task: taskOverride ?? undefined,\n        family: family ?? undefined,\n      })\n    );\n    return;\n  }\n\n  if (mode === \"leaderboard\") {\n    console.log(\n      renderLeaderboardScreen(taskOverride ?? \"coding\", machine)\n    );\n    return;\n  }\n\n  if (mode === \"model\") {\n    if (!modelId) {\n      console.error(\"Usage: synthcode adapt model <model-id>\");\n      process.exit(1);\n    }\n    const entry = MODEL_CATALOG.find(\n      (e) =>\n        e.id === modelId ||\n        e.ollamaTags.includes(modelId) ||\n        e.name.toLowerCase() === modelId.toLowerCase()\n    );\n    if (!entry) {\n      console.error(`Model not found: ${modelId}`);\n      console.error(\n        `Available: ${MODEL_CATALOG.filter((e) => e.ollamaTags.length > 0)\n          .map((e) => e.ollamaTags[0])\n          .join(\", \")}`\n      );\n      process.exit(1);\n    }\n    console.log(renderModelDetails(entry, machine));\n    return;\n  }\n\n  let project: ProjectProfile | null = null;\n  let selection: SelectionResult | null = null;\n\n  if (mode === \"full\" || mode === \"analyze\") {\n    try {\n      const analyzer = new ProjectAnalyzer();\n      project = await analyzer.analyze(process.cwd());\n    } catch {\n      project = null;\n    }\n  }\n\n  if (mode === \"full\" && machine) {\n    const task: TaskType = taskOverride ?? detectTask(project);\n    const selector = new AutoSelector(machine);\n    const request: SelectionRequest = { task, preferLocal: true };\n    selection = selector.select(request);\n  }\n\n  const config =\n    selection && machine ? buildAdaptedConfig(selection, machine) : null;\n\n  if (json) {\n    console.log(\n      JSON.stringify({ machine, project, selection, config }, null, 2)\n    );\n  } else {\n    console.log(renderAdaptTUI(machine, project, selection, config));\n  }\n}\n","export const COLORS = {\n  primary: '#64b4ff',\n  secondary: '#a0a078',\n  success: '#50dc78',\n  green: '#50dc78',\n  warning: '#f0c83c',\n  yellow: '#f0c83c',\n  error: '#ff5050',\n  red: '#ff5050',\n  muted: '#64647a',\n  dim: '#464655',\n  bg: '#1a1a2e',\n  surface: '#23233a',\n  text: '#dcdce6',\n  fg: '#dcdce6',\n  accent: '#c792ea',\n  cyan: '#80cbef',\n  teal: '#28b4a0',\n  orange: '#f09628',\n  purple: '#9650c8',\n  barBg: '#232332',\n  barFill: '#64b4ff',\n};\n\nexport const SPACING = {\n  sidebarWidth: 28,\n  padding: 1,\n  gap: 1,\n};\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { COLORS, SPACING } from './theme.js';\n\nexport interface SidebarItem {\n  id: string;\n  label: string;\n  icon: string;\n  key: string;\n}\n\ninterface SidebarProps {\n  items: SidebarItem[];\n  active: string;\n  onSelect: (id: string) => void;\n  width: number;\n}\n\nexport function Sidebar({ items, active, onSelect, width }: SidebarProps) {\n  return (\n    <Box flexDirection=\"column\" width={width}>\n      <Box paddingX={1} marginBottom={0}>\n        <Text bold color={COLORS.primary}>{'┌──────────────────────┐'}</Text>\n      </Box>\n      <Box paddingX={1}>\n        <Text bold color={COLORS.primary}>{'│'}</Text>\n        <Text bold color={COLORS.primary}> SynthCode </Text>\n        <Text bold color={COLORS.primary}>{'│'}</Text>\n      </Box>\n      <Box paddingX={1} marginBottom={1}>\n        <Text bold color={COLORS.primary}>{'└──────────────────────┘'}</Text>\n      </Box>\n      <Box paddingX={1} marginBottom={0}>\n        <Text dimColor color={COLORS.muted}>v1.4.0</Text>\n      </Box>\n      <Box paddingX={1} marginBottom={1}>\n        <Text color={COLORS.dim}>{'─'.repeat(width - 4)}</Text>\n      </Box>\n      {items.map((item) => (\n        <SidebarRow\n          key={item.id}\n          item={item}\n          isActive={active === item.id}\n          onSelect={() => onSelect(item.id)}\n        />\n      ))}\n      <Box marginTop={1} paddingX={1}>\n        <Text color={COLORS.dim}>{'─'.repeat(width - 4)}</Text>\n      </Box>\n      <Box paddingX={1}>\n        <Text dimColor color={COLORS.muted}>{'  q'} quit  {'↑↓'} nav</Text>\n      </Box>\n    </Box>\n  );\n}\n\nfunction SidebarRow({ item, isActive, onSelect }: { item: SidebarItem; isActive: boolean; onSelect: () => void }) {\n  return (\n    <Box paddingX={1}>\n      <Text color={isActive ? COLORS.bg : undefined} backgroundColor={isActive ? COLORS.primary : undefined}>\n        {isActive ? ' ▸ ' : '   '}\n      </Text>\n      <Text color={isActive ? COLORS.primary : COLORS.text} bold={isActive}>\n        {` ${item.icon} ${item.label}`}\n      </Text>\n      <Text dimColor color={COLORS.dim}>{` [${item.key}]`}</Text>\n    </Box>\n  );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { COLORS } from './theme.js';\n\ninterface StatusbarProps {\n  activeScreen: string;\n}\n\nconst SCREEN_LABELS: Record<string, string> = {\n  dashboard: 'Dashboard',\n  inspect: 'Inspect',\n  catalog: 'Catalog',\n  leaderboard: 'Leaderboard',\n  project: 'Project',\n  playground: 'Playground',\n};\n\nexport function Statusbar({ activeScreen }: StatusbarProps) {\n  const label = SCREEN_LABELS[activeScreen] ?? activeScreen;\n  return (\n    <Box\n      width=\"100%\"\n      paddingX={1}\n      borderStyle=\"single\"\n      borderTop={true}\n      borderBottom={false}\n      borderLeft={false}\n      borderRight={false}\n    >\n      <Text color={COLORS.primary} bold>\n        {`◆ ${label}`}\n      </Text>\n      <Text color={COLORS.dim}>{'  │  '}</Text>\n      <Text dimColor color={COLORS.muted}>\n        SynthCode v1.4.0\n      </Text>\n      <Box flexGrow={1} />\n      <Text dimColor color={COLORS.muted}>\n        {'[1-6] navigate  [q] quit  [esc] back'}\n      </Text>\n    </Box>\n  );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { COLORS } from '../theme.js';\n\ninterface DashboardProps {\n  width: number;\n  height: number;\n  onNavigate?: (screen: string) => void;\n  onSelectModel?: (modelId: string) => void;\n}\n\nexport function Dashboard({ width, height }: DashboardProps) {\n  return (\n    <Box flexDirection=\"column\" flexGrow={1}>\n      <Box flexDirection=\"column\" alignItems=\"center\" marginBottom={1}>\n        <Text bold color={COLORS.primary}>\n          {'  ███████╗███████╗███╗   ██╗████████╗██╗███╗   ██╗███████╗'}\n        </Text>\n        <Text bold color={COLORS.primary}>\n          {'  ██╔════╝██╔════╝████╗  ██║╚══██╔══╝██║████╗  ██║██╔════╝'}\n        </Text>\n        <Text bold color={COLORS.primary}>\n          {'  ███████╗█████╗  ██╔██╗ ██║   ██║   ██║██╔██╗ ██║█████╗  '}\n        </Text>\n        <Text bold color={COLORS.primary}>\n          {'  ╚════██║██╔══╝  ██║╚██╗██║   ██║   ██║██║╚██╗██║██╔══╝  '}\n        </Text>\n        <Text bold color={COLORS.primary}>\n          {'  ███████║███████╗██║ ╚████║   ██║   ██║██║ ╚████║███████╗'}\n        </Text>\n        <Text bold color={COLORS.primary}>\n          {'  ╚══════╝╚══════╝╚═╝  ╚═══╝   ╚═╝   ╚═╝╚═╝  ╚═══╝╚══════╝'}\n        </Text>\n      </Box>\n\n      <Box justifyContent=\"center\" marginBottom={1}>\n        <Text color={COLORS.accent}>{'Synthesize any LLM into a production-grade AI agent'}</Text>\n      </Box>\n\n      <Box justifyContent=\"center\" gap={2} marginBottom={1}>\n        <StatCard label=\"Models\" value=\"30+\" color={COLORS.primary} />\n        <StatCard label=\"Providers\" value=\"4\" color={COLORS.success} />\n        <StatCard label=\"Tools\" value=\"7\" color={COLORS.warning} />\n        <StatCard label=\"Benchmarks\" value=\"5\" color={COLORS.accent} />\n      </Box>\n\n      <Box justifyContent=\"center\" marginBottom={1}>\n        <Text color={COLORS.dim}>{'─'.repeat(Math.min(width - 4, 60))}</Text>\n      </Box>\n\n      <Box flexDirection=\"column\" alignItems=\"center\">\n        <Text bold color={COLORS.text}>{'Quick Start'}</Text>\n        <Box marginBottom={0} />\n        <QuickAction icon=\"◆\" label=\"Dashboard\" desc=\"overview & stats\" keyNum=\"1\" />\n        <QuickAction icon=\"⚙\" label=\"Inspect\" desc=\"machine analysis\" keyNum=\"2\" />\n        <QuickAction icon=\"≡\" label=\"Catalog\" desc=\"browse models\" keyNum=\"3\" />\n        <QuickAction icon=\"♛\" label=\"Leaderboard\" desc=\"model rankings\" keyNum=\"4\" />\n        <QuickAction icon=\"░\" label=\"Project\" desc=\"code analysis\" keyNum=\"5\" />\n        <QuickAction icon=\"▸\" label=\"Playground\" desc=\"agent chat\" keyNum=\"6\" />\n      </Box>\n\n      <Box justifyContent=\"center\" marginTop={1}>\n        <Text dimColor color={COLORS.muted}>{'Press 1-6 to navigate  •  q to quit'}</Text>\n      </Box>\n    </Box>\n  );\n}\n\nfunction StatCard({ label, value, color }: { label: string; value: string; color: string }) {\n  return (\n    <Box flexDirection=\"column\" alignItems=\"center\" width={16} borderStyle=\"round\" paddingX={2} paddingY={0}>\n      <Text bold color={color}>{value}</Text>\n      <Text dimColor color={COLORS.muted}>{label}</Text>\n    </Box>\n  );\n}\n\nfunction QuickAction({ icon, label, desc, keyNum }: { icon: string; label: string; desc: string; keyNum: string }) {\n  return (\n    <Box>\n      <Text color={COLORS.primary}>{`  ${icon} `}</Text>\n      <Text bold color={COLORS.text}>{label}</Text>\n      <Text dimColor color={COLORS.muted}>{` — ${desc}`}</Text>\n      <Text color={COLORS.dim}>{`  [${keyNum}]`}</Text>\n    </Box>\n  );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { Spinner } from '@inkjs/ui';\nimport { MachineInspector } from '../../../model/inspector.js';\nimport type { MachineProfile, GPUInfo, ProviderAvailability, InstalledModel } from '../../../model/inspector.js';\nimport { COLORS, SPACING } from '../theme.js';\n\ninterface InspectProps {\n  width: number;\n  height: number;\n  onNavigate?: (screen: string) => void;\n  onSelectModel?: (modelId: string) => void;\n}\n\nfunction Bar({ value, max, width, color, bgColor }: { value: number; max: number; width: number; color: string; bgColor?: string }) {\n  const ratio = Math.min(1, Math.max(0, value / max));\n  const filled = Math.round(width * ratio);\n  const empty = width - filled;\n  return (\n    <Text>\n      <Text color={color}>{'\\u2588'.repeat(filled)}</Text>\n      <Text color={bgColor ?? COLORS.dim}>{'\\u2591'.repeat(empty)}</Text>\n    </Text>\n  );\n}\n\nfunction SystemInfo({ profile }: { profile: MachineProfile }) {\n  const ramUsed = profile.totalRamGB - profile.availableRamGB;\n  const ramPct = profile.totalRamGB > 0 ? Math.round((ramUsed / profile.totalRamGB) * 100) : 0;\n  return (\n    <Box flexDirection=\"column\">\n      <Text bold color={COLORS.primary}>  System</Text>\n      <Box>\n        <Text dimColor color={COLORS.muted}>{'Hostname'.padEnd(14)}</Text>\n        <Text color={COLORS.text}>{profile.hostname}</Text>\n      </Box>\n      <Box>\n        <Text dimColor color={COLORS.muted}>{'Platform'.padEnd(14)}</Text>\n        <Text color={COLORS.text}>{profile.platform}/{profile.arch}</Text>\n      </Box>\n      <Box>\n        <Text dimColor color={COLORS.muted}>{'CPU'.padEnd(14)}</Text>\n        <Text color={COLORS.text}>{profile.cpuModel}</Text>\n      </Box>\n      <Box>\n        <Text dimColor color={COLORS.muted}>{'Cores'.padEnd(14)}</Text>\n        <Text color={COLORS.text}>{profile.cpuCores}</Text>\n      </Box>\n      <Box>\n        <Text dimColor color={COLORS.muted}>{'RAM'.padEnd(14)}</Text>\n        <Text color={COLORS.text}>{profile.totalRamGB.toFixed(1)} GB </Text>\n        <Bar value={ramUsed} max={profile.totalRamGB} width={20} color={ramPct > 80 ? COLORS.error : COLORS.primary} bgColor={COLORS.dim} />\n        <Text color={COLORS.dim}> {profile.availableRamGB.toFixed(1)} GB free ({ramPct}% used)</Text>\n      </Box>\n      {profile.hasMetal && (\n        <Box>\n          <Text dimColor color={COLORS.muted}>{'Metal'.padEnd(14)}</Text>\n          <Text color={COLORS.success}>Supported</Text>\n        </Box>\n      )}\n    </Box>\n  );\n}\n\nfunction GPUInfoSection({ gpus }: { gpus: GPUInfo[] }) {\n  return (\n    <Box flexDirection=\"column\" marginTop={1}>\n      <Text bold color={COLORS.primary}>  Graphics</Text>\n      {gpus.map((gpu, i) => (\n        <Box key={i} flexDirection=\"column\" marginLeft={2}>\n          <Box>\n            <Text color={COLORS.accent}>{'\\u25C6'}</Text>\n            <Text color={COLORS.text}>{' ' + gpu.name + ' '}</Text>\n            {gpu.type === 'apple-silicon' && <Text color={COLORS.success}>(Apple Silicon)</Text>}\n            {gpu.type === 'nvidia' && <Text color={COLORS.warning}>(NVIDIA)</Text>}\n            {gpu.type === 'amd' && <Text color={COLORS.error}>(AMD)</Text>}\n            {gpu.type === 'intel' && <Text color={COLORS.cyan}>(Intel)</Text>}\n          </Box>\n          {gpu.vramGB > 0 && (\n            <Box>\n              <Text dimColor color={COLORS.muted}>{'VRAM'.padEnd(14)}</Text>\n              <Bar value={gpu.vramGB} max={Math.max(gpu.vramGB, 24)} width={16} color={COLORS.warning} bgColor={COLORS.dim} />\n              <Text color={COLORS.warning}> {gpu.vramGB.toFixed(1)} GB</Text>\n            </Box>\n          )}\n        </Box>\n      ))}\n    </Box>\n  );\n}\n\nfunction ProviderRow({ provider }: { provider: ProviderAvailability }) {\n  return (\n    <Box>\n      <Text>{'  '}</Text>\n      {provider.available ? (\n        <Text color={COLORS.success}>{'\\u2713'}</Text>\n      ) : (\n        <Text color={COLORS.error}>{'\\u2717'}</Text>\n      )}\n      <Text>{' '}</Text>\n      <Text color={provider.available ? COLORS.text : COLORS.dim}>{provider.name.padEnd(12)}</Text>\n      {provider.version && <Text dimColor color={COLORS.muted}>{' v' + provider.version}</Text>}\n      {provider.installedModels != null && provider.installedModels > 0 && (\n        <Text dimColor color={COLORS.muted}>{' ' + provider.installedModels + ' models'}</Text>\n      )}\n      {provider.endpoint && <Text dimColor color={COLORS.dim}>{' ' + provider.endpoint}</Text>}\n    </Box>\n  );\n}\n\nfunction ProvidersSection({ providers }: { providers: ProviderAvailability[] }) {\n  return (\n    <Box flexDirection=\"column\" marginTop={1}>\n      <Text bold color={COLORS.primary}>  Providers</Text>\n      {providers.map((p, i) => (\n        <ProviderRow key={i} provider={p} />\n      ))}\n    </Box>\n  );\n}\n\nfunction InstalledModelsSection({ models }: { models: InstalledModel[] }) {\n  return (\n    <Box flexDirection=\"column\" marginTop={1}>\n      <Text bold color={COLORS.primary}>  Installed Models</Text>\n      {models.map((m, i) => (\n        <Box key={i}>\n          <Text dimColor color={COLORS.muted}>{'  \\u2022 '}</Text>\n          <Text color={COLORS.text}>{m.tag}</Text>\n          {m.sizeGB > 0 && <Text color={COLORS.warning}>{' (' + m.sizeGB.toFixed(1) + ' GB)'}</Text>}\n          {m.quantization && <Text dimColor color={COLORS.muted}>{' [' + m.quantization + ']'}</Text>}\n        </Box>\n      ))}\n    </Box>\n  );\n}\n\nexport function Inspect({ width, height }: InspectProps) {\n  const [profile, setProfile] = useState<MachineProfile | null>(null);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n\n  useEffect(() => {\n    const inspector = new MachineInspector();\n    inspector.inspect().then((result) => {\n      setProfile(result);\n      setLoading(false);\n    }).catch((err) => {\n      setError(err instanceof Error ? err.message : String(err));\n      setLoading(false);\n    });\n  }, []);\n\n  if (loading) {\n    return (\n      <Box flexDirection=\"column\" padding={SPACING.padding}>\n        <Text bold color={COLORS.primary}>SynthCode Machine Inspector</Text>\n        <Box marginTop={1}>\n          <Spinner label=\"Scanning hardware...\" />\n        </Box>\n      </Box>\n    );\n  }\n\n  if (error) {\n    return (\n      <Box flexDirection=\"column\" padding={SPACING.padding}>\n        <Text bold color={COLORS.error}>{'Error: ' + error}</Text>\n        <Text dimColor color={COLORS.muted}>Press Escape to go back</Text>\n      </Box>\n    );\n  }\n\n  if (!profile) return null;\n\n  return (\n    <Box flexDirection=\"column\" padding={SPACING.padding}>\n      <Box borderStyle=\"round\" borderColor={COLORS.dim} paddingX={SPACING.padding * 2} flexDirection=\"column\">\n        <Text bold color={COLORS.primary}>SynthCode Machine Inspector</Text>\n        <Text dimColor color={COLORS.muted}>{'\\u2500'.repeat(40)}</Text>\n        <SystemInfo profile={profile} />\n        {profile.gpus.length > 0 && <GPUInfoSection gpus={profile.gpus} />}\n        <ProvidersSection providers={profile.providers} />\n        {profile.installedModels.length > 0 && (\n          <InstalledModelsSection models={profile.installedModels} />\n        )}\n        {profile.installedModels.length === 0 && (\n          <Box marginTop={1}>\n            <Text dimColor color={COLORS.dim}>  No models installed</Text>\n          </Box>\n        )}\n      </Box>\n    </Box>\n  );\n}\n","import React, { useState, useMemo, useCallback } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { TextInput } from '@inkjs/ui';\nimport { MODEL_CATALOG } from '../../../model/catalog.js';\nimport type { CatalogEntry } from '../../../model/catalog.js';\nimport { COLORS, SPACING } from '../theme.js';\n\ninterface CatalogProps {\n  width: number;\n  height: number;\n  onNavigate?: (screen: string) => void;\n  onSelectModel?: (modelId: string) => void;\n}\n\nfunction formatContext(tokens: number): string {\n  if (tokens >= 1048576) return `${(tokens / 1048576).toFixed(0)}M`;\n  if (tokens >= 1024) return `${(tokens / 1024).toFixed(0)}K`;\n  return `${tokens}`;\n}\n\nfunction ArchBadge({ arch }: { arch: string }) {\n  if (arch === 'moe') {\n    return <Text color={COLORS.warning}>{'<MoE>'}</Text>;\n  }\n  return <Text color={COLORS.dim}>dense</Text>;\n}\n\nfunction ToolBadge({ supports }: { supports: boolean }) {\n  if (supports) {\n    return <Text color={COLORS.cyan}>{'\\u2699'}tools</Text>;\n  }\n  return <Text dimColor color={COLORS.dim}>{'\\u2013'}no tools</Text>;\n}\n\nfunction ModelRow({ entry, selected, width }: { entry: CatalogEntry; selected: boolean; width: number }) {\n  const params = entry.parameterSizes.join('/');\n  const activeLabel = entry.activeParams ? ` (${entry.activeParams} active)` : '';\n  const ctxLabel = formatContext(entry.contextWindow);\n  const sizeGB = entry.quantizations.length > 0 ? entry.quantizations[0].sizeGB : 0;\n  const bgColor = selected ? COLORS.primary : undefined;\n\n  return (\n    <Box flexDirection=\"column\">\n      <Box>\n        <Text>{selected ? ' \\u25B6 ' : '   '}</Text>\n        <Text color={selected ? 'black' : COLORS.text} bold={selected} backgroundColor={bgColor}>\n          {entry.name.padEnd(Math.min(30, width - 50))}\n        </Text>\n        <Text>{' '}</Text>\n        <Text color={selected ? 'black' : COLORS.muted} backgroundColor={bgColor}>\n          {params}{activeLabel}\n        </Text>\n        <Text>{' '}</Text>\n        <ArchBadge arch={entry.architecture} />\n        <Text>{' '}</Text>\n        <Text color={selected ? 'black' : COLORS.dim} backgroundColor={bgColor}>\n          {ctxLabel} ctx\n        </Text>\n        {sizeGB > 0 && (\n          <>\n            <Text>{' '}</Text>\n            <Text color={selected ? 'black' : COLORS.warning} backgroundColor={bgColor}>\n              {sizeGB}GB\n            </Text>\n          </>\n        )}\n        <Text>{' '}</Text>\n        <ToolBadge supports={entry.supportsToolUse} />\n      </Box>\n      {selected && (\n        <Box marginLeft={3}>\n          <Text dimColor color={COLORS.muted}>\n            {entry.maker} | {entry.provider} | {entry.recommendedFor.join(', ')}\n          </Text>\n        </Box>\n      )}\n    </Box>\n  );\n}\n\nexport function Catalog({ width, height, onSelectModel }: CatalogProps) {\n  const [filter, setFilter] = useState('');\n  const [selectedIndex, setSelectedIndex] = useState(0);\n  const [filterActive, setFilterActive] = useState(false);\n  const headerHeight = 5;\n  const visibleItems = Math.max(1, height - headerHeight - 2);\n\n  const filtered = useMemo(() => {\n    if (!filter) return MODEL_CATALOG;\n    const lower = filter.toLowerCase();\n    return MODEL_CATALOG.filter(\n      (e) =>\n        e.name.toLowerCase().includes(lower) ||\n        e.family.toLowerCase().includes(lower) ||\n        e.maker.toLowerCase().includes(lower) ||\n        e.id.toLowerCase().includes(lower) ||\n        e.recommendedFor.some((r) => r.toLowerCase().includes(lower)) ||\n        e.ollamaTags.some((t) => t.toLowerCase().includes(lower))\n    );\n  }, [filter]);\n\n  const offset = useMemo(() => {\n    const maxOffset = Math.max(0, filtered.length - visibleItems);\n    const half = Math.floor(visibleItems / 2);\n    const ideal = selectedIndex - half;\n    return Math.max(0, Math.min(maxOffset, ideal));\n  }, [selectedIndex, filtered.length, visibleItems]);\n\n  const visible = useMemo(() => {\n    return filtered.slice(offset, offset + visibleItems);\n  }, [filtered, offset, visibleItems]);\n\n  useInput((input, key) => {\n    if (filterActive) return;\n    if (key.upArrow) {\n      setSelectedIndex((prev) => Math.max(0, prev - 1));\n    } else if (key.downArrow) {\n      setSelectedIndex((prev) => Math.min(filtered.length - 1, prev + 1));\n    } else if (key.return && filtered.length > 0) {\n      onSelectModel?.(filtered[selectedIndex].id);\n    } else if (input === '/') {\n      setFilterActive(true);\n    }\n  });\n\n  const handleFilterSubmit = useCallback(() => {\n    setFilterActive(false);\n    setSelectedIndex(0);\n  }, []);\n\n  return (\n    <Box flexDirection=\"column\" width={width}>\n      <Box borderStyle=\"round\" borderColor={COLORS.dim} flexDirection=\"column\" paddingX={SPACING.padding * 2}>\n        <Box>\n          <Text bold color={COLORS.primary}>Model Catalog</Text>\n          <Text color={COLORS.muted}>{' ' + filtered.length + ' models'}</Text>\n        </Box>\n        {filterActive ? (\n          <Box marginTop={1}>\n            <Text color={COLORS.warning}>Filter: </Text>\n            <TextInput defaultValue={filter} onChange={setFilter} onSubmit={handleFilterSubmit} placeholder=\"type to filter...\" />\n          </Box>\n        ) : (\n          <Box marginTop={1}>\n            {filter ? (\n              <Text color={COLORS.muted}>{'Filtered: '}<Text color={COLORS.text}>{filter}</Text>{' '}<Text dimColor>[ Esc to clear ]</Text></Text>\n            ) : (\n              <Text dimColor color={COLORS.dim}>{'Press / to filter | \\u2191\\u2193 scroll | Enter select'}</Text>\n            )}\n          </Box>\n        )}\n        <Text color={COLORS.dim}>{'\\u2500'.repeat(Math.min(width - 4, 80))}</Text>\n      </Box>\n\n      <Box flexDirection=\"column\">\n        {visible.map((entry, i) => {\n          const globalIndex = i + offset;\n          return (\n            <ModelRow\n              key={entry.id}\n              entry={entry}\n              selected={globalIndex === selectedIndex}\n              width={width}\n            />\n          );\n        })}\n      </Box>\n\n      {filtered.length > visibleItems && (\n        <Box>\n          <Text dimColor color={COLORS.dim}>\n            {'  '}Showing {offset + 1}-{Math.min(offset + visibleItems, filtered.length)} of {filtered.length}\n          </Text>\n        </Box>\n      )}\n    </Box>\n  );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { MODEL_CATALOG } from '../../../model/catalog.js';\nimport type { CatalogEntry } from '../../../model/catalog.js';\nimport { COLORS, SPACING } from '../theme.js';\n\ntype TaskTab = 'Coding' | 'Reasoning' | 'Chat' | 'Agents';\n\ninterface LeaderboardProps {\n  width: number;\n  height: number;\n  onNavigate?: (screen: string) => void;\n  onSelectModel?: (modelId: string) => void;\n}\n\nconst TABS: TaskTab[] = ['Coding', 'Reasoning', 'Chat', 'Agents'];\n\nfunction scoreForTask(entry: CatalogEntry, task: string): number {\n  const bm = entry.benchmarks ?? {};\n  const lc = bm.liveCodeBench ?? 0;\n  const swe = bm.sweBench ?? 0;\n  const he = bm.humaneval ?? 0;\n  const mmlu = bm.mmlu ?? 0;\n  const elo = bm.codeforcesElo ?? 0;\n  const tools = entry.supportsToolUse ? 1 : 0;\n\n  switch (task) {\n    case 'Coding':\n      return lc * 0.5 + swe * 0.3 + he * 0.2;\n    case 'Reasoning':\n      return mmlu * 0.4 + (elo / 2500) * 100 * 0.3 + swe * 0.3;\n    case 'Agents':\n      return swe * 0.5 + lc * 0.3 + tools * 100 * 0.2;\n    case 'Chat':\n      return mmlu * 0.3 + he * 0.2 + lc * 0.3;\n    default:\n      return lc * 0.4 + swe * 0.3 + mmlu * 0.3;\n  }\n}\n\nfunction RankMedal({ rank }: { rank: number }) {\n  if (rank === 1) return <Text bold color={COLORS.warning}>{'\\u2605'} 1st</Text>;\n  if (rank === 2) return <Text bold color={COLORS.secondary}>{'\\u2605'} 2nd</Text>;\n  if (rank === 3) return <Text bold color={COLORS.secondary}>{'\\u2605'} 3rd</Text>;\n  return <Text color={COLORS.muted}>{`#${String(rank).padStart(2)}`}</Text>;\n}\n\nfunction ScoreBar({ value, max, width }: { value: number; max: number; width: number }) {\n  const ratio = max > 0 ? Math.min(1, value / max) : 0;\n  const filled = Math.round(width * ratio);\n  const empty = width - filled;\n  const color = ratio >= 0.8 ? COLORS.success : ratio >= 0.5 ? COLORS.primary : ratio >= 0.3 ? COLORS.warning : COLORS.error;\n  return (\n    <Text>\n      <Text color={color}>{'\\u2588'.repeat(filled)}</Text>\n      <Text color={COLORS.dim}>{'\\u2588'.repeat(empty)}</Text>\n    </Text>\n  );\n}\n\ninterface RankedEntry {\n  entry: CatalogEntry;\n  score: number;\n}\n\nfunction LeaderboardRow({ ranked, rank, maxScore, width }: { ranked: RankedEntry; rank: number; maxScore: number; width: number }) {\n  const e = ranked.entry;\n  const barWidth = Math.max(8, Math.min(20, Math.floor((width - 55) / 2)));\n  const nameWidth = Math.min(26, Math.floor(width / 3));\n  const name = e.name.length > nameWidth ? e.name.slice(0, nameWidth - 1) + '\\u2026' : e.name;\n\n  return (\n    <Box>\n      <Box width={8}>\n        <RankMedal rank={rank} />\n      </Box>\n      <Box width={nameWidth + 2}>\n        <Text color={COLORS.text}>{name}</Text>\n      </Box>\n      <Box width={barWidth + 2}>\n        <ScoreBar value={ranked.score} max={maxScore} width={barWidth} />\n      </Box>\n      <Box width={8}>\n        <Text bold color={COLORS.primary}>{ranked.score.toFixed(1)}</Text>\n      </Box>\n      {e.architecture === 'moe' ? (\n        <Box width={6}>\n          <Text color={COLORS.warning}>MoE</Text>\n        </Box>\n      ) : (\n        <Box width={6}>\n          <Text color={COLORS.dim}>{'    '}</Text>\n        </Box>\n      )}\n      {e.supportsToolUse ? (\n        <Box width={6}>\n          <Text color={COLORS.cyan}>{'\\u2699'}Yes</Text>\n        </Box>\n      ) : (\n        <Box width={6}>\n          <Text color={COLORS.dim}>{'  No'}</Text>\n        </Box>\n      )}\n      {e.quantizations.length > 0 ? (\n        <Box width={8}>\n          <Text color={COLORS.warning}>{e.quantizations[0].sizeGB}G</Text>\n        </Box>\n      ) : (\n        <Box width={8}>\n          <Text color={COLORS.dim}>cloud</Text>\n        </Box>\n      )}\n    </Box>\n  );\n}\n\nexport function Leaderboard({ width, height }: LeaderboardProps) {\n  const [tabIndex, setTabIndex] = useState(0);\n  const activeTab = TABS[tabIndex];\n\n  const ranked = useMemo(() => {\n    return MODEL_CATALOG\n      .map((entry) => ({\n        entry,\n        score: scoreForTask(entry, activeTab),\n      }))\n      .filter((r) => r.score > 0)\n      .sort((a, b) => b.score - a.score);\n  }, [activeTab]);\n\n  const maxScore = ranked.length > 0 ? ranked[0].score : 100;\n  const headerLines = 4;\n  const visibleCount = Math.max(1, height - headerLines - 2);\n  const visible = ranked.slice(0, visibleCount);\n\n  useInput((input, key) => {\n    if (key.leftArrow) {\n      setTabIndex((prev) => (prev - 1 + TABS.length) % TABS.length);\n    } else if (key.rightArrow) {\n      setTabIndex((prev) => (prev + 1) % TABS.length);\n    }\n  });\n\n  return (\n    <Box flexDirection=\"column\" width={width}>\n      <Box borderStyle=\"round\" borderColor={COLORS.dim} flexDirection=\"column\" paddingX={SPACING.padding * 2}>\n        <Text bold color={COLORS.primary}>Model Leaderboard</Text>\n        <Box marginTop={1} flexDirection=\"row\">\n          {TABS.map((tab, i) => (\n            <Box key={tab} marginRight={2}>\n              {i === tabIndex ? (\n                <Box>\n                  <Text bold color={COLORS.primary} backgroundColor={COLORS.dim}>{' '}{tab}{' '}</Text>\n                </Box>\n              ) : (\n                <Text dimColor color={COLORS.muted}>{' '}{tab}{' '}</Text>\n              )}\n            </Box>\n          ))}\n        </Box>\n        <Box marginTop={1}>\n          <Text dimColor color={COLORS.dim}>{'\\u2500'.repeat(Math.min(width - 4, 80))}</Text>\n        </Box>\n      </Box>\n\n      <Box flexDirection=\"column\" marginTop={1}>\n        <Box>\n          <Box width={8}><Text bold color={COLORS.muted}>Rank</Text></Box>\n          <Box width={28}><Text bold color={COLORS.muted}>Model</Text></Box>\n          <Box width={22}><Text bold color={COLORS.muted}>Score</Text></Box>\n          <Box width={8}><Text bold color={COLORS.muted}>Score</Text></Box>\n          <Box width={6}><Text bold color={COLORS.muted}>Arch</Text></Box>\n          <Box width={6}><Text bold color={COLORS.muted}>Tools</Text></Box>\n          <Box width={8}><Text bold color={COLORS.muted}>Size</Text></Box>\n        </Box>\n        <Text color={COLORS.dim}>{'\\u2500'.repeat(Math.min(width - 2, 86))}</Text>\n        {visible.map((r, i) => (\n          <LeaderboardRow\n            key={r.entry.id}\n            ranked={r}\n            rank={i + 1}\n            maxScore={maxScore}\n            width={width}\n          />\n        ))}\n        {ranked.length > visibleCount && (\n          <Box marginTop={1}>\n            <Text dimColor color={COLORS.dim}>{'+ ' + (ranked.length - visibleCount) + ' more models'}</Text>\n          </Box>\n        )}\n      </Box>\n\n      <Box marginTop={1}>\n        <Text dimColor color={COLORS.muted}>{'\\u2190\\u2192'} switch tabs</Text>\n      </Box>\n    </Box>\n  );\n}\n","import React, { useMemo } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { MODEL_CATALOG } from '../../../model/catalog.js';\nimport type { CatalogEntry } from '../../../model/catalog.js';\nimport { COLORS, SPACING } from '../theme.js';\n\ninterface ModelDetailProps {\n  modelId: string;\n  onBack: () => void;\n  width?: number;\n  height?: number;\n}\n\nfunction ProgressBar({ value, max, width, color, label }: { value: number; max: number; width: number; color: string; label?: string }) {\n  const ratio = max > 0 ? Math.min(1, Math.max(0, value / max)) : 0;\n  const filled = Math.round(width * ratio);\n  const empty = width - filled;\n  return (\n    <Box>\n      <Text>\n        <Text color={color}>{'\\u2588'.repeat(filled)}</Text>\n        <Text color={COLORS.dim}>{'\\u2588'.repeat(empty)}</Text>\n      </Text>\n      {label && <Text color={COLORS.muted}>{' ' + label}</Text>}\n    </Box>\n  );\n}\n\nfunction DetailRow({ label, children }: { label: string; children: React.ReactNode }) {\n  return (\n    <Box>\n      <Box width={16}>\n        <Text dimColor color={COLORS.muted}>{label.padEnd(14)}</Text>\n      </Box>\n      <Box>{children}</Box>\n    </Box>\n  );\n}\n\nfunction Badge({ text, color }: { text: string; color: string }) {\n  return (\n    <Box marginRight={1}>\n      <Text color={color}>{'<' + text + '>'}</Text>\n    </Box>\n  );\n}\n\nexport function ModelDetail({ modelId, onBack, width = 80 }: ModelDetailProps) {\n  const entry = useMemo(() => {\n    return MODEL_CATALOG.find((e) => e.id === modelId || e.ollamaTags.includes(modelId)) ?? null;\n  }, [modelId]);\n\n  useInput((input, key) => {\n    if (key.escape) onBack();\n    if (input === 'q') onBack();\n  });\n\n  if (!entry) {\n    return (\n      <Box flexDirection=\"column\" padding={SPACING.padding}>\n        <Text bold color={COLORS.error}>{'Model not found: ' + modelId}</Text>\n        <Text dimColor color={COLORS.muted}>Press Escape to go back</Text>\n      </Box>\n    );\n  }\n\n  const maxBench = 100;\n  const barW = Math.min(25, Math.floor((width - 30) / 2));\n\n  return (\n    <Box flexDirection=\"column\" padding={SPACING.padding} width={width}>\n      <Box borderStyle=\"round\" borderColor={COLORS.dim} flexDirection=\"column\" paddingX={SPACING.padding * 2}>\n        <Text bold color={COLORS.primary}>{entry.name}</Text>\n        <Text dimColor color={COLORS.muted}>{entry.maker + ' ' + (entry.openWeight ? '| Open Weight' : '| Proprietary')}</Text>\n        <Text color={COLORS.dim}>{'\\u2500'.repeat(Math.min(width - 6, 76))}</Text>\n\n        <Box marginTop={1} flexDirection=\"column\">\n          <Text bold color={COLORS.primary}>  Identity</Text>\n          <DetailRow label=\"Family\">\n            <Text color={COLORS.text}>{entry.family}</Text>\n          </DetailRow>\n          <DetailRow label=\"Architecture\">\n            {entry.architecture === 'moe' ? (\n              <Badge text=\"MoE\" color={COLORS.secondary} />\n            ) : (\n              <Text color={COLORS.text}>Dense</Text>\n            )}\n            {entry.activeParams && <Text color={COLORS.secondary}>{' (' + entry.activeParams + ' active)'}</Text>}\n          </DetailRow>\n          <DetailRow label=\"Parameters\">\n            <Text color={COLORS.text}>{entry.parameterSizes.join(', ')}</Text>\n          </DetailRow>\n          <DetailRow label=\"Context\">\n            <Text color={COLORS.text}>{formatContext(entry.contextWindow)} tokens</Text>\n          </DetailRow>\n          <DetailRow label=\"Max Output\">\n            <Text color={COLORS.text}>{entry.maxOutputTokens.toLocaleString()} tokens</Text>\n          </DetailRow>\n          <DetailRow label=\"Released\">\n            <Text color={COLORS.text}>{entry.released}</Text>\n          </DetailRow>\n        </Box>\n\n        <Box marginTop={1} flexDirection=\"column\">\n          <Text bold color={COLORS.primary}>  Capabilities</Text>\n          <DetailRow label=\"Tool Use\">\n            {entry.supportsToolUse ? <Text color={COLORS.success}>{'\\u2713'} Yes</Text> : <Text color={COLORS.dim}>{'\\u2717'} No</Text>}\n          </DetailRow>\n          <DetailRow label=\"Streaming\">\n            {entry.supportsStreaming ? <Text color={COLORS.success}>{'\\u2713'} Yes</Text> : <Text color={COLORS.dim}>{'\\u2717'} No</Text>}\n          </DetailRow>\n          <DetailRow label=\"Vision\">\n            {entry.supportsVision ? <Text color={COLORS.success}>{'\\u2713'} Yes</Text> : <Text color={COLORS.dim}>{'\\u2717'} No</Text>}\n          </DetailRow>\n          <DetailRow label=\"Thinking\">\n            {entry.supportsThinking ? <Text color={COLORS.success}>{'\\u2713'} Yes</Text> : <Text color={COLORS.dim}>{'\\u2717'} No</Text>}\n          </DetailRow>\n        </Box>\n\n        <Box marginTop={1} flexDirection=\"column\">\n          <Text bold color={COLORS.primary}>  Hardware Requirements</Text>\n          <Box marginLeft={2}>\n            <DetailRow label=\"Min VRAM\">\n              <ProgressBar value={entry.minVramGB} max={Math.max(entry.minVramGB, 48)} width={barW} color={entry.minVramGB > 32 ? COLORS.error : entry.minVramGB > 16 ? COLORS.warning : COLORS.success} label={`${entry.minVramGB} GB`} />\n            </DetailRow>\n          </Box>\n          <Box marginLeft={2}>\n            <DetailRow label=\"Min RAM\">\n              <ProgressBar value={entry.minRamGB} max={Math.max(entry.minRamGB, 64)} width={barW} color={entry.minRamGB > 32 ? COLORS.error : entry.minRamGB > 16 ? COLORS.warning : COLORS.success} label={`${entry.minRamGB} GB`} />\n            </DetailRow>\n          </Box>\n        </Box>\n\n        {entry.benchmarks && (\n          <Box marginTop={1} flexDirection=\"column\">\n            <Text bold color={COLORS.primary}>  Benchmarks</Text>\n            {entry.benchmarks.liveCodeBench != null && (\n              <Box marginLeft={2}>\n                <DetailRow label=\"LiveCodeBench\">\n                  <ProgressBar value={entry.benchmarks.liveCodeBench} max={maxBench} width={barW} color={COLORS.primary} label={`${entry.benchmarks.liveCodeBench}`} />\n                </DetailRow>\n              </Box>\n            )}\n            {entry.benchmarks.sweBench != null && (\n              <Box marginLeft={2}>\n                <DetailRow label=\"SWE-bench\">\n                  <ProgressBar value={entry.benchmarks.sweBench} max={maxBench} width={barW} color={COLORS.success} label={`${entry.benchmarks.sweBench}`} />\n                </DetailRow>\n              </Box>\n            )}\n            {entry.benchmarks.humaneval != null && (\n              <Box marginLeft={2}>\n                <DetailRow label=\"HumanEval\">\n                  <ProgressBar value={entry.benchmarks.humaneval} max={maxBench} width={barW} color={COLORS.cyan} label={`${entry.benchmarks.humaneval}`} />\n                </DetailRow>\n              </Box>\n            )}\n            {entry.benchmarks.mmlu != null && (\n              <Box marginLeft={2}>\n                <DetailRow label=\"MMLU\">\n                  <ProgressBar value={entry.benchmarks.mmlu} max={maxBench} width={barW} color={COLORS.accent} label={`${entry.benchmarks.mmlu}`} />\n                </DetailRow>\n              </Box>\n            )}\n            {entry.benchmarks.codeforcesElo != null && (\n              <Box marginLeft={2}>\n                <DetailRow label=\"Codeforces\">\n                  <ProgressBar value={entry.benchmarks.codeforcesElo} max={2500} width={barW} color={COLORS.secondary} label={`${entry.benchmarks.codeforcesElo}`} />\n                </DetailRow>\n              </Box>\n            )}\n          </Box>\n        )}\n\n        {entry.recommendedFor.length > 0 && (\n          <Box marginTop={1} flexDirection=\"column\">\n            <Text bold color={COLORS.primary}>  Recommended For</Text>\n            <Box marginLeft={2} flexWrap=\"wrap\">\n              {entry.recommendedFor.map((r) => (\n                <Badge key={r} text={r} color={COLORS.text} />\n              ))}\n            </Box>\n          </Box>\n        )}\n\n        {entry.quantizations.length > 0 && (\n          <Box marginTop={1} flexDirection=\"column\">\n            <Text bold color={COLORS.primary}>  Quantizations</Text>\n            {entry.quantizations.map((q, i) => (\n              <Box key={i} marginLeft={2}>\n                <Text dimColor color={COLORS.muted}>{'\\u2022'} </Text>\n                <Text color={COLORS.text}>{q.name.padEnd(10)}</Text>\n                <Text color={COLORS.warning}>{q.sizeGB + ' GB'}</Text>\n              </Box>\n            ))}\n          </Box>\n        )}\n\n        {entry.ollamaTags.length > 0 && (\n          <Box marginTop={1} flexDirection=\"column\">\n            <Text bold color={COLORS.primary}>  Ollama Tags</Text>\n            {entry.ollamaTags.map((tag, i) => (\n              <Box key={i} marginLeft={2}>\n                <Text dimColor color={COLORS.muted}>{'\\u2192'} </Text>\n                <Text color={COLORS.primary}>{tag}</Text>\n              </Box>\n            ))}\n          </Box>\n        )}\n      </Box>\n\n      <Box marginTop={1}>\n        <Text dimColor color={COLORS.muted}>  Press Escape to go back</Text>\n      </Box>\n    </Box>\n  );\n}\n\nfunction formatContext(tokens: number): string {\n  if (tokens >= 1048576) return `${(tokens / 1048576).toFixed(0)}M`;\n  if (tokens >= 1024) return `${(tokens / 1024).toFixed(0)}K`;\n  return `${tokens}`;\n}\n","import React, { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { Spinner } from '@inkjs/ui';\nimport { ProjectAnalyzer } from '../../../model/project.js';\nimport type { ProjectProfile, LanguageInfo, FrameworkInfo } from '../../../model/project.js';\nimport { COLORS, SPACING } from '../theme.js';\n\ninterface ProjectProps {\n  width: number;\n  height: number;\n  onNavigate?: (screen: string) => void;\n  onSelectModel?: (modelId: string) => void;\n}\n\nfunction ProgressBar({ value, max, width, color }: { value: number; max: number; width: number; color: string }) {\n  const ratio = max > 0 ? Math.min(1, Math.max(0, value / max)) : 0;\n  const filled = Math.round(width * ratio);\n  const empty = width - filled;\n  return (\n    <Text>\n      <Text color={color}>{'\\u2588'.repeat(filled)}</Text>\n      <Text color={COLORS.dim}>{'\\u2588'.repeat(empty)}</Text>\n    </Text>\n  );\n}\n\nconst LANG_COLORS: Record<string, string> = {\n  TypeScript: '#3178c6',\n  JavaScript: '#f7df1e',\n  Python: '#3572A5',\n  Rust: '#dea584',\n  Go: '#00ADD8',\n  Java: '#b07219',\n  'C++': '#f34b7d',\n  C: '#555555',\n  Ruby: '#701516',\n  Swift: '#F05138',\n  'C#': '#178600',\n  HTML: '#e34c26',\n  CSS: '#563d7c',\n  SCSS: '#c6538c',\n  Kotlin: '#A97BFF',\n  Dart: '#00B4AB',\n  Shell: '#89e051',\n  Vue: '#41b883',\n  Svelte: '#ff3e00',\n};\n\nfunction LanguageBar({ lang, maxPct }: { lang: LanguageInfo; maxPct: number }) {\n  const barWidth = Math.min(20, Math.max(8, Math.floor(maxPct / 5)));\n  const color = LANG_COLORS[lang.language] ?? COLORS.primary;\n  return (\n    <Box>\n      <Box width={16}>\n        <Text color={COLORS.text}>{lang.language}</Text>\n      </Box>\n      <Box width={barWidth + 2}>\n        <ProgressBar value={lang.percentage} max={100} width={barWidth} color={color} />\n      </Box>\n      <Text color={COLORS.muted}>{' ' + lang.percentage.toFixed(1) + '%'}</Text>\n      <Text dimColor color={COLORS.dim}>{' (' + lang.fileCount + ' files)'}</Text>\n    </Box>\n  );\n}\n\nconst CATEGORY_COLORS: Record<string, string> = {\n  frontend: COLORS.primary,\n  backend: COLORS.success,\n  fullstack: COLORS.accent,\n  mobile: '#f06498',\n  data: COLORS.warning,\n  infra: COLORS.cyan,\n};\n\nfunction FrameworkBadge({ fw }: { fw: FrameworkInfo }) {\n  const color = CATEGORY_COLORS[fw.category] ?? COLORS.text;\n  return (\n    <Box marginRight={1}>\n      <Text color={color}>{'<' + fw.category + '>'}</Text>\n      <Text color={COLORS.text}>{' ' + fw.name}</Text>\n    </Box>\n  );\n}\n\nfunction ComplexityIndicator({ complexity }: { complexity: ProjectProfile['complexity'] }) {\n  const levels: ProjectProfile['complexity'][] = ['tiny', 'small', 'medium', 'large', 'monorepo'];\n  const idx = levels.indexOf(complexity);\n  const colors = [COLORS.success, COLORS.success, COLORS.warning, COLORS.secondary, COLORS.error];\n  const color = colors[idx] ?? COLORS.muted;\n  return (\n    <Box>\n      {levels.map((level, i) => (\n        <Text key={level}>\n          <Text color={i <= idx ? color : COLORS.dim}>{'\\u2588'}</Text>\n        </Text>\n      ))}\n      <Text color={color}>{' ' + complexity.toUpperCase()}</Text>\n    </Box>\n  );\n}\n\nfunction DetailRow({ label, children }: { label: string; children: React.ReactNode }) {\n  return (\n    <Box>\n      <Box width={18}>\n        <Text dimColor color={COLORS.muted}>{label.padEnd(16)}</Text>\n      </Box>\n      <Box>{children}</Box>\n    </Box>\n  );\n}\n\nexport function Project({ width, height }: ProjectProps) {\n  const [profile, setProfile] = useState<ProjectProfile | null>(null);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n\n  useEffect(() => {\n    const analyzer = new ProjectAnalyzer();\n    try {\n      const result = analyzer.analyze(process.cwd());\n      setProfile(result);\n    } catch (err) {\n      setError(err instanceof Error ? err.message : String(err));\n    }\n    setLoading(false);\n  }, []);\n\n  if (loading) {\n    return (\n      <Box flexDirection=\"column\" padding={SPACING.padding}>\n        <Text bold color={COLORS.primary}>SynthCode Project Analyzer</Text>\n        <Box marginTop={1}>\n          <Spinner label=\"Analyzing project...\" />\n        </Box>\n      </Box>\n    );\n  }\n\n  if (error) {\n    return (\n      <Box flexDirection=\"column\" padding={SPACING.padding}>\n        <Text bold color={COLORS.error}>{'Error: ' + error}</Text>\n        <Text dimColor color={COLORS.muted}>Press Escape to go back</Text>\n      </Box>\n    );\n  }\n\n  if (!profile) return null;\n\n  const maxLangPct = profile.languages.length > 0 ? profile.languages[0].percentage : 100;\n\n  return (\n    <Box flexDirection=\"column\" padding={SPACING.padding} width={width}>\n      <Box borderStyle=\"round\" borderColor={COLORS.dim} flexDirection=\"column\" paddingX={SPACING.padding * 2}>\n        <Text bold color={COLORS.primary}>{'Project: ' + profile.name}</Text>\n        <Text dimColor color={COLORS.muted}>{profile.rootDir}</Text>\n        <Text color={COLORS.dim}>{'\\u2500'.repeat(Math.min(width - 6, 76))}</Text>\n\n        <Box marginTop={1} flexDirection=\"column\">\n          <Text bold color={COLORS.primary}>  Overview</Text>\n          <DetailRow label=\"Total Files\">\n            <Text color={COLORS.text}>{profile.totalFiles.toLocaleString()}</Text>\n          </DetailRow>\n          <DetailRow label=\"Lines of Code\">\n            <Text color={COLORS.text}>{profile.totalLinesOfCode.toLocaleString()}</Text>\n          </DetailRow>\n          <DetailRow label=\"Complexity\">\n            <ComplexityIndicator complexity={profile.complexity} />\n          </DetailRow>\n          <DetailRow label=\"TypeScript\">\n            {profile.hasTypeScript ? <Text color={COLORS.success}>Yes</Text> : <Text color={COLORS.dim}>No</Text>}\n          </DetailRow>\n          <DetailRow label=\"Tests\">\n            {profile.hasTests ? <Text color={COLORS.success}>{'\\u2713'} Present</Text> : <Text color={COLORS.warning}>{'\\u2717'} None detected</Text>}\n          </DetailRow>\n          <DetailRow label=\"CI\">\n            {profile.hasCI ? <Text color={COLORS.success}>{'\\u2713'} Configured</Text> : <Text color={COLORS.dim}>Not detected</Text>}\n          </DetailRow>\n          <DetailRow label=\"Docker\">\n            {profile.hasDocker ? <Text color={COLORS.success}>{'\\u2713'} Yes</Text> : <Text color={COLORS.dim}>No</Text>}\n          </DetailRow>\n        </Box>\n\n        {profile.languages.length > 0 && (\n          <Box marginTop={1} flexDirection=\"column\">\n            <Text bold color={COLORS.primary}>  Languages</Text>\n            {profile.languages.slice(0, 10).map((lang) => (\n              <LanguageBar key={lang.language} lang={lang} maxPct={maxLangPct} />\n            ))}\n          </Box>\n        )}\n\n        {profile.frameworks.length > 0 && (\n          <Box marginTop={1} flexDirection=\"column\">\n            <Text bold color={COLORS.primary}>  Frameworks</Text>\n            <Box marginLeft={2} flexWrap=\"wrap\">\n              {profile.frameworks.map((fw, i) => (\n                <FrameworkBadge key={i} fw={fw} />\n              ))}\n            </Box>\n          </Box>\n        )}\n\n        <Box marginTop={1} flexDirection=\"column\">\n          <Text bold color={COLORS.primary}>  Tooling</Text>\n          <DetailRow label=\"Package Manager\">\n            {profile.packageManager ? <Text color={COLORS.text}>{profile.packageManager}</Text> : <Text color={COLORS.dim}>Not detected</Text>}\n          </DetailRow>\n          <DetailRow label=\"Test Framework\">\n            {profile.testFramework ? <Text color={COLORS.text}>{profile.testFramework}</Text> : <Text color={COLORS.dim}>Not detected</Text>}\n          </DetailRow>\n          <DetailRow label=\"Build Tool\">\n            {profile.buildTool ? <Text color={COLORS.text}>{profile.buildTool}</Text> : <Text color={COLORS.dim}>Not detected</Text>}\n          </DetailRow>\n        </Box>\n\n        <Box marginTop={1} flexDirection=\"column\">\n          <Text bold color={COLORS.primary}>  Model Requirements</Text>\n          <DetailRow label=\"Min Context\">\n            <Text color={COLORS.text}>{profile.modelRequirements.minContextTokens.toLocaleString()} tokens</Text>\n          </DetailRow>\n          <DetailRow label=\"Reasoning\">\n            {profile.modelRequirements.reasoningNeeded ? <Text color={COLORS.warning}>Recommended</Text> : <Text color={COLORS.dim}>Not needed</Text>}\n          </DetailRow>\n          <DetailRow label=\"Tool Use\">\n            {profile.modelRequirements.toolUseNeeded ? <Text color={COLORS.success}>Required</Text> : <Text color={COLORS.dim}>Optional</Text>}\n          </DetailRow>\n          <DetailRow label=\"Code Heavy\">\n            {profile.modelRequirements.codeHeavy ? <Text color={COLORS.primary}>Yes</Text> : <Text color={COLORS.dim}>No</Text>}\n          </DetailRow>\n        </Box>\n      </Box>\n    </Box>\n  );\n}\n","import React, { useState, useCallback } from 'react';\nimport { Box, Text, useApp } from 'ink';\nimport { TextInput } from '@inkjs/ui';\nimport { COLORS } from '../theme.js';\n\ninterface Message {\n  role: 'user' | 'assistant' | 'system';\n  content: string;\n  timestamp: Date;\n}\n\ninterface PlaygroundProps {\n  width: number;\n  height: number;\n  onNavigate?: (screen: string) => void;\n  onSelectModel?: (modelId: string) => void;\n}\n\nexport function Playground({ width, height }: PlaygroundProps) {\n  const { exit } = useApp();\n  const [messages, setMessages] = useState<Message[]>([\n    {\n      role: 'system',\n      content: 'Welcome to SynthCode Playground. Type a message to chat with the AI agent.',\n      timestamp: new Date(),\n    },\n    {\n      role: 'assistant',\n      content: 'Connect a provider to start chatting. Use --ollama, --anthropic, or --google flags.',\n      timestamp: new Date(),\n    },\n  ]);\n  const [isLoading, setIsLoading] = useState(false);\n  const [model, setModel] = useState('qwen3:32b');\n\n  const topBarHeight = 1;\n  const inputBarHeight = 3;\n  const messageAreaHeight = Math.max(3, height - topBarHeight - inputBarHeight);\n  const maxContentWidth = Math.max(20, width - 6);\n  const visibleMessages = messages.slice(-messageAreaHeight);\n\n  const wrapContent = useCallback((content: string, maxLen: number) => {\n    const lines: string[] = [];\n    for (let i = 0; i < content.length; i += maxLen) {\n      lines.push(content.slice(i, i + maxLen));\n    }\n    return lines.length > 0 ? lines : [''];\n  }, []);\n\n  const formatTime = useCallback((d: Date) => {\n    return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n  }, []);\n\n  const handleSend = useCallback((value: string) => {\n    const trimmed = value.trim();\n    if (!trimmed) return;\n\n    if (trimmed === '/clear') {\n      setMessages([]);\n      return;\n    }\n\n    if (trimmed.startsWith('/model ')) {\n      const newModel = trimmed.slice(7).trim();\n      if (newModel) {\n        setModel(newModel);\n        setMessages(prev => [\n          ...prev,\n          { role: 'system' as const, content: `Model switched to ${newModel}`, timestamp: new Date() },\n        ]);\n      }\n      return;\n    }\n\n    if (trimmed === '/quit') {\n      exit();\n      return;\n    }\n\n    const userContent = trimmed;\n    setMessages(prev => [\n      ...prev,\n      { role: 'user' as const, content: userContent, timestamp: new Date() },\n    ]);\n    setIsLoading(true);\n\n    setTimeout(() => {\n      setMessages(prev => [\n        ...prev,\n        {\n          role: 'assistant' as const,\n          content: `[Simulated] Connect a provider (Ollama, Anthropic, OpenAI) to get real responses. Your message: \"${userContent}\"`,\n          timestamp: new Date(),\n        },\n      ]);\n      setIsLoading(false);\n    }, 800 + Math.random() * 1200);\n  }, [exit]);\n\n  return (\n    <Box flexDirection=\"column\" width={width} height={height}>\n      <Box width={width} justifyContent=\"space-between\" paddingX={1}>\n        <Text bold color={COLORS.accent}>\n          Agent Playground\n        </Text>\n        <Text color={COLORS.muted}>\n          {'Model: '}{model}{' | /clear /model /quit'}\n        </Text>\n      </Box>\n\n      <Box flexDirection=\"column\" width={width} height={messageAreaHeight} paddingX={1}>\n        {visibleMessages.map((msg, i) => {\n          if (msg.role === 'system') {\n            return (\n              <Box key={i} justifyContent=\"center\" width={width - 2}>\n                <Text color={COLORS.warning}>{msg.content}</Text>\n              </Box>\n            );\n          }\n\n          if (msg.role === 'user') {\n            const wrapped = wrapContent(msg.content, maxContentWidth);\n            return (\n              <Box key={i} flexDirection=\"column\" alignItems=\"flex-end\" width={width - 2}>\n                {wrapped.map((line, j) => (\n                  <Text key={j} color={COLORS.cyan}>\n                    {line}\n                  </Text>\n                ))}\n                <Text dimColor>{formatTime(msg.timestamp)}</Text>\n              </Box>\n            );\n          }\n\n          return (\n            <Box key={i} flexDirection=\"column\" width={width - 2}>\n              <Text color={COLORS.text}>{msg.content}</Text>\n              <Text dimColor>{formatTime(msg.timestamp)}</Text>\n            </Box>\n          );\n        })}\n        {isLoading && (\n          <Box paddingLeft={2}>\n            <Text color={COLORS.muted} italic>\n              thinking...\n            </Text>\n          </Box>\n        )}\n      </Box>\n\n      <Box width={width} paddingX={1} borderStyle=\"single\" borderColor={COLORS.dim}>\n        <Text color={COLORS.cyan} bold>\n          {'> '}\n        </Text>\n        <Box flexGrow={1}>\n          <TextInput\n            onSubmit={handleSend}\n            placeholder=\"Type a message...\"\n            isDisabled={isLoading}\n          />\n        </Box>\n      </Box>\n    </Box>\n  );\n}\n","import React, { useState } from 'react';\nimport { Box, Text, useApp, useInput, useStdout } from 'ink';\nimport { Sidebar, type SidebarItem } from './Sidebar.js';\nimport { Statusbar } from './Statusbar.js';\nimport { Dashboard } from './screens/Dashboard.js';\nimport { Inspect } from './screens/Inspect.js';\nimport { Catalog } from './screens/Catalog.js';\nimport { Leaderboard } from './screens/Leaderboard.js';\nimport { ModelDetail } from './screens/ModelDetail.js';\nimport { Project } from './screens/Project.js';\nimport { Playground } from './screens/Playground.js';\nimport { COLORS, SPACING } from './theme.js';\n\nconst SCREENS: SidebarItem[] = [\n  { id: 'dashboard', label: 'Dashboard', icon: '\\u25C6', key: '1' },\n  { id: 'inspect', label: 'Inspect', icon: '\\u2699', key: '2' },\n  { id: 'catalog', label: 'Catalog', icon: '\\u2261', key: '3' },\n  { id: 'leaderboard', label: 'Leaderboard', icon: '\\u265B', key: '4' },\n  { id: 'project', label: 'Project', icon: '\\u2591', key: '5' },\n  { id: 'playground', label: 'Playground', icon: '\\u25B8', key: '6' },\n];\n\nexport function App() {\n  const [activeScreen, setActiveScreen] = useState('dashboard');\n  const [modelDetail, setModelDetail] = useState<string | null>(null);\n  const { exit } = useApp();\n  const { stdout } = useStdout();\n  const width = stdout?.columns ?? 80;\n  const height = stdout?.rows ?? 24;\n\n  useInput((input, key) => {\n    if (input === 'q' && !key.ctrl) {\n      exit();\n      return;\n    }\n    if (input === 'c' && key.ctrl) {\n      exit();\n      return;\n    }\n    const numKey = parseInt(input);\n    if (numKey >= 1 && numKey <= SCREENS.length) {\n      setModelDetail(null);\n      setActiveScreen(SCREENS[numKey - 1].id);\n    }\n    if (key.escape) {\n      setModelDetail(null);\n    }\n  });\n\n  const contentHeight = height - 4;\n  const contentWidth = width - SPACING.sidebarWidth - 4;\n\n  function renderContent() {\n    if (modelDetail) {\n      return (\n        <ModelDetail modelId={modelDetail} onBack={() => setModelDetail(null)} width={contentWidth} height={contentHeight} />\n      );\n    }\n\n    switch (activeScreen) {\n      case 'dashboard':\n        return <Dashboard width={contentWidth} height={contentHeight} onNavigate={setActiveScreen} onSelectModel={setModelDetail} />;\n      case 'inspect':\n        return <Inspect width={contentWidth} height={contentHeight} onNavigate={setActiveScreen} onSelectModel={setModelDetail} />;\n      case 'catalog':\n        return <Catalog width={contentWidth} height={contentHeight} onNavigate={setActiveScreen} onSelectModel={setModelDetail} />;\n      case 'leaderboard':\n        return <Leaderboard width={contentWidth} height={contentHeight} onNavigate={setActiveScreen} onSelectModel={setModelDetail} />;\n      case 'project':\n        return <Project width={contentWidth} height={contentHeight} onNavigate={setActiveScreen} onSelectModel={setModelDetail} />;\n      case 'playground':\n        return <Playground width={contentWidth} height={contentHeight} onNavigate={setActiveScreen} onSelectModel={setModelDetail} />;\n      default:\n        return <Dashboard width={contentWidth} height={contentHeight} onNavigate={setActiveScreen} onSelectModel={setModelDetail} />;\n    }\n  }\n\n  return (\n    <Box flexDirection=\"column\" height={height} width={width}>\n      <Box flexDirection=\"row\" flexGrow={1}>\n        <Box flexDirection=\"column\" width={SPACING.sidebarWidth}>\n          <Box flexDirection=\"row\" flexGrow={1}>\n            <Sidebar\n              items={SCREENS}\n              active={activeScreen}\n              onSelect={setActiveScreen}\n              width={SPACING.sidebarWidth - 1}\n            />\n            <Box flexDirection=\"column\">\n              {Array.from({ length: height - 2 }, (_, i) => (\n                <Text key={`divider-${i}`} color={COLORS.dim}>{'\\u2502'}</Text>\n              ))}\n            </Box>\n          </Box>\n        </Box>\n        <Box flexDirection=\"column\" flexGrow={1} padding={SPACING.padding}>\n          {renderContent()}\n        </Box>\n      </Box>\n      <Statusbar activeScreen={modelDetail ? 'model-detail' : activeScreen} />\n    </Box>\n  );\n}\n","import React from 'react';\nimport { render } from 'ink';\nimport { App } from './App.js';\n\nexport function runTUI() {\n  render(<App />, { alternateScreen: true, exitOnCtrlC: false });\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { execSync } from \"node:child_process\";\n\nexport interface InitOptions {\n  projectName?: string;\n  cwd?: string;\n  skipInstall?: boolean;\n}\n\nconst PACKAGE_JSON = JSON.stringify(\n  {\n    name: \"my-agent\",\n    version: \"1.0.0\",\n    type: \"module\",\n    scripts: {\n      start: \"npx tsx src/index.ts\",\n      test: \"npx vitest run\",\n      typecheck: \"tsc --noEmit\",\n    },\n    dependencies: {\n      \"@avasis-ai/synthcode\": \"^1.0.0\",\n      zod: \"^3.24.0\",\n    },\n    devDependencies: {\n      typescript: \"^5.7.0\",\n      tsx: \"^4.19.0\",\n      vitest: \"^2.1.0\",\n    },\n  },\n  null,\n  2,\n);\n\nconst TSCONFIG_JSON = JSON.stringify(\n  {\n    compilerOptions: {\n      target: \"ES2022\",\n      module: \"ESNext\",\n      moduleResolution: \"bundler\",\n      strict: true,\n      esModuleInterop: true,\n      skipLibCheck: true,\n      outDir: \"./dist\",\n      rootDir: \"./src\",\n      declaration: true,\n    },\n    include: [\"src\"],\n  },\n  null,\n  2,\n);\n\nconst ENV_EXAMPLE = `# Pick one provider and set its key:\n# ANTHROPIC_API_KEY=your-key-here\n# OPENAI_API_KEY=your-key-here\n# For Ollama (local, zero API costs): no key needed\n`;\n\nconst INDEX_TS = `import { Agent, BashTool, FileReadTool, FileWriteTool, FileEditTool, GlobTool, GrepTool, WebFetchTool } from \"@avasis-ai/synthcode\";\nimport { defineTool } from \"@avasis-ai/synthcode/tools\";\nimport { z } from \"zod\";\n\nconst agent = new Agent({\n  model: process.env.OLLAMA_MODEL\n    ? await import(\"@avasis-ai/synthcode/llm\").then(m => new m.OllamaProvider({ model: process.env.OLLAMA_MODEL }))\n    : process.env.OPENAI_API_KEY\n      ? await import(\"@avasis-ai/synthcode/llm\").then(m => new m.OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY }))\n      : await import(\"@avasis-ai/synthcode/llm\").then(m => new m.AnthropicProvider({ apiKey: process.env.ANTHROPIC_API_KEY! })),\n  tools: [\n    BashTool,\n    FileReadTool,\n    FileWriteTool,\n    FileEditTool,\n    GlobTool,\n    GrepTool,\n    WebFetchTool,\n  ],\n  systemPrompt: \"You are a helpful AI coding assistant with shell and file access.\",\n});\n\nconst prompt = process.argv[2] || \"Hello! What can I help you with?\";\n\nfor await (const event of agent.run(prompt)) {\n  if (event.type === \"text\") process.stdout.write(event.text);\n  if (event.type === \"tool_use\") console.log(\\`\\\\n  [\\${event.name}]\\`);\n  if (event.type === \"tool_result\") {\n    if (event.isError) console.log(\\`\\\\n  [\\${event.name}] FAILED\\`);\n  }\n  if (event.type === \"thinking\") process.stderr.write(\\`\\\\x1b[90m\\${event.thinking}\\\\x1b[0m\\`);\n  if (event.type === \"done\") console.log(\\`\\\\n\\\\nTokens: \\${event.usage.inputTokens} in, \\${event.usage.outputTokens} out\\`);\n  if (event.type === \"error\") {\n    console.error(\\`\\\\nError: \\${event.error.message}\\`);\n    process.exit(1);\n  }\n}\n`;\n\nexport async function init(opts?: InitOptions): Promise<void> {\n  const name = opts?.projectName ?? \"my-agent\";\n  const cwd = opts?.cwd ?? process.cwd();\n  const dir = path.join(cwd, name);\n\n  fs.mkdirSync(path.join(dir, \"src\", \"tools\"), { recursive: true });\n  fs.mkdirSync(path.join(dir, \"tests\"), { recursive: true });\n\n  fs.writeFileSync(path.join(dir, \"package.json\"), PACKAGE_JSON, \"utf-8\");\n  fs.writeFileSync(path.join(dir, \"tsconfig.json\"), TSCONFIG_JSON, \"utf-8\");\n  fs.writeFileSync(path.join(dir, \".env.example\"), ENV_EXAMPLE, \"utf-8\");\n  fs.writeFileSync(path.join(dir, \"src\", \"index.ts\"), INDEX_TS, \"utf-8\");\n  fs.writeFileSync(path.join(dir, \"tests\", \"agent.test.ts\"), `import { describe, it, expect } from \"vitest\";\\ndescribe(\"Agent\", () => { it(\"should have tools registered\", () => { expect(true).toBe(true); }); });\\n`, \"utf-8\");\n\n  if (!opts?.skipInstall) {\n    console.log(\"Installing dependencies...\");\n    execSync(\"npm install\", { cwd: dir, stdio: \"inherit\" });\n  }\n\n  console.log(`\\n  Created ${name}/`);\n  console.log(`  cd ${name} && npm start \"your prompt here\"\\n`);\n}\n","export { init } from \"./init.js\";\n","#!/usr/bin/env node\nimport { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\nconst p = require(\"../index.js\");\nconst { AnthropicProvider, OpenAIProvider, OllamaProvider } = require(\"../llm/index.js\");\n\nconst ALL_TOOLS = [\n  p.BashTool,\n  p.FileReadTool,\n  p.FileWriteTool,\n  p.FileEditTool,\n  p.GlobTool,\n  p.GrepTool,\n  p.WebFetchTool,\n];\n\nconst args = process.argv.slice(2);\n\nfunction usage() {\n  console.log(`synthcode <prompt> [options]\n\nCommands:\n  adapt                  Self-adapting model selection\n    adapt                Full: inspect machine, analyze project, recommend model\n    adapt --inspect      Inspect machine hardware and providers only\n    adapt --analyze      Analyze project only\n    adapt catalog        Browse 30+ model catalog with benchmarks\n    adapt leaderboard    Model performance rankings\n    adapt model <id>     Detailed model info with benchmark charts\n  init [name]            Scaffold a new agent project\n\nOptions:\n  --model <model>        Use specific model (auto-detects provider)\n  --ollama <model>       Use Ollama (default: qwen3:32b)\n  --anthropic <model>    Use Anthropic (default: claude-sonnet-4-20250514)\n  --openai <model>       Use OpenAI (default: gpt-4o)\n  --google <model>       Use Google Gemini (default: gemini-2.5-flash)\n  --max-turns <n>        Max agentic turns (default: 50)\n  --system <prompt>      System prompt\n  --cwd <dir>            Working directory (default: .)\n  --json                 Output final result as JSON\n  tui                    Launch interactive TUI dashboard\n  --help                 Show this help`);\n  process.exit(0);\n}\n\nif (args.includes(\"--help\") || args.length === 0) usage();\n\nif (args[0] === \"adapt\") {\n  import(\"./adapt.js\").then(m => m.runAdaptCommand(args.slice(1))).catch(e => { console.error(e); process.exit(1); });\n} else if (args[0] === \"tui\") {\n  import(\"../tui/app/index.js\").then(m => m.runTUI()).catch(e => { console.error(e); process.exit(1); });\n} else if (args[0] === \"init\") {\n  import(\"./index.js\").then(m => m.init({})).catch(e => { console.error(e); process.exit(1); });\n} else {\n  runAgent();\n}\n\nfunction getFlag(flags: string[], flag: string): string | undefined {\n  const idx = flags.indexOf(flag);\n  return idx !== -1 && idx + 1 < flags.length ? flags[idx + 1] : undefined;\n}\n\nfunction hasFlag(flags: string[], flag: string): boolean {\n  return flags.includes(flag);\n}\n\nfunction resolveProvider(flags: string[]) {\n  if (hasFlag(flags, \"--ollama\")) {\n    return new OllamaProvider({ model: getFlag(flags, \"--ollama\") ?? \"qwen3:32b\" });\n  }\n  if (hasFlag(flags, \"--anthropic\")) {\n    const model = getFlag(flags, \"--anthropic\") ?? \"claude-sonnet-4-20250514\";\n    if (!process.env.ANTHROPIC_API_KEY) {\n      console.error(\"Error: ANTHROPIC_API_KEY not set\");\n      process.exit(1);\n    }\n    return new AnthropicProvider({ apiKey: process.env.ANTHROPIC_API_KEY, model });\n  }\n  if (hasFlag(flags, \"--openai\")) {\n    const model = getFlag(flags, \"--openai\") ?? \"gpt-4o\";\n    if (!process.env.OPENAI_API_KEY) {\n      console.error(\"Error: OPENAI_API_KEY not set\");\n      process.exit(1);\n    }\n    return new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY, model });\n  }\n  if (hasFlag(flags, \"--google\")) {\n    const model = getFlag(flags, \"--google\") ?? \"gemini-2.5-flash\";\n    const key = process.env.GOOGLE_API_KEY;\n    if (!key) {\n      console.error(\"Error: GOOGLE_API_KEY not set\");\n      process.exit(1);\n    }\n    return new OpenAIProvider({\n      apiKey: key,\n      model,\n      baseURL: \"https://generativelanguage.googleapis.com/v1beta/openai\",\n    });\n  }\n  if (hasFlag(flags, \"--model\")) {\n    return new OllamaProvider({ model: getFlag(flags, \"--model\")! });\n  }\n  if (process.env.ANTHROPIC_API_KEY) return new AnthropicProvider({ apiKey: process.env.ANTHROPIC_API_KEY, model: \"claude-sonnet-4-20250514\" });\n  if (process.env.OPENAI_API_KEY) return new OpenAIProvider({ apiKey: process.env.OPENAI_API_KEY, model: \"gpt-4o\" });\n  return new OllamaProvider({ model: \"qwen3:32b\" });\n}\n\nasync function runAgent() {\n  const promptIdx = args.findIndex(a => !a.startsWith(\"--\") && a !== \"adapt\" && a !== \"init\");\n  if (promptIdx === -1) {\n    console.error(\"Error: no prompt provided. Run 'synthcode --help' for usage.\");\n    process.exit(1);\n  }\n\n  const prompt = args[promptIdx];\n  const flags = args.filter((_, i) => i !== promptIdx);\n\n  const provider = resolveProvider(flags);\n  const systemPrompt = getFlag(flags, \"--system\");\n  const maxTurns = parseInt(getFlag(flags, \"--max-turns\") ?? \"50\", 10);\n  const cwd = getFlag(flags, \"--cwd\") ?? process.cwd();\n  const jsonMode = hasFlag(flags, \"--json\");\n\n  const agent = new p.Agent({\n    model: provider,\n    tools: ALL_TOOLS,\n    ...(systemPrompt ? { systemPrompt } : {}),\n    maxTurns,\n    cwd,\n    disableTitle: true,\n  });\n\n  const finalText: string[] = [];\n  let finalUsage = { inputTokens: 0, outputTokens: 0 };\n\n  for await (const event of agent.run(prompt)) {\n    switch (event.type) {\n      case \"text\":\n        process.stdout.write(event.text);\n        finalText.push(event.text);\n        break;\n      case \"tool_use\":\n        console.log(`\\n  \\x1b[36m[${event.name}]\\x1b[0m`);\n        break;\n      case \"tool_result\":\n        if (event.isError) console.log(`  \\x1b[31mFAILED\\x1b[0m`);\n        break;\n      case \"thinking\":\n        process.stderr.write(`\\x1b[90m${event.thinking}\\x1b[0m`);\n        break;\n      case \"done\":\n        finalUsage.inputTokens = event.usage.inputTokens;\n        finalUsage.outputTokens = event.usage.outputTokens;\n        console.log(`\\n\\n\\x1b[90mTokens: ${event.usage.inputTokens} in, ${event.usage.outputTokens} out\\x1b[0m`);\n        break;\n      case \"error\":\n        console.error(`\\n\\x1b[31mError: ${event.error.message}\\x1b[0m`);\n        if (jsonMode) console.log(JSON.stringify({ ok: false, error: event.error.message }));\n        process.exit(1);\n    }\n  }\n\n  if (jsonMode) {\n    console.log(JSON.stringify({ ok: true, text: finalText.join(\"\"), usage: finalUsage, model: provider.model }));\n  }\n}\n"],"mappings":"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","names":["cpus","p","line","right","left","fg","bg","p","arch","init_catalog","init_catalog","args","import_ink","import_jsx_runtime","import_ink","import_jsx_runtime","p","import_ink","import_jsx_runtime","formatContext","arch","import_react","import_ink","import_ui","import_jsx_runtime","scoreForTask","import_react","import_ink","import_jsx_runtime","formatContext","import_react","import_ink","import_jsx_runtime","ProgressBar","DetailRow","import_react","import_ink","import_ui","import_jsx_runtime","import_react","import_ink","import_ui","import_jsx_runtime","import_react","import_ink","import_jsx_runtime","import_ink","import_jsx_runtime","fs","path","require"]}