{"version":3,"sources":["../../src/tui/index.ts","../../src/tui/ansi.ts","../../src/tui/symbols.ts","../../src/tui/panel.ts","../../src/tui/bar.ts","../../src/tui/screens/inspect.ts","../../src/model/catalog.ts","../../src/tui/screens/catalog.ts","../../src/tui/table.ts"],"sourcesContent":["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","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 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 { 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"],"mappings":"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","names":["line","right","left","fg","bg"]}