aigetwey 1.3.6 → 1.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dashboard/.next/BUILD_ID +1 -1
  3. package/dashboard/.next/build-manifest.json +3 -3
  4. package/dashboard/.next/diagnostics/route-bundle-stats.json +10 -10
  5. package/dashboard/.next/fallback-build-manifest.json +3 -3
  6. package/dashboard/.next/server/app/(console)/combos/page_client-reference-manifest.js +1 -1
  7. package/dashboard/.next/server/app/(console)/config/page_client-reference-manifest.js +1 -1
  8. package/dashboard/.next/server/app/(console)/console/page_client-reference-manifest.js +1 -1
  9. package/dashboard/.next/server/app/(console)/endpoint/page_client-reference-manifest.js +1 -1
  10. package/dashboard/.next/server/app/(console)/page_client-reference-manifest.js +1 -1
  11. package/dashboard/.next/server/app/(console)/providers/[id]/page_client-reference-manifest.js +1 -1
  12. package/dashboard/.next/server/app/(console)/providers/page_client-reference-manifest.js +1 -1
  13. package/dashboard/.next/server/app/(console)/quota/page_client-reference-manifest.js +1 -1
  14. package/dashboard/.next/server/app/(console)/tools/[id]/page_client-reference-manifest.js +1 -1
  15. package/dashboard/.next/server/app/(console)/tools/page_client-reference-manifest.js +1 -1
  16. package/dashboard/.next/server/app/(console)/usage/page_client-reference-manifest.js +1 -1
  17. package/dashboard/.next/server/app/_global-error.html +1 -1
  18. package/dashboard/.next/server/app/_global-error.rsc +1 -1
  19. package/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  20. package/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  21. package/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  22. package/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  23. package/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  24. package/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  25. package/dashboard/.next/server/app/_not-found.html +1 -1
  26. package/dashboard/.next/server/app/_not-found.rsc +2 -2
  27. package/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  28. package/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  29. package/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  30. package/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  31. package/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  32. package/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  33. package/dashboard/.next/server/app/combos.html +1 -1
  34. package/dashboard/.next/server/app/combos.rsc +2 -2
  35. package/dashboard/.next/server/app/combos.segments/!KGNvbnNvbGUp/combos/__PAGE__.segment.rsc +1 -1
  36. package/dashboard/.next/server/app/combos.segments/!KGNvbnNvbGUp/combos.segment.rsc +1 -1
  37. package/dashboard/.next/server/app/combos.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
  38. package/dashboard/.next/server/app/combos.segments/_full.segment.rsc +2 -2
  39. package/dashboard/.next/server/app/combos.segments/_head.segment.rsc +1 -1
  40. package/dashboard/.next/server/app/combos.segments/_index.segment.rsc +2 -2
  41. package/dashboard/.next/server/app/combos.segments/_tree.segment.rsc +2 -2
  42. package/dashboard/.next/server/app/config.html +1 -1
  43. package/dashboard/.next/server/app/config.rsc +2 -2
  44. package/dashboard/.next/server/app/config.segments/!KGNvbnNvbGUp/config/__PAGE__.segment.rsc +1 -1
  45. package/dashboard/.next/server/app/config.segments/!KGNvbnNvbGUp/config.segment.rsc +1 -1
  46. package/dashboard/.next/server/app/config.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
  47. package/dashboard/.next/server/app/config.segments/_full.segment.rsc +2 -2
  48. package/dashboard/.next/server/app/config.segments/_head.segment.rsc +1 -1
  49. package/dashboard/.next/server/app/config.segments/_index.segment.rsc +2 -2
  50. package/dashboard/.next/server/app/config.segments/_tree.segment.rsc +2 -2
  51. package/dashboard/.next/server/app/console.html +1 -1
  52. package/dashboard/.next/server/app/console.rsc +2 -2
  53. package/dashboard/.next/server/app/console.segments/!KGNvbnNvbGUp/console/__PAGE__.segment.rsc +1 -1
  54. package/dashboard/.next/server/app/console.segments/!KGNvbnNvbGUp/console.segment.rsc +1 -1
  55. package/dashboard/.next/server/app/console.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
  56. package/dashboard/.next/server/app/console.segments/_full.segment.rsc +2 -2
  57. package/dashboard/.next/server/app/console.segments/_head.segment.rsc +1 -1
  58. package/dashboard/.next/server/app/console.segments/_index.segment.rsc +2 -2
  59. package/dashboard/.next/server/app/console.segments/_tree.segment.rsc +2 -2
  60. package/dashboard/.next/server/app/endpoint.html +1 -1
  61. package/dashboard/.next/server/app/endpoint.rsc +3 -3
  62. package/dashboard/.next/server/app/endpoint.segments/!KGNvbnNvbGUp/endpoint/__PAGE__.segment.rsc +2 -2
  63. package/dashboard/.next/server/app/endpoint.segments/!KGNvbnNvbGUp/endpoint.segment.rsc +1 -1
  64. package/dashboard/.next/server/app/endpoint.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
  65. package/dashboard/.next/server/app/endpoint.segments/_full.segment.rsc +3 -3
  66. package/dashboard/.next/server/app/endpoint.segments/_head.segment.rsc +1 -1
  67. package/dashboard/.next/server/app/endpoint.segments/_index.segment.rsc +2 -2
  68. package/dashboard/.next/server/app/endpoint.segments/_tree.segment.rsc +2 -2
  69. package/dashboard/.next/server/app/index.html +1 -1
  70. package/dashboard/.next/server/app/index.rsc +3 -3
  71. package/dashboard/.next/server/app/index.segments/!KGNvbnNvbGUp/__PAGE__.segment.rsc +2 -2
  72. package/dashboard/.next/server/app/index.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
  73. package/dashboard/.next/server/app/index.segments/_full.segment.rsc +3 -3
  74. package/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
  75. package/dashboard/.next/server/app/index.segments/_index.segment.rsc +2 -2
  76. package/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  77. package/dashboard/.next/server/app/login/page_client-reference-manifest.js +1 -1
  78. package/dashboard/.next/server/app/login.html +1 -1
  79. package/dashboard/.next/server/app/login.rsc +2 -2
  80. package/dashboard/.next/server/app/login.segments/_full.segment.rsc +2 -2
  81. package/dashboard/.next/server/app/login.segments/_head.segment.rsc +1 -1
  82. package/dashboard/.next/server/app/login.segments/_index.segment.rsc +2 -2
  83. package/dashboard/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  84. package/dashboard/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  85. package/dashboard/.next/server/app/login.segments/login.segment.rsc +1 -1
  86. package/dashboard/.next/server/app/providers.html +1 -1
  87. package/dashboard/.next/server/app/providers.rsc +3 -3
  88. package/dashboard/.next/server/app/providers.segments/!KGNvbnNvbGUp/providers/__PAGE__.segment.rsc +2 -2
  89. package/dashboard/.next/server/app/providers.segments/!KGNvbnNvbGUp/providers.segment.rsc +1 -1
  90. package/dashboard/.next/server/app/providers.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
  91. package/dashboard/.next/server/app/providers.segments/_full.segment.rsc +3 -3
  92. package/dashboard/.next/server/app/providers.segments/_head.segment.rsc +1 -1
  93. package/dashboard/.next/server/app/providers.segments/_index.segment.rsc +2 -2
  94. package/dashboard/.next/server/app/providers.segments/_tree.segment.rsc +2 -2
  95. package/dashboard/.next/server/app/quota.html +1 -1
  96. package/dashboard/.next/server/app/quota.rsc +2 -2
  97. package/dashboard/.next/server/app/quota.segments/!KGNvbnNvbGUp/quota/__PAGE__.segment.rsc +1 -1
  98. package/dashboard/.next/server/app/quota.segments/!KGNvbnNvbGUp/quota.segment.rsc +1 -1
  99. package/dashboard/.next/server/app/quota.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
  100. package/dashboard/.next/server/app/quota.segments/_full.segment.rsc +2 -2
  101. package/dashboard/.next/server/app/quota.segments/_head.segment.rsc +1 -1
  102. package/dashboard/.next/server/app/quota.segments/_index.segment.rsc +2 -2
  103. package/dashboard/.next/server/app/quota.segments/_tree.segment.rsc +2 -2
  104. package/dashboard/.next/server/app/tools.html +1 -1
  105. package/dashboard/.next/server/app/tools.rsc +2 -2
  106. package/dashboard/.next/server/app/tools.segments/!KGNvbnNvbGUp/tools/__PAGE__.segment.rsc +1 -1
  107. package/dashboard/.next/server/app/tools.segments/!KGNvbnNvbGUp/tools.segment.rsc +1 -1
  108. package/dashboard/.next/server/app/tools.segments/!KGNvbnNvbGUp.segment.rsc +1 -1
  109. package/dashboard/.next/server/app/tools.segments/_full.segment.rsc +2 -2
  110. package/dashboard/.next/server/app/tools.segments/_head.segment.rsc +1 -1
  111. package/dashboard/.next/server/app/tools.segments/_index.segment.rsc +2 -2
  112. package/dashboard/.next/server/app/tools.segments/_tree.segment.rsc +2 -2
  113. package/dashboard/.next/server/chunks/[root-of-the-server]__043un18._.js +1 -1
  114. package/dashboard/.next/server/chunks/[root-of-the-server]__043un18._.js.map +1 -1
  115. package/dashboard/.next/server/chunks/_0digmky._.js +1 -1
  116. package/dashboard/.next/server/chunks/_0digmky._.js.map +1 -1
  117. package/dashboard/.next/server/chunks/ssr/_1mumvwn._.js +1 -1
  118. package/dashboard/.next/server/chunks/ssr/_1mumvwn._.js.map +1 -1
  119. package/dashboard/.next/server/chunks/ssr/src_components_0nuo5yx._.js +1 -1
  120. package/dashboard/.next/server/chunks/ssr/src_components_0nuo5yx._.js.map +1 -1
  121. package/dashboard/.next/server/chunks/ssr/src_components_EndpointView_tsx_0awdzb5._.js +1 -1
  122. package/dashboard/.next/server/chunks/ssr/src_components_EndpointView_tsx_0awdzb5._.js.map +1 -1
  123. package/dashboard/.next/server/chunks/ssr/src_components_ProviderDetail_tsx_06sxu0r._.js +1 -1
  124. package/dashboard/.next/server/chunks/ssr/src_components_ProviderDetail_tsx_06sxu0r._.js.map +1 -1
  125. package/dashboard/.next/server/chunks/ssr/src_components_ToolDetail_tsx_0qperd-._.js +1 -1
  126. package/dashboard/.next/server/chunks/ssr/src_components_ToolDetail_tsx_0qperd-._.js.map +1 -1
  127. package/dashboard/.next/server/middleware-build-manifest.js +3 -3
  128. package/dashboard/.next/server/pages/404.html +1 -1
  129. package/dashboard/.next/server/pages/500.html +1 -1
  130. package/dashboard/.next/static/chunks/03o9w8fy3awov.css +3 -0
  131. package/dashboard/.next/static/chunks/{0_fo_1xhw25rd.js → 063d_vdu_m-g_.js} +1 -1
  132. package/dashboard/.next/static/chunks/{3i6nr2y3h_7s2.js → 0tq5u12liycmg.js} +1 -1
  133. package/dashboard/.next/static/chunks/{00415cmd3ji2s.js → 16vbdc0g5xea0.js} +1 -1
  134. package/dashboard/.next/static/chunks/{05i93ivai9obr.js → 3mhsmb2ks1vev.js} +1 -1
  135. package/dashboard/.next/trace +1 -1
  136. package/dashboard/.next/trace-build +1 -1
  137. package/dashboard/src/components/EndpointView.tsx +13 -7
  138. package/dashboard/src/components/ProviderDetail.tsx +1 -1
  139. package/dashboard/src/components/ProviderManager.tsx +1 -1
  140. package/dashboard/src/components/ToolDetail.tsx +160 -20
  141. package/dashboard/src/lib/session.ts +6 -1
  142. package/dist/cli.js +1 -1
  143. package/dist/cli.js.map +1 -1
  144. package/package.json +1 -1
  145. package/src/cli.ts +1 -1
  146. package/dashboard/.next/static/chunks/2284qz1hy9776.css +0 -3
  147. /package/dashboard/.next/static/{kpgVHg6Rdnh2YUO8-xGjX → BHVoneq9_CCAAPwET7GfO}/_buildManifest.js +0 -0
  148. /package/dashboard/.next/static/{kpgVHg6Rdnh2YUO8-xGjX → BHVoneq9_CCAAPwET7GfO}/_clientMiddlewareManifest.js +0 -0
  149. /package/dashboard/.next/static/{kpgVHg6Rdnh2YUO8-xGjX → BHVoneq9_CCAAPwET7GfO}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ToolDetail.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport { RichCard, CardTitle } from \"@/components/RichCard\";\nimport { Badge } from \"@/components/Badge\";\nimport { Button, Select } from \"@/components/Button\";\nimport { ModelPicker, type ModelGroup } from \"@/components/ModelPicker\";\nimport { Icon } from \"@/components/Icon\";\nimport { Empty } from \"@/components/ui\";\nimport { adminApi, cliConfig, type CliStatus } from \"@/lib/client\";\nimport { toolById } from \"@/lib/cliTools\";\nimport { modalitiesForModel } from \"@/lib/capabilities\";\nimport type { EndpointPayload, MaskedConfig } from \"@/lib/gateway\";\n\n/** Step-by-step setup for one CLI tool, with copy-ready env (real key inlined). */\nexport function ToolDetail({ id }: { id: string }) {\n const router = useRouter();\n const tool = toolById(id);\n const [ep, setEp] = useState<EndpointPayload | null>(null);\n const [combos, setCombos] = useState<string[]>([]);\n const [keyIdx, setKeyIdx] = useState(0);\n const [realKey, setRealKey] = useState(\"\");\n const [error, setError] = useState(\"\");\n const [cli, setCli] = useState<CliStatus | null>(null);\n const [cliBusy, setCliBusy] = useState<\"\" | \"apply\" | \"reset\">(\"\");\n const [cliMsg, setCliMsg] = useState(\"\");\n const [allModels, setAllModels] = useState<string[]>([]);\n const [groups, setGroups] = useState<ModelGroup[]>([]);\n const [pickerOpen, setPickerOpen] = useState(false);\n const [picked, setPicked] = useState<string[]>([]); // openai tools: chosen models\n const [active, setActive] = useState(\"\"); // openai tools: default/active model\n const [slots, setSlots] = useState({ opus: \"\", sonnet: \"\", haiku: \"\" }); // claude\n const isAnthropic = tool?.format === \"anthropic\";\n\n function togglePicked(v: string) {\n if (picked.includes(v)) {\n setPicked((p) => p.filter((x) => x !== v));\n if (active === v) setActive(\"\");\n } else {\n setPicked((p) => [...p, v]);\n if (!active) setActive(v);\n }\n }\n\n const loadCli = useCallback(async () => {\n if (!tool?.autoConfig) return;\n const r = await cliConfig.status(tool.id);\n setCli(r.data);\n }, [tool]);\n useEffect(() => { void loadCli(); }, [loadCli]);\n\n // seed the editable selection from whatever is already in the tool's config.\n useEffect(() => {\n if (!cli?.installed) return;\n if (isAnthropic && cli.modelSlots) {\n setSlots({ opus: cli.modelSlots.opus ?? \"\", sonnet: cli.modelSlots.sonnet ?? \"\", haiku: cli.modelSlots.haiku ?? \"\" });\n } else if (!isAnthropic && cli.models && cli.models.length > 0) {\n setPicked(cli.models);\n setActive(cli.activeModel ?? cli.models[0] ?? \"\");\n }\n }, [cli, isAnthropic]);\n\n async function applyCli() {\n if (!tool || !ep) return;\n setCliMsg(\"\");\n const baseUrl = `http://127.0.0.1:${ep.port}`; // gateway root; opencode route appends /v1\n const key = ep.keys.length ? realKey || undefined : undefined;\n if (isAnthropic) {\n const m: Record<string, string> = {};\n if (slots.opus) m.opus = slots.opus;\n if (slots.sonnet) m.sonnet = slots.sonnet;\n if (slots.haiku) m.haiku = slots.haiku;\n setCliBusy(\"apply\");\n const r = await cliConfig.apply(tool.id, { base: baseUrl, key, models: m });\n setCliBusy(\"\");\n setCliMsg(r.ok ? \"Wrote config ✓\" : r.error ?? \"failed\");\n if (r.ok) void loadCli();\n return;\n }\n if (picked.length === 0) { setCliMsg(\"add at least one model\"); return; }\n setCliBusy(\"apply\");\n const r = await cliConfig.apply(tool.id, { base: baseUrl, key, models: picked, active });\n setCliBusy(\"\");\n setCliMsg(r.ok ? \"Wrote config ✓\" : r.error ?? \"failed\");\n if (r.ok) void loadCli();\n }\n\n async function resetCli() {\n if (!tool) return;\n setCliBusy(\"reset\");\n setCliMsg(\"\");\n const r = await cliConfig.reset(tool.id);\n setCliBusy(\"\");\n if (r.ok) { setCliMsg(\"Removed gateway config ✓\"); void loadCli(); }\n else setCliMsg(r.error ?? \"failed\");\n }\n\n useEffect(() => {\n void (async () => {\n const [epRes, cfgRes] = await Promise.all([\n fetch(\"/api/gw/admin/endpoint\"),\n fetch(\"/api/gw/admin/config\"),\n ]);\n if (!epRes.ok) {\n setError(\"could not reach the gateway\");\n return;\n }\n setEp((await epRes.json()) as EndpointPayload);\n if (cfgRes.ok) {\n const cfg = (await cfgRes.json()) as MaskedConfig;\n const aliases = cfg.models.map((m) => m.alias);\n setCombos(aliases);\n // disabled providers are skipped in routing, so hide their models here.\n const liveProviders = cfg.providers.filter((p) => !p.disabled);\n // everything callable: combo aliases + every (enabled) provider/model ref.\n const refs = liveProviders.flatMap((p) => p.models.map((m) => `${p.id}/${m.id}`));\n setAllModels([...aliases, ...refs]);\n // grouped for the picker: Combos first, then one group per provider.\n const grps: ModelGroup[] = [];\n if (aliases.length) grps.push({ label: \"Combos\", items: aliases.map((a) => ({ value: a, label: a })) });\n for (const p of liveProviders) {\n if (p.models.length) grps.push({ label: p.id, items: p.models.map((m) => ({ value: `${p.id}/${m.id}`, label: `${p.id}/${m.id}` })) });\n }\n setGroups(grps);\n }\n })();\n }, []);\n\n // reveal the selected gateway key so the env block is copy-ready (the whole\n // point of this page is to paste a working config locally).\n useEffect(() => {\n if (!ep || ep.keys.length === 0) return;\n void adminApi.revealServerKey(keyIdx).then((r) => setRealKey(r.ok ? r.data?.key ?? \"\" : \"\"));\n }, [ep, keyIdx]);\n\n if (!tool) return <Empty>Unknown tool.</Empty>;\n if (error) return <Empty>{error}</Empty>;\n if (!ep) return <Empty>Loading…</Empty>;\n\n const base = `http://127.0.0.1:${ep.port}`;\n const env = tool.env(base, realKey);\n const block = env.map((e) => `export ${e.name}=\"${e.value}\"`).join(\"\\n\");\n\n // opencode reads models from ~/.config/opencode/opencode.json, not shell env.\n // Show the exact JSON the auto-apply would MERGE — so the models are visible and\n // it's clear nothing else gets replaced (other providers + your other keys stay).\n const ocModels = picked.length ? picked : cli?.models ?? [];\n const opencodeJson =\n tool.id === \"opencode\"\n ? JSON.stringify(\n {\n provider: {\n aigetwey: {\n npm: \"@ai-sdk/openai-compatible\",\n options: { baseURL: `${base}/v1`, apiKey: realKey || \"aigetwey\" },\n models: Object.fromEntries(ocModels.map((m) => [m, { name: m, modalities: modalitiesForModel(m) }])),\n },\n },\n model: `aigetwey/${active || ocModels[0] || \"\"}`,\n },\n null,\n 2,\n )\n : null;\n\n // Claude Code reads its config from ~/.claude/settings.json — show the exact\n // env block the auto-apply writes (merged into the existing settings).\n const claudeJson =\n tool.id === \"claude-code\"\n ? JSON.stringify(\n {\n hasCompletedOnboarding: true,\n env: {\n ANTHROPIC_BASE_URL: base,\n API_TIMEOUT_MS: \"600000\",\n ...(realKey ? { ANTHROPIC_AUTH_TOKEN: realKey } : {}),\n ...(slots.opus ? { ANTHROPIC_DEFAULT_OPUS_MODEL: slots.opus } : {}),\n ...(slots.sonnet ? { ANTHROPIC_DEFAULT_SONNET_MODEL: slots.sonnet } : {}),\n ...(slots.haiku ? { ANTHROPIC_DEFAULT_HAIKU_MODEL: slots.haiku } : {}),\n },\n },\n null,\n 2,\n )\n : null;\n\n return (\n <div>\n <button onClick={() => router.push(\"/tools\")} className=\"mb-4 inline-flex items-center gap-1 text-[12px] text-text-muted hover:text-text\">\n <Icon name=\"arrow_back\" size={15} /> CLI Tools\n </button>\n\n <div className=\"mb-6 flex items-center gap-3\">\n <span className=\"flex h-9 w-9 items-center justify-center rounded-brand bg-surface-2 text-text-muted\">\n <Icon name={tool.icon} size={20} />\n </span>\n <h1 className=\"text-[22px] font-semibold tracking-tight text-text\">{tool.name}</h1>\n <Badge tone=\"info\">{tool.format}</Badge>\n </div>\n\n <div className=\"grid gap-4 lg:grid-cols-2\">\n {tool.autoConfig && (\n <RichCard\n className=\"lg:col-span-2\"\n header={\n <>\n <CardTitle title=\"Local setup\" sub=\"detect this tool on your machine and write its config for you\" />\n {cli && (\n <Badge tone={!cli.installed ? \"neutral\" : cli.configured ? \"live\" : \"warn\"}>\n {!cli.installed ? \"not detected\" : cli.configured ? \"configured\" : \"detected\"}\n </Badge>\n )}\n </>\n }\n >\n {!cli ? (\n <p className=\"text-[12.5px] text-text-subtle\">Checking your machine…</p>\n ) : !cli.installed ? (\n <p className=\"text-[12.5px] text-text-muted\">\n Not found on this machine. Install it (above) or paste the manual env below — then re-open this page.\n </p>\n ) : (\n <div className=\"space-y-3\">\n <SetupRow label=\"Endpoint\">\n <span className=\"tnum text-[12.5px] text-text\">{isAnthropic ? base : `${base}/v1`}</span>\n </SetupRow>\n\n {ep.keys.length > 0 && (\n <SetupRow label=\"API Key\">\n <Select value={String(keyIdx)} onChange={(e) => setKeyIdx(Number(e.target.value))} className=\"max-w-[260px]\">\n {ep.keys.map((k, i) => (\n <option key={i} value={i}>{k.name || `key ${i + 1}`}</option>\n ))}\n </Select>\n </SetupRow>\n )}\n\n {isAnthropic ? (\n <SetupRow label=\"Models\" top>\n <div className=\"flex flex-col gap-2\">\n {([\"opus\", \"sonnet\", \"haiku\"] as const).map((slot) => (\n <div key={slot} className=\"flex items-center gap-2\">\n <span className=\"w-16 text-[12px] capitalize text-text-subtle\">{slot}</span>\n <Select value={slots[slot]} onChange={(e) => setSlots((s) => ({ ...s, [slot]: e.target.value }))} className=\"flex-1\">\n <option value=\"\">— none —</option>\n {allModels.map((m) => <option key={m} value={m}>{m}</option>)}\n </Select>\n </div>\n ))}\n </div>\n </SetupRow>\n ) : (\n <SetupRow label=\"Models\" top>\n <div>\n <div className=\"flex min-h-[34px] flex-wrap gap-1.5 rounded-brand border border-border-subtle bg-bg px-2 py-1.5\">\n {picked.length === 0 ? (\n <span className=\"text-[12px] text-text-subtle\">No models — add one below.</span>\n ) : (\n picked.map((m) => (\n <span\n key={m}\n onClick={() => setActive((a) => (a === m ? \"\" : m))}\n title={m === active ? \"active model — click to clear\" : \"click to set active\"}\n className={`inline-flex cursor-pointer items-center gap-1 rounded px-2 py-0.5 text-[12px] transition-colors ${\n m === active ? \"border border-accent bg-accent-soft text-accent\" : \"border border-transparent bg-surface-2 text-text-muted hover:border-border\"\n }`}\n >\n {m === active && <Icon name=\"star\" size={11} />}\n <span className=\"tnum\">{m}</span>\n <button\n onClick={(e) => { e.stopPropagation(); setPicked((p) => p.filter((x) => x !== m)); setActive((a) => (a === m ? \"\" : a)); }}\n className=\"hover:text-danger\"\n aria-label={`Remove ${m}`}\n >\n <Icon name=\"close\" size={12} />\n </button>\n </span>\n ))\n )}\n </div>\n <div className=\"mt-1.5 flex items-center gap-2\">\n <Button type=\"button\" variant=\"ghost\" onClick={() => setPickerOpen(true)}>\n <Icon name=\"add\" size={15} /> Add models\n </Button>\n <span className=\"text-[11.5px] text-text-subtle\">\n {active ? <>active: <span className=\"tnum text-accent\">{active}</span></> : picked.length ? \"click a chip to set active\" : \"\"}\n </span>\n </div>\n </div>\n </SetupRow>\n )}\n\n {cli.configured && cli.baseUrl && (\n <SetupRow label=\"Current\">\n <span className=\"tnum text-[11.5px] text-text-subtle\">{cli.baseUrl}</span>\n </SetupRow>\n )}\n\n <div className=\"flex items-center gap-2 border-t border-border-subtle pt-3\">\n <Button onClick={applyCli} disabled={cliBusy === \"apply\"}>\n <Icon name={cliBusy === \"apply\" ? \"progress_activity\" : \"bolt\"} size={15} />\n {cliBusy === \"apply\" ? \"Applying…\" : cli.configured ? \"Re-apply\" : \"Apply config\"}\n </Button>\n {cli.configured && (\n <Button variant=\"ghost\" onClick={resetCli} disabled={cliBusy === \"reset\"}>\n {cliBusy === \"reset\" ? \"Removing…\" : \"Reset\"}\n </Button>\n )}\n {cliMsg && <span className=\"text-[12px] text-text-subtle\">{cliMsg}</span>}\n {cli.path && <span className=\"ml-auto truncate tnum text-[11px] text-text-subtle\">{cli.path}</span>}\n </div>\n </div>\n )}\n </RichCard>\n )}\n\n {tool.install && (\n <RichCard header={<CardTitle title=\"Install\" />}>\n <CopyBlock text={tool.install} />\n </RichCard>\n )}\n\n <RichCard\n className={tool.install ? \"\" : \"lg:col-span-2\"}\n header={\n <>\n <CardTitle title=\"Environment\" sub=\"copy into your shell\" />\n {ep.keys.length > 1 && (\n <Select value={String(keyIdx)} onChange={(e) => setKeyIdx(Number(e.target.value))} className=\"max-w-[180px]\">\n {ep.keys.map((k, i) => (\n <option key={i} value={i}>{k.name || `key ${i + 1}`}</option>\n ))}\n </Select>\n )}\n </>\n }\n >\n <CopyBlock text={block} />\n {ep.keys.length === 0 ? (\n <p className=\"mt-3 text-[12px] text-warning\">\n No gateway key set — auth is disabled. Add one under Endpoint, then it appears here.\n </p>\n ) : (\n <p className=\"mt-3 text-[12px] text-text-subtle\">\n Using key <span className=\"text-text-muted\">{ep.keys[keyIdx]?.name || `#${keyIdx + 1}`}</span>. The real value is filled in above.\n </p>\n )}\n </RichCard>\n\n {opencodeJson && (\n <RichCard\n className=\"lg:col-span-2\"\n header={<CardTitle title=\"Manual config\" sub=\"merge into ~/.config/opencode/opencode.json — every model listed\" />}\n >\n {ocModels.length === 0 ? (\n <p className=\"text-[12.5px] text-text-muted\">Add models above to see them listed here.</p>\n ) : (\n <CopyBlock text={opencodeJson} />\n )}\n <p className=\"mt-3 text-[12px] text-text-subtle\">\n Apply does the same merge for you — it keeps any other providers and existing models, only adding these.\n </p>\n </RichCard>\n )}\n\n {claudeJson && (\n <RichCard\n className=\"lg:col-span-2\"\n header={<CardTitle title=\"Manual config\" sub=\"merge the env block into ~/.claude/settings.json\" />}\n >\n <CopyBlock text={claudeJson} />\n <p className=\"mt-3 text-[12px] text-text-subtle\">\n Apply does the same merge for you — it keeps the rest of your settings, only writing these env keys.\n </p>\n </RichCard>\n )}\n\n {!tool.autoConfig && (\n <RichCard\n className=\"lg:col-span-2\"\n header={<CardTitle title=\"Models to call\" sub=\"name a combo exactly this — the tool will hit it\" />}\n >\n <div className=\"space-y-1.5\">\n {tool.slots.map((s) => {\n const exists = combos.includes(s.alias);\n return (\n <div key={s.alias} className=\"flex items-center gap-3 rounded-brand border border-border-subtle px-3 py-2\">\n <span className=\"w-32 flex-none text-[12px] text-text-subtle\">{s.label}</span>\n <Icon name=\"arrow_forward\" size={14} className=\"flex-none text-text-subtle\" />\n <span className=\"tnum truncate text-[13px] text-text\">{s.alias}</span>\n <span className=\"ml-auto flex flex-none items-center gap-2\">\n {exists ? (\n <Badge tone=\"live\">ready</Badge>\n ) : (\n <>\n <Badge tone=\"warn\">missing</Badge>\n <button\n type=\"button\"\n onClick={() => router.push(\"/combos\")}\n className=\"inline-flex items-center gap-1 text-[12px] text-accent hover:underline\"\n >\n <Icon name=\"add\" size={13} /> create\n </button>\n </>\n )}\n </span>\n </div>\n );\n })}\n </div>\n {combos.length > 0 && (\n <p className=\"mt-2.5 text-[11px] text-text-subtle\">\n Your combos: <span className=\"tnum text-text-muted\">{combos.join(\", \")}</span>\n </p>\n )}\n </RichCard>\n )}\n\n <RichCard className=\"lg:col-span-2\" header={<CardTitle title=\"Steps\" />}>\n <ol className=\"space-y-2.5\">\n {tool.steps.map((s, i) => (\n <li key={i} className=\"flex gap-2.5 text-[13px] text-text-muted\">\n <span className=\"flex h-5 w-5 flex-none items-center justify-center rounded-full bg-surface-2 tnum text-[11px] text-text\">\n {i + 1}\n </span>\n {s}\n </li>\n ))}\n </ol>\n </RichCard>\n </div>\n\n {pickerOpen && (\n <ModelPicker\n title=\"Add models\"\n note=\"Click a model to add it, click again to remove. Then hit Apply.\"\n groups={groups}\n selected={picked}\n onToggle={togglePicked}\n onClose={() => setPickerOpen(false)}\n />\n )}\n </div>\n );\n}\n\n/** label → control row used by the Local setup card (matches aigetwey's layout). */\nfunction SetupRow({ label, children, top }: { label: string; children: React.ReactNode; top?: boolean }) {\n return (\n <div className={`grid grid-cols-[7rem_1fr] gap-3 ${top ? \"items-start\" : \"items-center\"}`}>\n <span className={`text-[12px] font-medium text-text-subtle ${top ? \"pt-1.5\" : \"\"}`}>{label}</span>\n <div className=\"min-w-0\">{children}</div>\n </div>\n );\n}\n\nfunction CopyBlock({ text }: { text: string }) {\n const [copied, setCopied] = useState(false);\n return (\n <div className=\"relative\">\n <pre className=\"overflow-x-auto rounded-brand border border-border-subtle bg-bg px-3 py-2.5 font-mono text-[12.5px] leading-relaxed text-text\">\n {text}\n </pre>\n <button\n onClick={() => {\n void navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 1200);\n }}\n className=\"absolute right-2 top-2 flex items-center gap-1 rounded-brand border border-border bg-surface px-2 py-1 text-[11px] text-text-muted hover:text-text\"\n >\n <Icon name={copied ? \"check\" : \"content_copy\"} size={13} /> {copied ? \"copied\" : \"copy\"}\n </button>\n </div>\n );\n}\n"],"names":["ToolDetail","id","router","tool","ep","setEp","combos","setCombos","keyIdx","setKeyIdx","realKey","setRealKey","error","setError","cli","setCli","cliBusy","setCliBusy","cliMsg","setCliMsg","allModels","setAllModels","groups","setGroups","pickerOpen","setPickerOpen","picked","setPicked","active","setActive","slots","setSlots","opus","sonnet","haiku","isAnthropic","format","togglePicked","v","includes","p","filter","x","loadCli","autoConfig","r","status","data","installed","modelSlots","models","length","activeModel","applyCli","baseUrl","port","key","keys","undefined","m","apply","base","ok","resetCli","reset","epRes","cfgRes","Promise","all","fetch","json","cfg","aliases","map","alias","liveProviders","providers","disabled","refs","flatMap","grps","push","label","items","a","value","revealServerKey","then","env","block","e","name","join","ocModels","opencodeJson","JSON","stringify","provider","aigetwey","npm","options","baseURL","apiKey","Object","fromEntries","modalities","model","claudeJson","hasCompletedOnboarding","ANTHROPIC_BASE_URL","API_TIMEOUT_MS","ANTHROPIC_AUTH_TOKEN","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL","onClick","className","size","icon","tone","header","title","sub","configured","SetupRow","String","onChange","Number","target","k","i","top","slot","s","stopPropagation","type","variant","path","install","CopyBlock","text","exists","steps","note","selected","onToggle","onClose","children","copied","setCopied","navigator","clipboard","writeText","setTimeout"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/ToolDetail.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport { RichCard, CardTitle } from \"@/components/RichCard\";\nimport { Badge } from \"@/components/Badge\";\nimport { Button, Select } from \"@/components/Button\";\nimport { ModelPicker, type ModelGroup } from \"@/components/ModelPicker\";\nimport { Icon } from \"@/components/Icon\";\nimport { Empty } from \"@/components/ui\";\nimport { adminApi, cliConfig, type CliStatus } from \"@/lib/client\";\nimport { toolById } from \"@/lib/cliTools\";\nimport { modalitiesForModel } from \"@/lib/capabilities\";\nimport type { EndpointPayload, MaskedConfig } from \"@/lib/gateway\";\n\n/** Step-by-step setup for one CLI tool, with copy-ready env (real key inlined). */\nexport function ToolDetail({ id }: { id: string }) {\n const router = useRouter();\n const tool = toolById(id);\n const [ep, setEp] = useState<EndpointPayload | null>(null);\n const [combos, setCombos] = useState<string[]>([]);\n const [keyIdx, setKeyIdx] = useState(0);\n const [realKey, setRealKey] = useState(\"\");\n const [savedBases, setSavedBases] = useState<string[]>([]);\n const [selectedBase, setSelectedBase] = useState(\"\"); // \"\" = auto-detected\n const [customBaseInput, setCustomBaseInput] = useState(\"\");\n const [showCustomBase, setShowCustomBase] = useState(false);\n const [customKey, setCustomKey] = useState(\"\");\n const [showCustomKey, setShowCustomKey] = useState(false);\n const [customKeyInput, setCustomKeyInput] = useState(\"\");\n\n useEffect(() => {\n const bases = JSON.parse(localStorage.getItem(`cli-saved-bases-${id}`) ?? \"[]\") as string[];\n setSavedBases(bases);\n const sel = localStorage.getItem(`cli-selected-base-${id}`) ?? \"\";\n setSelectedBase(sel);\n const key = localStorage.getItem(`cli-custom-key-${id}`) ?? \"\";\n setCustomKey(key);\n }, [id]);\n const [error, setError] = useState(\"\");\n const [cli, setCli] = useState<CliStatus | null>(null);\n const [cliBusy, setCliBusy] = useState<\"\" | \"apply\" | \"reset\">(\"\");\n const [cliMsg, setCliMsg] = useState(\"\");\n const [allModels, setAllModels] = useState<string[]>([]);\n const [groups, setGroups] = useState<ModelGroup[]>([]);\n const [pickerOpen, setPickerOpen] = useState(false);\n const [pickerSlot, setPickerSlot] = useState<\"opus\" | \"sonnet\" | \"haiku\" | null>(null); // which slot the picker targets\n const [picked, setPicked] = useState<string[]>([]); // openai tools: chosen models\n const [active, setActive] = useState(\"\"); // openai tools: default/active model\n const [slots, setSlots] = useState({ opus: \"\", sonnet: \"\", haiku: \"\" }); // claude\n const isAnthropic = tool?.format === \"anthropic\";\n\n function togglePicked(v: string) {\n if (picked.includes(v)) {\n setPicked((p) => p.filter((x) => x !== v));\n if (active === v) setActive(\"\");\n } else {\n setPicked((p) => [...p, v]);\n if (!active) setActive(v);\n }\n }\n\n const loadCli = useCallback(async () => {\n if (!tool?.autoConfig) return;\n const r = await cliConfig.status(tool.id);\n setCli(r.data);\n }, [tool]);\n useEffect(() => { void loadCli(); }, [loadCli]);\n\n // seed the editable selection from whatever is already in the tool's config.\n useEffect(() => {\n if (!cli?.installed) return;\n if (isAnthropic && cli.modelSlots) {\n setSlots({ opus: cli.modelSlots.opus ?? \"\", sonnet: cli.modelSlots.sonnet ?? \"\", haiku: cli.modelSlots.haiku ?? \"\" });\n } else if (!isAnthropic && cli.models && cli.models.length > 0) {\n setPicked(cli.models);\n setActive(cli.activeModel ?? cli.models[0] ?? \"\");\n }\n }, [cli, isAnthropic]);\n\n function addCustomBase(url: string) {\n const trimmed = url.trim();\n if (!trimmed) return;\n const next = [trimmed, ...savedBases.filter((b) => b !== trimmed)];\n setSavedBases(next);\n setSelectedBase(trimmed);\n localStorage.setItem(`cli-saved-bases-${id}`, JSON.stringify(next));\n localStorage.setItem(`cli-selected-base-${id}`, trimmed);\n setCustomBaseInput(\"\");\n setShowCustomBase(false);\n }\n\n async function applyCli() {\n if (!tool || !ep) return;\n setCliMsg(\"\");\n localStorage.setItem(`cli-selected-base-${id}`, selectedBase);\n if (customKey.trim()) localStorage.setItem(`cli-custom-key-${id}`, customKey.trim());\n else localStorage.removeItem(`cli-custom-key-${id}`);\n const autoBase = `http://127.0.0.1:${ep.port}`;\n const baseUrl = selectedBase || autoBase;\n const key = customKey.trim() || (ep.keys.length ? realKey || undefined : undefined);\n if (isAnthropic) {\n const m: Record<string, string> = {};\n if (slots.opus) m.opus = slots.opus;\n if (slots.sonnet) m.sonnet = slots.sonnet;\n if (slots.haiku) m.haiku = slots.haiku;\n setCliBusy(\"apply\");\n const r = await cliConfig.apply(tool.id, { base: baseUrl, key, models: m });\n setCliBusy(\"\");\n setCliMsg(r.ok ? \"Wrote config ✓\" : r.error ?? \"failed\");\n if (r.ok) void loadCli();\n return;\n }\n if (picked.length === 0) { setCliMsg(\"add at least one model\"); return; }\n setCliBusy(\"apply\");\n const r = await cliConfig.apply(tool.id, { base: baseUrl, key, models: picked, active });\n setCliBusy(\"\");\n setCliMsg(r.ok ? \"Wrote config ✓\" : r.error ?? \"failed\");\n if (r.ok) void loadCli();\n }\n\n async function resetCli() {\n if (!tool) return;\n setCliBusy(\"reset\");\n setCliMsg(\"\");\n const r = await cliConfig.reset(tool.id);\n setCliBusy(\"\");\n if (r.ok) { setCliMsg(\"Removed gateway config ✓\"); void loadCli(); }\n else setCliMsg(r.error ?? \"failed\");\n }\n\n useEffect(() => {\n void (async () => {\n const [epRes, cfgRes] = await Promise.all([\n fetch(\"/api/gw/admin/endpoint\"),\n fetch(\"/api/gw/admin/config\"),\n ]);\n if (!epRes.ok) {\n setError(\"could not reach the gateway\");\n return;\n }\n setEp((await epRes.json()) as EndpointPayload);\n if (cfgRes.ok) {\n const cfg = (await cfgRes.json()) as MaskedConfig;\n const aliases = cfg.models.map((m) => m.alias);\n setCombos(aliases);\n // disabled providers are skipped in routing, so hide their models here.\n const liveProviders = cfg.providers.filter((p) => !p.disabled);\n // everything callable: combo aliases + every (enabled) provider/model ref.\n const refs = liveProviders.flatMap((p) => p.models.map((m) => `${p.id}/${m.id}`));\n setAllModels([...aliases, ...refs]);\n // grouped for the picker: Combos first, then one group per provider.\n const grps: ModelGroup[] = [];\n if (aliases.length) grps.push({ label: \"Combos\", items: aliases.map((a) => ({ value: a, label: a })) });\n for (const p of liveProviders) {\n if (p.models.length) grps.push({ label: p.id, items: p.models.map((m) => ({ value: `${p.id}/${m.id}`, label: `${p.id}/${m.id}` })) });\n }\n setGroups(grps);\n }\n })();\n }, []);\n\n // reveal the selected gateway key so the env block is copy-ready (the whole\n // point of this page is to paste a working config locally).\n useEffect(() => {\n if (!ep || ep.keys.length === 0) return;\n void adminApi.revealServerKey(keyIdx).then((r) => setRealKey(r.ok ? r.data?.key ?? \"\" : \"\"));\n }, [ep, keyIdx]);\n\n if (!tool) return <Empty>Unknown tool.</Empty>;\n if (error) return <Empty>{error}</Empty>;\n if (!ep) return <Empty>Loading…</Empty>;\n\n const autoBase = `http://127.0.0.1:${ep.port}`;\n const base = selectedBase || autoBase;\n const effectiveKey = customKey.trim() || realKey;\n const env = tool.env(base, effectiveKey);\n const block = env.map((e) => `export ${e.name}=\"${e.value}\"`).join(\"\\n\");\n\n // opencode reads models from ~/.config/opencode/opencode.json, not shell env.\n // Show the exact JSON the auto-apply would MERGE — so the models are visible and\n // it's clear nothing else gets replaced (other providers + your other keys stay).\n const ocModels = picked.length ? picked : cli?.models ?? [];\n const opencodeJson =\n tool.id === \"opencode\"\n ? JSON.stringify(\n {\n provider: {\n aigetwey: {\n npm: \"@ai-sdk/openai-compatible\",\n options: { baseURL: `${base}/v1`, apiKey: realKey || \"aigetwey\" },\n models: Object.fromEntries(ocModels.map((m) => [m, { name: m, modalities: modalitiesForModel(m) }])),\n },\n },\n model: `aigetwey/${active || ocModels[0] || \"\"}`,\n },\n null,\n 2,\n )\n : null;\n\n // Claude Code reads its config from ~/.claude/settings.json — show the exact\n // env block the auto-apply writes (merged into the existing settings).\n const claudeJson =\n tool.id === \"claude-code\"\n ? JSON.stringify(\n {\n hasCompletedOnboarding: true,\n env: {\n ANTHROPIC_BASE_URL: base,\n API_TIMEOUT_MS: \"600000\",\n ...(realKey ? { ANTHROPIC_AUTH_TOKEN: realKey } : {}),\n ...(slots.opus ? { ANTHROPIC_DEFAULT_OPUS_MODEL: slots.opus } : {}),\n ...(slots.sonnet ? { ANTHROPIC_DEFAULT_SONNET_MODEL: slots.sonnet } : {}),\n ...(slots.haiku ? { ANTHROPIC_DEFAULT_HAIKU_MODEL: slots.haiku } : {}),\n },\n },\n null,\n 2,\n )\n : null;\n\n return (\n <div>\n <button onClick={() => router.push(\"/tools\")} className=\"mb-4 inline-flex items-center gap-1 text-[12px] text-text-muted hover:text-text\">\n <Icon name=\"arrow_back\" size={15} /> CLI Tools\n </button>\n\n <div className=\"mb-6 flex items-center gap-3\">\n <span className=\"flex h-9 w-9 items-center justify-center rounded-brand bg-surface-2 text-text-muted\">\n <Icon name={tool.icon} size={20} />\n </span>\n <h1 className=\"text-[22px] font-semibold tracking-tight text-text\">{tool.name}</h1>\n <Badge tone=\"info\">{tool.format}</Badge>\n </div>\n\n <div className=\"grid gap-4 lg:grid-cols-2\">\n {tool.autoConfig && (\n <RichCard\n className=\"lg:col-span-2\"\n header={\n <>\n <CardTitle title=\"Local setup\" sub=\"detect this tool on your machine and write its config for you\" />\n {cli && (\n <Badge tone={!cli.installed ? \"neutral\" : cli.configured ? \"live\" : \"warn\"}>\n {!cli.installed ? \"not detected\" : cli.configured ? \"configured\" : \"detected\"}\n </Badge>\n )}\n </>\n }\n >\n {!cli ? (\n <p className=\"text-[12.5px] text-text-subtle\">Checking your machine…</p>\n ) : !cli.installed ? (\n <p className=\"text-[12.5px] text-text-muted\">\n Not found on this machine. Install it (above) or paste the manual env below — then re-open this page.\n </p>\n ) : (\n <div className=\"space-y-3\">\n <SetupRow label=\"Endpoint\">\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-center gap-2\">\n <Select\n value={selectedBase || \"__auto__\"}\n onChange={(e) => {\n const v = e.target.value;\n if (v === \"__custom__\") { setShowCustomBase(true); return; }\n const next = v === \"__auto__\" ? \"\" : v;\n setSelectedBase(next);\n localStorage.setItem(`cli-selected-base-${id}`, next);\n }}\n className=\"flex-1\"\n >\n <option value=\"__auto__\">{autoBase} (auto)</option>\n {savedBases.map((b) => <option key={b} value={b}>{b}</option>)}\n <option value=\"__custom__\">Custom URL…</option>\n </Select>\n {selectedBase && (\n <Button variant=\"ghost\" className=\"px-2 py-1 flex-none\" title=\"remove this URL\" onClick={() => {\n const next = savedBases.filter((x) => x !== selectedBase);\n setSavedBases(next);\n localStorage.setItem(`cli-saved-bases-${id}`, JSON.stringify(next));\n setSelectedBase(\"\");\n localStorage.setItem(`cli-selected-base-${id}`, \"\");\n }}><Icon name=\"delete\" size={15} /></Button>\n )}\n </div>\n {showCustomBase && (\n <div className=\"flex items-center gap-2\">\n <input\n autoFocus\n value={customBaseInput}\n onChange={(e) => setCustomBaseInput(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && addCustomBase(customBaseInput)}\n placeholder=\"https://your-gateway.example.com\"\n className=\"flex-1 rounded-brand border border-accent bg-bg px-2.5 py-1.5 font-mono text-[12px] text-text outline-none placeholder:text-text-subtle\"\n />\n <Button variant=\"ghost\" onClick={() => addCustomBase(customBaseInput)}>Add</Button>\n <Button variant=\"ghost\" onClick={() => { setShowCustomBase(false); setCustomBaseInput(\"\"); }}>Cancel</Button>\n </div>\n )}\n </div>\n </SetupRow>\n\n <SetupRow label=\"API Key\">\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-center gap-2\">\n <Select\n value={customKey ? \"__custom__\" : String(keyIdx)}\n onChange={(e) => {\n const v = e.target.value;\n if (v === \"__custom__\") { setShowCustomKey(true); return; }\n setCustomKey(\"\");\n setKeyIdx(Number(v));\n localStorage.removeItem(`cli-custom-key-${id}`);\n }}\n className=\"flex-1\"\n >\n {ep.keys.map((k, i) => <option key={i} value={i}>{k.name || `key ${i + 1}`}</option>)}\n {customKey && <option value=\"__custom__\">{customKey.slice(0, 12)}… (custom)</option>}\n {!customKey && <option value=\"__custom__\">Custom key…</option>}\n </Select>\n {customKey && (\n <Button variant=\"ghost\" className=\"px-2 py-1 flex-none\" title=\"remove custom key\" onClick={() => {\n setCustomKey(\"\");\n localStorage.removeItem(`cli-custom-key-${id}`);\n }}><Icon name=\"delete\" size={15} /></Button>\n )}\n </div>\n {showCustomKey && (\n <div className=\"flex items-center gap-2\">\n <input\n autoFocus\n value={customKeyInput}\n onChange={(e) => setCustomKeyInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n setCustomKey(customKeyInput.trim());\n localStorage.setItem(`cli-custom-key-${id}`, customKeyInput.trim());\n setShowCustomKey(false);\n setCustomKeyInput(\"\");\n }\n }}\n placeholder=\"paste API key…\"\n className=\"flex-1 rounded-brand border border-accent bg-bg px-2.5 py-1.5 font-mono text-[12px] text-text outline-none placeholder:text-text-subtle\"\n />\n <Button variant=\"ghost\" onClick={() => { setCustomKey(customKeyInput.trim()); localStorage.setItem(`cli-custom-key-${id}`, customKeyInput.trim()); setShowCustomKey(false); setCustomKeyInput(\"\"); }}>Add</Button>\n <Button variant=\"ghost\" onClick={() => { setShowCustomKey(false); setCustomKeyInput(\"\"); }}>Cancel</Button>\n </div>\n )}\n </div>\n </SetupRow>\n\n {isAnthropic ? (\n <SetupRow label=\"Models\" top>\n <div className=\"flex flex-col gap-2\">\n {([\"opus\", \"sonnet\", \"haiku\"] as const).map((slot) => (\n <div key={slot} className=\"flex items-center gap-2\">\n <span className=\"w-16 flex-none text-[12px] capitalize text-text-subtle\">{slot}</span>\n {slots[slot] ? (\n <span className=\"flex flex-1 items-center gap-1.5 rounded border border-accent bg-accent-soft px-2 py-1 font-mono text-[12px] text-accent\">\n <span className=\"flex-1 truncate\">{slots[slot]}</span>\n <button onClick={() => setSlots((s) => ({ ...s, [slot]: \"\" }))} className=\"flex-none hover:text-danger\" aria-label=\"clear\">\n <Icon name=\"close\" size={12} />\n </button>\n </span>\n ) : (\n <button\n onClick={() => { setPickerSlot(slot); setPickerOpen(true); }}\n className=\"flex items-center gap-1 rounded border border-dashed border-border px-2.5 py-1 text-[12px] text-text-subtle hover:border-accent hover:text-accent\"\n >\n <Icon name=\"add\" size={13} /> Add model\n </button>\n )}\n </div>\n ))}\n </div>\n </SetupRow>\n ) : (\n <SetupRow label=\"Models\" top>\n <div>\n <div className=\"flex min-h-[34px] flex-wrap gap-1.5 rounded-brand border border-border-subtle bg-bg px-2 py-1.5\">\n {picked.length === 0 ? (\n <span className=\"text-[12px] text-text-subtle\">No models — add one below.</span>\n ) : (\n picked.map((m) => (\n <span\n key={m}\n onClick={() => setActive((a) => (a === m ? \"\" : m))}\n title={m === active ? \"active model — click to clear\" : \"click to set active\"}\n className={`inline-flex cursor-pointer items-center gap-1 rounded px-2 py-0.5 text-[12px] transition-colors ${\n m === active ? \"border border-accent bg-accent-soft text-accent\" : \"border border-transparent bg-surface-2 text-text-muted hover:border-border\"\n }`}\n >\n {m === active && <Icon name=\"star\" size={11} />}\n <span className=\"tnum\">{m}</span>\n <button\n onClick={(e) => { e.stopPropagation(); setPicked((p) => p.filter((x) => x !== m)); setActive((a) => (a === m ? \"\" : a)); }}\n className=\"hover:text-danger\"\n aria-label={`Remove ${m}`}\n >\n <Icon name=\"close\" size={12} />\n </button>\n </span>\n ))\n )}\n </div>\n <div className=\"mt-1.5 flex items-center gap-2\">\n <Button type=\"button\" variant=\"ghost\" onClick={() => setPickerOpen(true)}>\n <Icon name=\"add\" size={15} /> Add models\n </Button>\n <span className=\"text-[11.5px] text-text-subtle\">\n {active ? <>active: <span className=\"tnum text-accent\">{active}</span></> : picked.length ? \"click a chip to set active\" : \"\"}\n </span>\n </div>\n </div>\n </SetupRow>\n )}\n\n {cli.configured && cli.baseUrl && (\n <SetupRow label=\"Current\">\n <span className=\"tnum text-[11.5px] text-text-subtle\">{cli.baseUrl}</span>\n </SetupRow>\n )}\n\n <div className=\"flex items-center gap-2 border-t border-border-subtle pt-3\">\n <Button onClick={applyCli} disabled={cliBusy === \"apply\"}>\n <Icon name={cliBusy === \"apply\" ? \"progress_activity\" : \"bolt\"} size={15} />\n {cliBusy === \"apply\" ? \"Applying…\" : cli.configured ? \"Re-apply\" : \"Apply config\"}\n </Button>\n {cli.configured && (\n <Button variant=\"ghost\" onClick={resetCli} disabled={cliBusy === \"reset\"}>\n {cliBusy === \"reset\" ? \"Removing…\" : \"Reset\"}\n </Button>\n )}\n {cliMsg && <span className=\"text-[12px] text-text-subtle\">{cliMsg}</span>}\n {cli.path && <span className=\"ml-auto truncate tnum text-[11px] text-text-subtle\">{cli.path}</span>}\n </div>\n </div>\n )}\n </RichCard>\n )}\n\n {tool.install && (\n <RichCard header={<CardTitle title=\"Install\" />}>\n <CopyBlock text={tool.install} />\n </RichCard>\n )}\n\n <RichCard\n className={tool.install ? \"\" : \"lg:col-span-2\"}\n header={\n <>\n <CardTitle title=\"Environment\" sub=\"copy into your shell\" />\n {ep.keys.length > 1 && (\n <Select value={String(keyIdx)} onChange={(e) => setKeyIdx(Number(e.target.value))} className=\"max-w-[180px]\">\n {ep.keys.map((k, i) => (\n <option key={i} value={i}>{k.name || `key ${i + 1}`}</option>\n ))}\n </Select>\n )}\n </>\n }\n >\n <CopyBlock text={block} />\n {ep.keys.length === 0 ? (\n <p className=\"mt-3 text-[12px] text-warning\">\n No gateway key set — auth is disabled. Add one under Endpoint, then it appears here.\n </p>\n ) : (\n <p className=\"mt-3 text-[12px] text-text-subtle\">\n Using key <span className=\"text-text-muted\">{ep.keys[keyIdx]?.name || `#${keyIdx + 1}`}</span>. The real value is filled in above.\n </p>\n )}\n </RichCard>\n\n {opencodeJson && (\n <RichCard\n className=\"lg:col-span-2\"\n header={<CardTitle title=\"Manual config\" sub=\"merge into ~/.config/opencode/opencode.json — every model listed\" />}\n >\n {ocModels.length === 0 ? (\n <p className=\"text-[12.5px] text-text-muted\">Add models above to see them listed here.</p>\n ) : (\n <CopyBlock text={opencodeJson} />\n )}\n <p className=\"mt-3 text-[12px] text-text-subtle\">\n Apply does the same merge for you — it keeps any other providers and existing models, only adding these.\n </p>\n </RichCard>\n )}\n\n {claudeJson && (\n <RichCard\n className=\"lg:col-span-2\"\n header={<CardTitle title=\"Manual config\" sub=\"merge the env block into ~/.claude/settings.json\" />}\n >\n <CopyBlock text={claudeJson} />\n <p className=\"mt-3 text-[12px] text-text-subtle\">\n Apply does the same merge for you — it keeps the rest of your settings, only writing these env keys.\n </p>\n </RichCard>\n )}\n\n {!tool.autoConfig && (\n <RichCard\n className=\"lg:col-span-2\"\n header={<CardTitle title=\"Models to call\" sub=\"name a combo exactly this — the tool will hit it\" />}\n >\n <div className=\"space-y-1.5\">\n {tool.slots.map((s) => {\n const exists = combos.includes(s.alias);\n return (\n <div key={s.alias} className=\"flex items-center gap-3 rounded-brand border border-border-subtle px-3 py-2\">\n <span className=\"w-32 flex-none text-[12px] text-text-subtle\">{s.label}</span>\n <Icon name=\"arrow_forward\" size={14} className=\"flex-none text-text-subtle\" />\n <span className=\"tnum truncate text-[13px] text-text\">{s.alias}</span>\n <span className=\"ml-auto flex flex-none items-center gap-2\">\n {exists ? (\n <Badge tone=\"live\">ready</Badge>\n ) : (\n <>\n <Badge tone=\"warn\">missing</Badge>\n <button\n type=\"button\"\n onClick={() => router.push(\"/combos\")}\n className=\"inline-flex items-center gap-1 text-[12px] text-accent hover:underline\"\n >\n <Icon name=\"add\" size={13} /> create\n </button>\n </>\n )}\n </span>\n </div>\n );\n })}\n </div>\n {combos.length > 0 && (\n <p className=\"mt-2.5 text-[11px] text-text-subtle\">\n Your combos: <span className=\"tnum text-text-muted\">{combos.join(\", \")}</span>\n </p>\n )}\n </RichCard>\n )}\n\n <RichCard className=\"lg:col-span-2\" header={<CardTitle title=\"Steps\" />}>\n <ol className=\"space-y-2.5\">\n {tool.steps.map((s, i) => (\n <li key={i} className=\"flex gap-2.5 text-[13px] text-text-muted\">\n <span className=\"flex h-5 w-5 flex-none items-center justify-center rounded-full bg-surface-2 tnum text-[11px] text-text\">\n {i + 1}\n </span>\n {s}\n </li>\n ))}\n </ol>\n </RichCard>\n </div>\n\n {pickerOpen && pickerSlot && (\n <ModelPicker\n title={`Pick model — ${pickerSlot}`}\n note=\"Click a model to select it for this slot.\"\n groups={groups}\n selected={slots[pickerSlot] ? [slots[pickerSlot]] : []}\n onToggle={(v) => {\n setSlots((s) => ({ ...s, [pickerSlot]: s[pickerSlot] === v ? \"\" : v }));\n setPickerOpen(false);\n setPickerSlot(null);\n }}\n onClose={() => { setPickerOpen(false); setPickerSlot(null); }}\n />\n )}\n {pickerOpen && !pickerSlot && (\n <ModelPicker\n title=\"Add models\"\n note=\"Click a model to add it, click again to remove. Then hit Apply.\"\n groups={groups}\n selected={picked}\n onToggle={togglePicked}\n onClose={() => setPickerOpen(false)}\n />\n )}\n </div>\n );\n}\n\n/** label → control row used by the Local setup card (matches aigetwey's layout). */\nfunction SetupRow({ label, children, top }: { label: string; children: React.ReactNode; top?: boolean }) {\n return (\n <div className={`grid grid-cols-[7rem_1fr] gap-3 ${top ? \"items-start\" : \"items-center\"}`}>\n <span className={`text-[12px] font-medium text-text-subtle ${top ? \"pt-1.5\" : \"\"}`}>{label}</span>\n <div className=\"min-w-0\">{children}</div>\n </div>\n );\n}\n\nfunction CopyBlock({ text }: { text: string }) {\n const [copied, setCopied] = useState(false);\n return (\n <div className=\"relative\">\n <pre className=\"overflow-x-auto rounded-brand border border-border-subtle bg-bg px-3 py-2.5 font-mono text-[12.5px] leading-relaxed text-text\">\n {text}\n </pre>\n <button\n onClick={() => {\n void navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 1200);\n }}\n className=\"absolute right-2 top-2 flex items-center gap-1 rounded-brand border border-border bg-surface px-2 py-1 text-[11px] text-text-muted hover:text-text\"\n >\n <Icon name={copied ? \"check\" : \"content_copy\"} size={13} /> {copied ? \"copied\" : \"copy\"}\n </button>\n </div>\n );\n}\n"],"names":["ToolDetail","id","router","tool","ep","setEp","combos","setCombos","keyIdx","setKeyIdx","realKey","setRealKey","savedBases","setSavedBases","selectedBase","setSelectedBase","customBaseInput","setCustomBaseInput","showCustomBase","setShowCustomBase","customKey","setCustomKey","showCustomKey","setShowCustomKey","customKeyInput","setCustomKeyInput","bases","JSON","parse","localStorage","getItem","sel","key","error","setError","cli","setCli","cliBusy","setCliBusy","cliMsg","setCliMsg","allModels","setAllModels","groups","setGroups","pickerOpen","setPickerOpen","pickerSlot","setPickerSlot","picked","setPicked","active","setActive","slots","setSlots","opus","sonnet","haiku","isAnthropic","format","togglePicked","v","includes","p","filter","x","loadCli","autoConfig","r","status","data","installed","modelSlots","models","length","activeModel","addCustomBase","url","trimmed","trim","next","b","setItem","stringify","applyCli","removeItem","autoBase","port","baseUrl","keys","undefined","m","apply","base","ok","resetCli","reset","epRes","cfgRes","Promise","all","fetch","json","cfg","aliases","map","alias","liveProviders","providers","disabled","refs","flatMap","grps","push","label","items","a","value","revealServerKey","then","effectiveKey","env","block","e","name","join","ocModels","opencodeJson","provider","aigetwey","npm","options","baseURL","apiKey","Object","fromEntries","modalities","model","claudeJson","hasCompletedOnboarding","ANTHROPIC_BASE_URL","API_TIMEOUT_MS","ANTHROPIC_AUTH_TOKEN","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL","onClick","className","size","icon","tone","header","title","sub","configured","SetupRow","onChange","target","variant","autoFocus","onKeyDown","placeholder","String","Number","k","i","slice","top","slot","s","stopPropagation","type","path","install","CopyBlock","text","exists","steps","note","selected","onToggle","onClose","children","copied","setCopied","navigator","clipboard","writeText","setTimeout"],"mappings":"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"}
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
7
7
  "static/chunks/0cz1d0mv5g_q7.js"
8
8
  ],
9
9
  "lowPriorityFiles": [
10
- "static/kpgVHg6Rdnh2YUO8-xGjX/_buildManifest.js",
11
- "static/kpgVHg6Rdnh2YUO8-xGjX/_ssgManifest.js",
12
- "static/kpgVHg6Rdnh2YUO8-xGjX/_clientMiddlewareManifest.js"
10
+ "static/BHVoneq9_CCAAPwET7GfO/_buildManifest.js",
11
+ "static/BHVoneq9_CCAAPwET7GfO/_ssgManifest.js",
12
+ "static/BHVoneq9_CCAAPwET7GfO/_clientMiddlewareManifest.js"
13
13
  ],
14
14
  "rootMainFiles": [
15
15
  "static/chunks/36ssnkm0cjgq6.js",
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="dark inter_c15e96cb-module__0bjUvq__variable jetbrains_mono_7ea1d0f9-module__6GV5LG__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/2284qz1hy9776.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/36ssnkm0cjgq6.js"/><script src="/_next/static/chunks/3jat3x6f_2a6o.js" async=""></script><script src="/_next/static/chunks/3j9pm5otqxm82.js" async=""></script><script src="/_next/static/chunks/0mk1g55o6kl1e.js" async=""></script><script src="/_next/static/chunks/27jktro2p5rq9.js" async=""></script><script src="/_next/static/chunks/turbopack-28-wpvvyttgwq.js" async=""></script><script src="/_next/static/chunks/13ge_ybuj8rl3.js" async=""></script><script src="/_next/static/chunks/14mrh2-p_w84d.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0&amp;display=block" as="style"/><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>aigetwey</title><meta name="description" content="Console for the aigetwey AI gateway"/><link rel="icon" href="/icon.svg?icon.43yv9zw_mes0x.svg" sizes="any" type="image/svg+xml"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0&amp;display=block"/><script>(self.__next_s=self.__next_s||[]).push([0,{"children":"try{var t=localStorage.getItem(\"theme\");if(t===\"light\")document.documentElement.className=document.documentElement.className.replace(\"dark\",\"light\")}catch(e){}","id":"theme-init"}])</script><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><div class="fixed bottom-5 right-5 z-[100] flex flex-col gap-2"></div><script src="/_next/static/chunks/36ssnkm0cjgq6.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[79520,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"\"]\n3:I[59919,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"ThemeProvider\"]\n4:I[76972,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"ToastProvider\"]\n5:I[39756,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n7:I[97367,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\nb:I[97367,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"ViewportBoundary\"]\nd:I[97367,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"MetadataBoundary\"]\nf:I[68027,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/2284qz1hy9776.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\u0026display=block\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/2284qz1hy9776.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/14mrh2-p_w84d.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark inter_c15e96cb-module__0bjUvq__variable jetbrains_mono_7ea1d0f9-module__6GV5LG__variable\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"stylesheet\",\"href\":\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\u0026display=block\"}],[\"$\",\"$L2\",null,{\"id\":\"theme-init\",\"strategy\":\"beforeInteractive\",\"children\":\"try{var t=localStorage.getItem(\\\"theme\\\");if(t===\\\"light\\\")document.documentElement.className=document.documentElement.className.replace(\\\"dark\\\",\\\"light\\\")}catch(e){}\"}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],{},null,false,null]},null,false,\"$@a\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/2284qz1hy9776.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"kpgVHg6Rdnh2YUO8-xGjX\"}\n"])</script><script>self.__next_f.push([1,"10:[]\na:\"$W10\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"11:I[27201,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"IconMark\"]\n9:null\ne:[[\"$\",\"title\",\"0\",{\"children\":\"aigetwey\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Console for the aigetwey AI gateway\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/icon.svg?icon.43yv9zw_mes0x.svg\",\"sizes\":\"any\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L11\",\"3\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="dark inter_c15e96cb-module__0bjUvq__variable jetbrains_mono_7ea1d0f9-module__6GV5LG__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/03o9w8fy3awov.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/36ssnkm0cjgq6.js"/><script src="/_next/static/chunks/3jat3x6f_2a6o.js" async=""></script><script src="/_next/static/chunks/3j9pm5otqxm82.js" async=""></script><script src="/_next/static/chunks/0mk1g55o6kl1e.js" async=""></script><script src="/_next/static/chunks/27jktro2p5rq9.js" async=""></script><script src="/_next/static/chunks/turbopack-28-wpvvyttgwq.js" async=""></script><script src="/_next/static/chunks/13ge_ybuj8rl3.js" async=""></script><script src="/_next/static/chunks/14mrh2-p_w84d.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0&amp;display=block" as="style"/><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>aigetwey</title><meta name="description" content="Console for the aigetwey AI gateway"/><link rel="icon" href="/icon.svg?icon.43yv9zw_mes0x.svg" sizes="any" type="image/svg+xml"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0&amp;display=block"/><script>(self.__next_s=self.__next_s||[]).push([0,{"children":"try{var t=localStorage.getItem(\"theme\");if(t===\"light\")document.documentElement.className=document.documentElement.className.replace(\"dark\",\"light\")}catch(e){}","id":"theme-init"}])</script><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><div class="fixed bottom-5 right-5 z-[100] flex flex-col gap-2"></div><script src="/_next/static/chunks/36ssnkm0cjgq6.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[79520,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"\"]\n3:I[59919,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"ThemeProvider\"]\n4:I[76972,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"ToastProvider\"]\n5:I[39756,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n7:I[97367,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\nb:I[97367,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"ViewportBoundary\"]\nd:I[97367,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"MetadataBoundary\"]\nf:I[68027,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/03o9w8fy3awov.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\u0026display=block\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/03o9w8fy3awov.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/14mrh2-p_w84d.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark inter_c15e96cb-module__0bjUvq__variable jetbrains_mono_7ea1d0f9-module__6GV5LG__variable\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"stylesheet\",\"href\":\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\u0026display=block\"}],[\"$\",\"$L2\",null,{\"id\":\"theme-init\",\"strategy\":\"beforeInteractive\",\"children\":\"try{var t=localStorage.getItem(\\\"theme\\\");if(t===\\\"light\\\")document.documentElement.className=document.documentElement.className.replace(\\\"dark\\\",\\\"light\\\")}catch(e){}\"}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],{},null,false,null]},null,false,\"$@a\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/03o9w8fy3awov.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"BHVoneq9_CCAAPwET7GfO\"}\n"])</script><script>self.__next_f.push([1,"10:[]\na:\"$W10\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"11:I[27201,[\"/_next/static/chunks/13ge_ybuj8rl3.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"IconMark\"]\n9:null\ne:[[\"$\",\"title\",\"0\",{\"children\":\"aigetwey\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Console for the aigetwey AI gateway\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/icon.svg?icon.43yv9zw_mes0x.svg\",\"sizes\":\"any\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L11\",\"3\",{}]]\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/36ssnkm0cjgq6.js"/><script src="/_next/static/chunks/3jat3x6f_2a6o.js" async=""></script><script src="/_next/static/chunks/3j9pm5otqxm82.js" async=""></script><script src="/_next/static/chunks/0mk1g55o6kl1e.js" async=""></script><script src="/_next/static/chunks/27jktro2p5rq9.js" async=""></script><script src="/_next/static/chunks/turbopack-28-wpvvyttgwq.js" async=""></script><script src="/_next/static/chunks/05-c3ty_6dwfk.js" async=""></script><script src="/_next/static/chunks/14mrh2-p_w84d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/36ssnkm0cjgq6.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"kpgVHg6Rdnh2YUO8-xGjX\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/36ssnkm0cjgq6.js"/><script src="/_next/static/chunks/3jat3x6f_2a6o.js" async=""></script><script src="/_next/static/chunks/3j9pm5otqxm82.js" async=""></script><script src="/_next/static/chunks/0mk1g55o6kl1e.js" async=""></script><script src="/_next/static/chunks/27jktro2p5rq9.js" async=""></script><script src="/_next/static/chunks/turbopack-28-wpvvyttgwq.js" async=""></script><script src="/_next/static/chunks/05-c3ty_6dwfk.js" async=""></script><script src="/_next/static/chunks/14mrh2-p_w84d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/36ssnkm0cjgq6.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"BHVoneq9_CCAAPwET7GfO\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
@@ -0,0 +1,3 @@
1
+ @font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2c55a0e60120577a-s.0-dom-5bn10r2.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/9c72aa0f40e4eef8-s.1y4-pdgsjb-pw.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/ad66f9afd8947f86-s.3lvt2whj97whp.woff2)format("woff2");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/5476f68d60460930-s.2uwcyprjm3xu3.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2bbe8d2671613f1f-s.0k62hbripvv8p.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/1bffadaabf893a1e-s.3-6t-g6q0vh0a.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Fallback;src:local(Arial);ascent-override:90.44%;descent-override:22.52%;line-gap-override:0.0%;size-adjust:107.12%}.inter_c15e96cb-module__0bjUvq__className{font-family:Inter,Inter Fallback;font-style:normal}.inter_c15e96cb-module__0bjUvq__variable{--font-inter:"Inter", "Inter Fallback"}
2
+ @font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/13bf9871fe164e7f-s.2f7nqdagzwx2-.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/cc545e633e20c56d-s.176arc174-8zp.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/71b036adf157cdcf-s.0bp8oijd_gu96.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/89b21bb081cb7469-s.1fby2rem9ngyr.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/3fe682a82f50d426-s.0vfdmo25voy_0.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/70bc3e132a0a741e-s.p.3t6q91iet4nsy.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}.jetbrains_mono_7ea1d0f9-module__6GV5LG__className{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.jetbrains_mono_7ea1d0f9-module__6GV5LG__variable{--font-jetbrains-mono:"JetBrains Mono", "JetBrains Mono Fallback"}
3
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:var(--font-inter), -apple-system, BlinkMacSystemFont, "SF Pro Text", system-ui, sans-serif;--font-mono:var(--font-jetbrains-mono), ui-monospace, "SF Mono", Menlo, monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wider:.05em;--leading-relaxed:1.625;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg:#0f0f0e;--color-bg-alt:#141413;--color-surface:#1a1a18;--color-surface-2:#222220;--color-surface-3:#2c2c29;--color-sidebar:#131312;--color-border:#2a2a27;--color-border-subtle:#1f1f1d;--color-text:#ededec;--color-text-muted:#8d8d86;--color-text-subtle:#5c5c56;--color-accent:#cbe85a;--color-accent-hover:#d6f06a;--color-accent-ink:#14140f;--color-accent-soft:#3a3f1c;--color-success:#7dd87f;--color-warning:#e8c55a;--color-danger:#e8806a;--color-info:#7fb0e8;--radius-brand:12px;--radius-brand-lg:16px;--shadow-soft:0 1px 2px 0 #0006;--shadow-warm:0 4px 16px -4px #cbe85a2e}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.top-0\.5{top:calc(var(--spacing) * .5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.right-2{right:calc(var(--spacing) * 2)}.right-5{right:calc(var(--spacing) * 5)}.bottom-5{bottom:calc(var(--spacing) * 5)}.left-0\.5{left:calc(var(--spacing) * .5)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.z-50{z-index:50}.z-\[100\]{z-index:100}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-1{margin-right:var(--spacing)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-\[18px\]{height:18px}.h-\[55vh\]{height:55vh}.h-\[200px\]{height:200px}.h-\[calc\(100vh-200px\)\]{height:calc(100vh - 200px)}.h-full{height:100%}.max-h-\[80vh\]{max-height:80vh}.max-h-\[360px\]{max-height:360px}.min-h-\[34px\]{min-height:34px}.min-h-screen{min-height:100vh}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-\[18px\]{width:18px}.w-full{width:100%}.max-w-\[180px\]{max-width:180px}.max-w-\[280px\]{max-width:280px}.max-w-\[360px\]{max-width:360px}.max-w-\[480px\]{max-width:480px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-\[720px\]{min-width:720px}.flex-1{flex:1}.flex-none{flex:none}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.translate-x-0{--tw-translate-x:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\[14px\]{--tw-translate-x:14px;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\[18px\]{--tw-translate-x:18px;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-\[slideIn_0\.2s_ease\]{animation:.2s slideIn}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[7rem_1fr\]{grid-template-columns:7rem 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block:0}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-7>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 7) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 7) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-8{column-gap:calc(var(--spacing) * 8)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border-subtle>:not(:last-child)){border-color:var(--color-border-subtle)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[5px\]{border-radius:5px}.rounded-brand{border-radius:var(--radius-brand)}.rounded-brand-lg{border-radius:var(--radius-brand-lg)}.rounded-full{border-radius:3.40282e38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-accent{border-color:var(--color-accent)}.border-accent\/40{border-color:#cbe85a66}@supports (color:color-mix(in lab, red, red)){.border-accent\/40{border-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.border-border{border-color:var(--color-border)}.border-border-subtle{border-color:var(--color-border-subtle)}.border-danger\/30{border-color:#e8806a4d}@supports (color:color-mix(in lab, red, red)){.border-danger\/30{border-color:color-mix(in oklab, var(--color-danger) 30%, transparent)}}.border-danger\/35{border-color:#e8806a59}@supports (color:color-mix(in lab, red, red)){.border-danger\/35{border-color:color-mix(in oklab, var(--color-danger) 35%, transparent)}}.border-danger\/40{border-color:#e8806a66}@supports (color:color-mix(in lab, red, red)){.border-danger\/40{border-color:color-mix(in oklab, var(--color-danger) 40%, transparent)}}.border-info\/30{border-color:#7fb0e84d}@supports (color:color-mix(in lab, red, red)){.border-info\/30{border-color:color-mix(in oklab, var(--color-info) 30%, transparent)}}.border-success\/30{border-color:#7dd87f4d}@supports (color:color-mix(in lab, red, red)){.border-success\/30{border-color:color-mix(in oklab, var(--color-success) 30%, transparent)}}.border-transparent{border-color:#0000}.border-warning\/40{border-color:#e8c55a66}@supports (color:color-mix(in lab, red, red)){.border-warning\/40{border-color:color-mix(in oklab, var(--color-warning) 40%, transparent)}}.bg-\[\#0a0a09\]{background-color:#0a0a09}.bg-accent{background-color:var(--color-accent)}.bg-accent-soft{background-color:var(--color-accent-soft)}.bg-accent-soft\/40{background-color:#3a3f1c66}@supports (color:color-mix(in lab, red, red)){.bg-accent-soft\/40{background-color:color-mix(in oklab, var(--color-accent-soft) 40%, transparent)}}.bg-accent\/12{background-color:#cbe85a1f}@supports (color:color-mix(in lab, red, red)){.bg-accent\/12{background-color:color-mix(in oklab, var(--color-accent) 12%, transparent)}}.bg-accent\/15{background-color:#cbe85a26}@supports (color:color-mix(in lab, red, red)){.bg-accent\/15{background-color:color-mix(in oklab, var(--color-accent) 15%, transparent)}}.bg-bg{background-color:var(--color-bg)}.bg-bg-alt{background-color:var(--color-bg-alt)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab, red, red)){.bg-black\/70{background-color:color-mix(in oklab, var(--color-black) 70%, transparent)}}.bg-border-subtle{background-color:var(--color-border-subtle)}.bg-danger{background-color:var(--color-danger)}.bg-danger\/8{background-color:#e8806a14}@supports (color:color-mix(in lab, red, red)){.bg-danger\/8{background-color:color-mix(in oklab, var(--color-danger) 8%, transparent)}}.bg-danger\/10{background-color:#e8806a1a}@supports (color:color-mix(in lab, red, red)){.bg-danger\/10{background-color:color-mix(in oklab, var(--color-danger) 10%, transparent)}}.bg-danger\/12{background-color:#e8806a1f}@supports (color:color-mix(in lab, red, red)){.bg-danger\/12{background-color:color-mix(in oklab, var(--color-danger) 12%, transparent)}}.bg-info\/10{background-color:#7fb0e81a}@supports (color:color-mix(in lab, red, red)){.bg-info\/10{background-color:color-mix(in oklab, var(--color-info) 10%, transparent)}}.bg-info\/12{background-color:#7fb0e81f}@supports (color:color-mix(in lab, red, red)){.bg-info\/12{background-color:color-mix(in oklab, var(--color-info) 12%, transparent)}}.bg-success\/10{background-color:#7dd87f1a}@supports (color:color-mix(in lab, red, red)){.bg-success\/10{background-color:color-mix(in oklab, var(--color-success) 10%, transparent)}}.bg-success\/12{background-color:#7dd87f1f}@supports (color:color-mix(in lab, red, red)){.bg-success\/12{background-color:color-mix(in oklab, var(--color-success) 12%, transparent)}}.bg-success\/15{background-color:#7dd87f26}@supports (color:color-mix(in lab, red, red)){.bg-success\/15{background-color:color-mix(in oklab, var(--color-success) 15%, transparent)}}.bg-surface{background-color:var(--color-surface)}.bg-surface-2{background-color:var(--color-surface-2)}.bg-surface-2\/40{background-color:#22222066}@supports (color:color-mix(in lab, red, red)){.bg-surface-2\/40{background-color:color-mix(in oklab, var(--color-surface-2) 40%, transparent)}}.bg-surface-2\/60{background-color:#22222099}@supports (color:color-mix(in lab, red, red)){.bg-surface-2\/60{background-color:color-mix(in oklab, var(--color-surface-2) 60%, transparent)}}.bg-surface-3{background-color:var(--color-surface-3)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.bg-warning\/8{background-color:#e8c55a14}@supports (color:color-mix(in lab, red, red)){.bg-warning\/8{background-color:color-mix(in oklab, var(--color-warning) 8%, transparent)}}.bg-warning\/12{background-color:#e8c55a1f}@supports (color:color-mix(in lab, red, red)){.bg-warning\/12{background-color:color-mix(in oklab, var(--color-warning) 12%, transparent)}}.bg-white{background-color:var(--color-white)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-7{padding:calc(var(--spacing) * 7)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-2\.5{padding-bottom:calc(var(--spacing) * 2.5)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-1{padding-left:var(--spacing)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-text-bottom{vertical-align:text-bottom}.font-mono{font-family:var(--font-mono)}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[19px\]{font-size:19px}.text-\[22px\]{font-size:22px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent{color:var(--color-accent)}.text-accent-ink{color:var(--color-accent-ink)}.text-danger{color:var(--color-danger)}.text-info{color:var(--color-info)}.text-success{color:var(--color-success)}.text-text{color:var(--color-text)}.text-text-muted{color:var(--color-text-muted)}.text-text-subtle{color:var(--color-text-subtle)}.text-text-subtle\/70{color:#5c5c56b3}@supports (color:color-mix(in lab, red, red)){.text-text-subtle\/70{color:color-mix(in oklab, var(--color-text-subtle) 70%, transparent)}}.text-transparent{color:#0000}.text-warning{color:var(--color-warning)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow-elevated{--tw-shadow:0 16px 40px -8px var(--tw-shadow-color,#0000008c);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-soft{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0006);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-warm{--tw-shadow:0 4px 16px -4px var(--tw-shadow-color,#cbe85a2e);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *),.group-open\/p\:rotate-180:is(:where(.group\/p):is([open],:popover-open,:open) *){rotate:180deg}@media (hover:hover){.group-hover\:text-accent:is(:where(.group):hover *){color:var(--color-accent)}.group-hover\:text-text:is(:where(.group):hover *){color:var(--color-text)}}.placeholder\:text-text-subtle::placeholder{color:var(--color-text-subtle)}.placeholder\:text-text-subtle\/60::placeholder{color:#5c5c5699}@supports (color:color-mix(in lab, red, red)){.placeholder\:text-text-subtle\/60::placeholder{color:color-mix(in oklab, var(--color-text-subtle) 60%, transparent)}}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:border-accent:hover{border-color:var(--color-accent)}.hover\:border-border:hover{border-color:var(--color-border)}.hover\:border-danger\/50:hover{border-color:#e8806a80}@supports (color:color-mix(in lab, red, red)){.hover\:border-danger\/50:hover{border-color:color-mix(in oklab, var(--color-danger) 50%, transparent)}}.hover\:border-danger\/60:hover{border-color:#e8806a99}@supports (color:color-mix(in lab, red, red)){.hover\:border-danger\/60:hover{border-color:color-mix(in oklab, var(--color-danger) 60%, transparent)}}.hover\:border-text-subtle:hover{border-color:var(--color-text-subtle)}.hover\:bg-accent-hover:hover{background-color:var(--color-accent-hover)}.hover\:bg-accent-soft:hover{background-color:var(--color-accent-soft)}.hover\:bg-bg:hover{background-color:var(--color-bg)}.hover\:bg-surface:hover{background-color:var(--color-surface)}.hover\:bg-surface-2:hover{background-color:var(--color-surface-2)}.hover\:bg-surface-2\/40:hover{background-color:#22222066}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-2\/40:hover{background-color:color-mix(in oklab, var(--color-surface-2) 40%, transparent)}}.hover\:text-accent:hover{color:var(--color-accent)}.hover\:text-danger:hover{color:var(--color-danger)}.hover\:text-text:hover{color:var(--color-text)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:border-accent:focus{border-color:var(--color-accent)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-45:disabled{opacity:.45}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}@media (hover:hover){.disabled\:hover\:border-border:disabled:hover{border-color:var(--color-border)}.disabled\:hover\:text-text-muted:disabled:hover{color:var(--color-text-muted)}}@media (min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:p-10{padding:calc(var(--spacing) * 10)}}@media (min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}}*{box-sizing:border-box}html.light{--color-bg:#fafaf9;--color-bg-alt:#f5f5f3;--color-surface:#fff;--color-surface-2:#f0f0ee;--color-surface-3:#e8e8e5;--color-sidebar:#f7f7f6;--color-border:#e0e0dc;--color-border-subtle:#eaeae7;--color-text:#1a1a18;--color-text-muted:#6b6b65;--color-text-subtle:#9b9b94;--color-accent:#6b8f20;--color-accent-hover:#7ba025;--color-accent-ink:#fff;--color-accent-soft:#eef5d8;--shadow-soft:0 1px 3px 0 #00000014;--shadow-warm:0 4px 16px -4px #6b8f201f;--shadow-elevated:0 16px 40px -8px #0000001f}html,body{background:var(--color-bg);color:var(--color-text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;padding:0}.material-symbols-outlined{font-variation-settings:"FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24;-webkit-user-select:none;user-select:none;font-size:20px;line-height:1}.tnum{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:6px}.dark select option{background-color:var(--color-surface);color:var(--color-text)}html.light select option{color:#1a1a18;background-color:#fff}html.light .rail-icon-active{color:#fff;background:#1a1a18}html.light .rail-icon-active:hover{color:#fff;background:#333330}.lamp{border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.lamp-live{background:var(--color-success);box-shadow:0 0 6px 1px #7dd87f99}@supports (color:color-mix(in lab, red, red)){.lamp-live{box-shadow:0 0 6px 1px color-mix(in srgb, var(--color-success) 60%, transparent)}}.lamp-idle{background:var(--color-text-subtle)}.lamp-down{background:var(--color-danger);box-shadow:0 0 6px 1px #e8806a99}@supports (color:color-mix(in lab, red, red)){.lamp-down{box-shadow:0 0 6px 1px color-mix(in srgb, var(--color-danger) 60%, transparent)}}.lamp-down{animation:1.4s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.5}}@media (prefers-reduced-motion:reduce){.lamp-down{animation:none}}.console-grid{min-height:100vh;padding-left:108px}.console-rail{z-index:30;background:var(--color-sidebar);border:1px solid var(--color-border-subtle);width:76px;box-shadow:var(--shadow-soft);border-radius:24px;flex-direction:column;align-items:center;gap:1rem;padding:1.25rem 0;display:flex;position:fixed;top:50%;left:32px;transform:translateY(-50%)}.rail-divider{background:var(--color-border);flex:none;width:26px;height:1px;margin:.2rem 0 .4rem}.console-col{flex-direction:column;min-width:0;display:flex}.console-topbar{z-index:20;background:var(--color-bg);align-items:center;gap:1rem;height:56px;padding:0 1.5rem;display:flex;position:sticky;top:0}.console-main{width:100%;min-width:0;max-width:1600px;margin:0 auto;padding:2rem 3rem 4rem}.rail-icon{background:var(--color-surface);width:42px;height:42px;color:var(--color-text-subtle);border-radius:50%;justify-content:center;align-items:center;transition:color .15s,background .15s;display:flex;position:relative}.rail-icon:hover{color:var(--color-text);background:var(--color-surface-3)}.rail-icon-active{color:var(--color-bg);background:var(--color-text)}.rail-icon-active:hover{color:var(--color-bg);background:#fff}.rail-brand{background:var(--color-accent);width:42px;height:42px;color:var(--color-accent-ink);box-shadow:var(--shadow-warm);border-radius:13px;flex:none;justify-content:center;align-items:center;font-size:17px;font-weight:700;display:flex}.rail-icon[data-label]:after{content:attr(data-label);white-space:nowrap;background:var(--color-surface-3);color:var(--color-text);opacity:0;pointer-events:none;z-index:40;box-shadow:var(--shadow-soft);border-radius:7px;padding:4px 9px;font-size:12px;transition:opacity .12s;position:absolute;top:50%;left:calc(100% + 12px);transform:translateY(-50%)}.rail-icon:hover[data-label]:after{opacity:1}.kpi{background:var(--color-surface);border:1px solid var(--color-border);white-space:nowrap;border-radius:999px;align-items:center;gap:7px;padding:5px 11px;font-size:12px;display:flex}.kpi-k{color:var(--color-text-subtle)}.kpi-v{color:var(--color-text);font-family:var(--font-mono);font-variant-numeric:tabular-nums}@media (max-width:760px){.console-grid{grid-template-columns:72px 1fr}.console-main{padding:1.25rem 1.1rem 3rem}.console-topbar{padding:0 1rem}}.table-wrap{overflow-x:auto}button:not(:disabled),[role=button]:not([aria-disabled=true]){cursor:pointer}label:has(>input[type=checkbox]:not(:disabled)){cursor:pointer}button:disabled{cursor:not-allowed}::selection{background:#cbe85a4d}@supports (color:color-mix(in lab, red, red)){::selection{background:color-mix(in srgb, var(--color-accent) 30%, transparent)}}@keyframes slideIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}input[type=range].range-accent{appearance:none;background:var(--color-surface-2);border-radius:9999px;outline:none;height:6px}input[type=range].range-accent::-webkit-slider-thumb{appearance:none;background:var(--color-accent);border:2px solid var(--color-surface);width:16px;height:16px;box-shadow:0 0 0 1px var(--color-accent), 0 0 8px #cbe85a8c;border-radius:9999px}@supports (color:color-mix(in lab, red, red)){input[type=range].range-accent::-webkit-slider-thumb{box-shadow:0 0 0 1px var(--color-accent), 0 0 8px color-mix(in srgb, var(--color-accent) 55%, transparent)}}input[type=range].range-accent::-webkit-slider-thumb{cursor:pointer;transition:box-shadow .15s}input[type=range].range-accent:hover::-webkit-slider-thumb{box-shadow:0 0 0 1px var(--color-accent), 0 0 12px #cbe85ad9}@supports (color:color-mix(in lab, red, red)){input[type=range].range-accent:hover::-webkit-slider-thumb{box-shadow:0 0 0 1px var(--color-accent), 0 0 12px color-mix(in srgb, var(--color-accent) 85%, transparent)}}input[type=range].range-accent:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 1px var(--color-accent), 0 0 12px #cbe85ad9}@supports (color:color-mix(in lab, red, red)){input[type=range].range-accent:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 1px var(--color-accent), 0 0 12px color-mix(in srgb, var(--color-accent) 85%, transparent)}}input[type=range].range-accent::-moz-range-track{background:var(--color-surface-2);border-radius:9999px;height:6px}input[type=range].range-accent::-moz-range-progress{background:var(--color-accent);border-radius:9999px;height:6px}input[type=range].range-accent::-moz-range-thumb{border:2px solid var(--color-surface);background:var(--color-accent);width:16px;height:16px;box-shadow:0 0 0 1px var(--color-accent), 0 0 8px #cbe85a8c;border-radius:9999px}@supports (color:color-mix(in lab, red, red)){input[type=range].range-accent::-moz-range-thumb{box-shadow:0 0 0 1px var(--color-accent), 0 0 8px color-mix(in srgb, var(--color-accent) 55%, transparent)}}input[type=range].range-accent::-moz-range-thumb{cursor:pointer}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,81189,e=>{"use strict";var t=e.i(43476);let a={live:"bg-success/12 text-success",down:"bg-danger/12 text-danger",warn:"bg-warning/12 text-warning",info:"bg-info/12 text-info",neutral:"bg-surface-2 text-text-muted"};function s({tone:e="neutral",children:n,className:r}){return(0,t.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${a[e]}${r?` ${r}`:""}`,children:n})}e.s(["Badge",0,s,"FormatBadge",0,function({format:e}){return(0,t.jsx)(s,{tone:"info",children:e})}])},38286,e=>{"use strict";var t=e.i(43476);e.s(["Empty",0,function({children:e}){return(0,t.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:e})},"Stat",0,function({label:e,value:a,sub:s}){return(0,t.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,t.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:e}),(0,t.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:a}),s&&(0,t.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:s})]})},"fmt",0,{int:e=>e.toLocaleString("en-US"),compact:e=>Math.abs(e)>=1e6?`${(e/1e6).toFixed(1)}M`:Math.abs(e)>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e)),cost:e=>0===e?"$0":e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`,time:e=>new Date(e).toLocaleString("en-US",{hour12:!1}),date(e){let t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")}/${t.getFullYear()}`},ago(e){let t=Math.max(0,Math.round((Date.now()-e)/1e3));return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:`${Math.floor(t/86400)}d`},duration(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;if(t<3600)return`${Math.floor(t/60)}m ${t%60}s`;let a=Math.floor(t/3600),s=Math.floor(t%3600/60);if(a<24)return`${a}h ${s}m`;let n=Math.floor(a/24);return`${n}d ${a%24}h`}}])},49080,e=>{"use strict";var t=e.i(43476);e.s(["Lamp",0,function({state:e,title:a}){return(0,t.jsx)("span",{className:`lamp lamp-${e}`,title:a,"aria-label":e})}])},98111,e=>{"use strict";var t=e.i(43476),a=e.i(71645),s=e.i(51514),n=e.i(38286);e.s(["CooldownTimer",0,function({ms:e,tone:r="danger",icon:i="timer",keepZero:l=!1}){let[o]=(0,a.useState)(()=>Date.now()+e),[d,c]=(0,a.useState)(()=>Math.max(0,e));return((0,a.useEffect)(()=>{let e=()=>c(Math.max(0,o-Date.now()));e();let t=setInterval(e,1e3);return()=>clearInterval(t)},[o]),d<=0&&!l)?null:(0,t.jsxs)("span",{className:`inline-flex items-center gap-1 tnum text-[12px] ${"danger"===r?"text-danger":"text-text-muted"}`,children:[(0,t.jsx)(s.Icon,{name:i,size:13}),d<=0?"now":n.fmt.duration(d)]})}])},70757,e=>{"use strict";var t=e.i(43476),a=e.i(71645),s=e.i(22016),n=e.i(29481),r=e.i(49080),i=e.i(81189),l=e.i(98111),o=e.i(10007),d=e.i(51514),c=e.i(38286);function x({id:e,disabled:s,onDone:r}){let[i,l]=(0,a.useState)(!1);return(0,t.jsxs)("button",{type:"button",onClick:t=>{t.preventDefault(),t.stopPropagation(),i||(l(!0),n.adminApi.setProviderDisabled(e,!s).then(()=>r()).finally(()=>l(!1)))},className:`inline-flex items-center gap-1.5 text-[11px] font-medium ${s?"text-danger":"text-text-muted"}`,"aria-label":s?"Enable provider":"Disable provider",title:s?"Provider disabled — click to enable":"Provider enabled — click to disable",children:[(0,t.jsx)("span",{className:`relative h-4 w-7 rounded-full transition-colors ${s?"bg-danger":"bg-accent"} ${i?"opacity-60":""}`,children:(0,t.jsx)("span",{className:`absolute left-0.5 top-0.5 h-3 w-3 rounded-full bg-white transition-transform ${s?"translate-x-0":"translate-x-[14px]"}`})}),s?"disabled":"enabled"]})}let u=[{id:"openai",label:"OpenAI compatible",sub:"/v1/chat/completions",icon:"bolt",format:"openai",base_url:"https://api.openai.com/v1",hint:"Base URL ending in /v1 for any OpenAI-compatible API.",modelHint:"e.g. gpt-4o, glm-5.2"},{id:"anthropic",label:"Anthropic compatible",sub:"/v1/messages",icon:"smart_toy",format:"anthropic",base_url:"https://api.anthropic.com",hint:"Base URL of an Anthropic-compatible API; /messages is appended.",modelHint:"e.g. claude-sonnet-4-6"}];function m({onDone:e,onClose:s}){let[r,l]=(0,a.useState)(null),[c,x]=(0,a.useState)(""),[p,h]=(0,a.useState)(""),[b,f]=(0,a.useState)(""),[g,v]=(0,a.useState)(!1),[j,y]=(0,a.useState)(""),[N,w]=(0,a.useState)(!1),[k,$]=(0,a.useState)(!1),[S,C]=(0,a.useState)(null),[I,M]=(0,a.useState)("");if(!r)return(0,t.jsxs)("div",{className:"mb-5 rounded-brand-lg border border-border bg-surface p-5 shadow-soft",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-[14px] font-semibold text-text",children:"Add a provider"}),(0,t.jsx)("p",{className:"mt-0.5 text-[12.5px] text-text-muted",children:"Pick the API your endpoint speaks — the rest is prefilled."})]}),(0,t.jsx)("button",{type:"button",onClick:s,className:"flex-none text-text-subtle hover:text-text","aria-label":"Cancel",children:(0,t.jsx)(d.Icon,{name:"close",size:18})})]}),(0,t.jsx)("div",{className:"mt-4 grid gap-3 sm:grid-cols-2",children:u.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>{l(e),h(e.base_url),C(null),M("")},className:"group flex items-start gap-3 rounded-brand-lg border border-border bg-bg p-4 text-left transition-colors hover:border-accent hover:bg-accent-soft",children:[(0,t.jsx)("span",{className:"flex h-10 w-10 flex-none items-center justify-center rounded-brand bg-surface-2 text-text-muted group-hover:text-accent",children:(0,t.jsx)(d.Icon,{name:e.icon,size:20})}),(0,t.jsxs)("span",{className:"min-w-0",children:[(0,t.jsx)("span",{className:"block text-[13.5px] font-semibold text-text",children:e.label}),(0,t.jsx)("span",{className:"block tnum text-[11.5px] text-text-subtle",children:e.sub}),(0,t.jsx)("span",{className:"mt-1 block text-[11.5px] text-text-muted",children:e.hint})]})]},e.id))})]});async function _(){if(!p||!r)return;$(!0),C(null);let e=await n.adminApi.validateProvider({format:r.format,base_url:p,api_key:b||void 0});$(!1),C(e.data??{ok:!1,reachable:!1,status:0,error:e.error})}async function A(t){if(t.preventDefault(),!r||!c||!p)return void M("name and base URL are required");w(!0),M("");let a=await n.adminApi.addProvider({id:c,format:r.format,base_url:p,api_key:b||void 0,free:!b.trim()});if(!a.ok){w(!1),M(a.error??"failed");return}j.trim()&&await n.adminApi.addModel(c,j.trim()),w(!1),e()}return(0,t.jsx)("div",{className:"mb-5 rounded-brand-lg border border-border bg-surface p-5 shadow-soft",children:(0,t.jsxs)("form",{onSubmit:A,children:[(0,t.jsxs)("div",{className:"mb-4 flex items-center gap-2.5 border-b border-border-subtle pb-4",children:[(0,t.jsx)("span",{className:"flex h-8 w-8 items-center justify-center rounded-brand bg-surface-2 text-text-muted",children:(0,t.jsx)(d.Icon,{name:r.icon,size:17})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-[13.5px] font-semibold text-text",children:r.label}),(0,t.jsx)("div",{className:"tnum text-[11px] text-text-subtle",children:r.sub})]}),(0,t.jsxs)("button",{type:"button",onClick:()=>{l(null),C(null)},className:"ml-auto inline-flex items-center gap-1 text-[12px] text-text-subtle hover:text-text",children:[(0,t.jsx)(d.Icon,{name:"arrow_back",size:14})," change type"]})]}),(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)(o.Field,{label:"Name",hint:"a friendly id — also the model prefix (name/model)",children:(0,t.jsx)(o.Input,{value:c,onChange:e=>x(e.target.value),placeholder:"e.g. openai, huki"})}),(0,t.jsx)(o.Field,{label:"Base URL",hint:r.hint,children:(0,t.jsx)(o.Input,{value:p,onChange:e=>{h(e.target.value),C(null)},placeholder:r.base_url,className:"font-mono text-[12.5px]"})}),(0,t.jsx)(o.Field,{label:"API Key",hint:"used for Check and live requests — leave blank for a free / no-auth endpoint",children:(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsxs)("div",{className:"relative flex-1",children:[(0,t.jsx)(o.Input,{type:g?"text":"password",value:b,onChange:e=>{f(e.target.value),C(null)},placeholder:"sk-…",className:"pr-9 font-mono text-[12.5px]"}),b&&(0,t.jsx)("button",{type:"button",onClick:()=>v(e=>!e),className:"absolute right-2 top-1/2 -translate-y-1/2 text-text-subtle hover:text-text","aria-label":g?"Hide key":"Show key",children:(0,t.jsx)(d.Icon,{name:g?"visibility_off":"visibility",size:15})})]}),(0,t.jsxs)(o.Button,{type:"button",variant:"ghost",disabled:k||!p,onClick:_,children:[(0,t.jsx)(d.Icon,{name:k?"progress_activity":"wifi_tethering",size:15}),k?"Checking…":"Check"]})]})}),S&&(0,t.jsxs)("div",{className:"flex items-center gap-2 text-[12px]",children:[(0,t.jsx)(i.Badge,{tone:S.ok?"live":S.reachable?"warn":"down",children:S.ok?"valid":S.reachable?`reachable (${S.status})`:"invalid"}),S.error&&(0,t.jsx)("span",{className:"text-text-subtle",children:S.error})]}),(0,t.jsx)(o.Field,{label:"Model ID",hint:"optional — seed one if the provider has no /models endpoint",children:(0,t.jsx)(o.Input,{value:j,onChange:e=>y(e.target.value),placeholder:r.modelHint,className:"font-mono text-[12.5px]"})})]}),I&&(0,t.jsx)("div",{className:"mt-2 text-[12px] text-danger",children:I}),(0,t.jsxs)("div",{className:"mt-4 flex justify-end gap-2",children:[(0,t.jsx)(o.Button,{type:"button",variant:"ghost",onClick:s,children:"Cancel"}),(0,t.jsx)(o.Button,{type:"submit",disabled:N,children:N?"Adding…":"Add provider"})]})]})})}e.s(["ProviderManager",0,function(){let[e,u]=(0,a.useState)(null),[p,h]=(0,a.useState)(""),[b,f]=(0,a.useState)(!1),g=(0,a.useCallback)(async()=>{let[e,t]=await Promise.all([fetch("/api/gw/admin/config"),n.adminApi.providers()]);e.ok&&t.ok?(h(""),u({config:await e.json(),health:t.data?.providers??[]})):h("could not reach the gateway")},[]);if((0,a.useEffect)(()=>{g()},[g]),p)return(0,t.jsx)(c.Empty,{children:p});if(!e)return(0,t.jsx)(c.Empty,{children:"Loading…"});let v=new Map(e.health.map(e=>[e.id,e]));return(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"mb-6 flex items-center justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:"Providers & Keys"}),(0,t.jsx)("p",{className:"mt-1 text-[13px] text-text-muted",children:"Upstream providers the gateway routes to."})]}),(0,t.jsxs)(o.Button,{onClick:()=>f(!0),children:[(0,t.jsx)(d.Icon,{name:"add",size:17}),"Add provider"]})]}),b&&(0,t.jsx)(m,{onClose:()=>f(!1),onDone:()=>{f(!1),g()}}),0===e.config.providers.length?(0,t.jsx)(c.Empty,{children:"No providers yet. Add one to start routing."}):(0,t.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:e.config.providers.map(e=>{let a=v.get(e.id),n=!a||a.keys.some(e=>e.healthy),o=a?.keys.find(e=>!e.healthy&&e.cooldown_ms>0);return(0,t.jsxs)(s.default,{href:`/providers/${encodeURIComponent(e.id)}`,className:`group rounded-brand-lg border bg-surface p-4 shadow-soft transition-colors ${e.disabled?"border-danger/35 opacity-60 hover:opacity-100 hover:border-danger/60":"border-border hover:border-text-subtle"}`,children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,t.jsx)(r.Lamp,{state:e.disabled?"idle":n?"live":"down"}),(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("span",{className:"block truncate text-[14px] font-semibold text-text",children:e.name||e.id}),e.name&&(0,t.jsxs)("span",{className:"block truncate text-[11px] text-text-subtle",children:[e.id,"/"]})]})]}),(0,t.jsx)(i.FormatBadge,{format:e.format})]}),(0,t.jsx)("div",{className:"mt-2 truncate text-[12px] text-text-subtle",children:e.base_url}),(0,t.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-2",children:[(0,t.jsx)(x,{id:e.id,disabled:!!e.disabled,onDone:g}),e.free&&(0,t.jsx)(i.Badge,{tone:"info",children:"free"}),e.service_account&&(0,t.jsx)(i.Badge,{tone:"info",children:"service-account"}),(0,t.jsx)(i.Badge,{tone:"neutral",children:e.free||e.service_account?`${e.api_keys?.length??0} keys`:`${e.api_keys?.length??+!!e.api_key} keys`}),(0,t.jsxs)(i.Badge,{tone:"neutral",children:[e.models.length," models"]}),o&&(0,t.jsx)(l.CooldownTimer,{ms:o.cooldown_ms})]})]},e.id)})})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,81189,e=>{"use strict";var t=e.i(43476);let a={live:"bg-success/12 text-success",down:"bg-danger/12 text-danger",warn:"bg-warning/12 text-warning",info:"bg-info/12 text-info",neutral:"bg-surface-2 text-text-muted"};function s({tone:e="neutral",children:n,className:r}){return(0,t.jsx)("span",{className:`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${a[e]}${r?` ${r}`:""}`,children:n})}e.s(["Badge",0,s,"FormatBadge",0,function({format:e}){return(0,t.jsx)(s,{tone:"info",children:e})}])},38286,e=>{"use strict";var t=e.i(43476);e.s(["Empty",0,function({children:e}){return(0,t.jsx)("div",{className:"px-1 py-8 text-center text-[13px] text-text-muted",children:e})},"Stat",0,function({label:e,value:a,sub:s}){return(0,t.jsxs)("div",{className:"rounded-brand-lg border border-border bg-surface px-4 py-3.5 shadow-soft",children:[(0,t.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wider text-text-subtle",children:e}),(0,t.jsx)("div",{className:"mt-1 tnum text-[22px] font-semibold tracking-tight text-text",children:a}),s&&(0,t.jsx)("div",{className:"mt-0.5 text-[12px] text-text-muted",children:s})]})},"fmt",0,{int:e=>e.toLocaleString("en-US"),compact:e=>Math.abs(e)>=1e6?`${(e/1e6).toFixed(1)}M`:Math.abs(e)>=1e3?`${(e/1e3).toFixed(1)}K`:String(Math.round(e)),cost:e=>0===e?"$0":e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`,time:e=>new Date(e).toLocaleString("en-US",{hour12:!1}),date(e){let t=new Date(e);return`${String(t.getDate()).padStart(2,"0")}/${String(t.getMonth()+1).padStart(2,"0")}/${t.getFullYear()}`},ago(e){let t=Math.max(0,Math.round((Date.now()-e)/1e3));return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:`${Math.floor(t/86400)}d`},duration(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;if(t<3600)return`${Math.floor(t/60)}m ${t%60}s`;let a=Math.floor(t/3600),s=Math.floor(t%3600/60);if(a<24)return`${a}h ${s}m`;let n=Math.floor(a/24);return`${n}d ${a%24}h`}}])},49080,e=>{"use strict";var t=e.i(43476);e.s(["Lamp",0,function({state:e,title:a}){return(0,t.jsx)("span",{className:`lamp lamp-${e}`,title:a,"aria-label":e})}])},98111,e=>{"use strict";var t=e.i(43476),a=e.i(71645),s=e.i(51514),n=e.i(38286);e.s(["CooldownTimer",0,function({ms:e,tone:r="danger",icon:i="timer",keepZero:l=!1}){let[o]=(0,a.useState)(()=>Date.now()+e),[d,c]=(0,a.useState)(()=>Math.max(0,e));return((0,a.useEffect)(()=>{let e=()=>c(Math.max(0,o-Date.now()));e();let t=setInterval(e,1e3);return()=>clearInterval(t)},[o]),d<=0&&!l)?null:(0,t.jsxs)("span",{className:`inline-flex items-center gap-1 tnum text-[12px] ${"danger"===r?"text-danger":"text-text-muted"}`,children:[(0,t.jsx)(s.Icon,{name:i,size:13}),d<=0?"now":n.fmt.duration(d)]})}])},70757,e=>{"use strict";var t=e.i(43476),a=e.i(71645),s=e.i(22016),n=e.i(29481),r=e.i(49080),i=e.i(81189),l=e.i(98111),o=e.i(10007),d=e.i(51514),c=e.i(38286);function x({id:e,disabled:s,onDone:r}){let[i,l]=(0,a.useState)(!1);return(0,t.jsxs)("button",{type:"button",onClick:t=>{t.preventDefault(),t.stopPropagation(),i||(l(!0),n.adminApi.setProviderDisabled(e,!s).then(()=>r()).finally(()=>l(!1)))},className:`inline-flex items-center gap-1.5 text-[11px] font-medium ${s?"text-danger":"text-text-muted"}`,"aria-label":s?"Enable provider":"Disable provider",title:s?"Provider disabled — click to enable":"Provider enabled — click to disable",children:[(0,t.jsx)("span",{className:`relative h-4 w-7 rounded-full transition-colors ${s?"bg-danger":"bg-accent"} ${i?"opacity-60":""}`,children:(0,t.jsx)("span",{className:`absolute left-0.5 top-0.5 h-3 w-3 rounded-full bg-white transition-transform ${s?"translate-x-0":"translate-x-[14px]"}`})}),s?"disabled":"enabled"]})}let u=[{id:"openai",label:"OpenAI compatible",sub:"/v1/chat/completions",icon:"bolt",format:"openai",base_url:"https://api.openai.com/v1",hint:"Base URL ending in /v1 for any OpenAI-compatible API.",modelHint:"e.g. gpt-4o, glm-5.2"},{id:"anthropic",label:"Anthropic compatible",sub:"/v1/messages",icon:"smart_toy",format:"anthropic",base_url:"https://api.anthropic.com",hint:"Base URL of an Anthropic-compatible API; /messages is appended.",modelHint:"e.g. claude-sonnet-4-6"}];function m({onDone:e,onClose:s}){let[r,l]=(0,a.useState)(null),[c,x]=(0,a.useState)(""),[p,h]=(0,a.useState)(""),[b,f]=(0,a.useState)(""),[g,v]=(0,a.useState)(!1),[j,y]=(0,a.useState)(""),[N,w]=(0,a.useState)(!1),[k,$]=(0,a.useState)(!1),[S,C]=(0,a.useState)(null),[I,M]=(0,a.useState)("");if(!r)return(0,t.jsxs)("div",{className:"mb-5 rounded-brand-lg border border-border bg-surface p-5 shadow-soft",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-[14px] font-semibold text-text",children:"Add a provider"}),(0,t.jsx)("p",{className:"mt-0.5 text-[12.5px] text-text-muted",children:"Pick the API your endpoint speaks — the rest is prefilled."})]}),(0,t.jsx)("button",{type:"button",onClick:s,className:"flex-none text-text-subtle hover:text-text","aria-label":"Cancel",children:(0,t.jsx)(d.Icon,{name:"close",size:18})})]}),(0,t.jsx)("div",{className:"mt-4 grid gap-3 sm:grid-cols-2",children:u.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>{l(e),h(e.base_url),C(null),M("")},className:"group flex items-start gap-3 rounded-brand-lg border border-border bg-bg p-4 text-left transition-colors hover:border-accent hover:bg-accent-soft",children:[(0,t.jsx)("span",{className:"flex h-10 w-10 flex-none items-center justify-center rounded-brand bg-surface-2 text-text-muted group-hover:text-accent",children:(0,t.jsx)(d.Icon,{name:e.icon,size:20})}),(0,t.jsxs)("span",{className:"min-w-0",children:[(0,t.jsx)("span",{className:"block text-[13.5px] font-semibold text-text",children:e.label}),(0,t.jsx)("span",{className:"block tnum text-[11.5px] text-text-subtle",children:e.sub}),(0,t.jsx)("span",{className:"mt-1 block text-[11.5px] text-text-muted",children:e.hint})]})]},e.id))})]});async function _(){if(!p||!r)return;$(!0),C(null);let e=await n.adminApi.validateProvider({format:r.format,base_url:p,api_key:b||void 0});$(!1),C(e.data??{ok:!1,reachable:!1,status:0,error:e.error})}async function A(t){if(t.preventDefault(),!r||!c||!p)return void M("name and base URL are required");w(!0),M("");let a=await n.adminApi.addProvider({id:c,format:r.format,base_url:p,api_key:b||void 0,free:!b.trim()});if(!a.ok){w(!1),M(a.error??"failed");return}j.trim()&&await n.adminApi.addModel(c,j.trim()),w(!1),e()}return(0,t.jsx)("div",{className:"mb-5 rounded-brand-lg border border-border bg-surface p-5 shadow-soft",children:(0,t.jsxs)("form",{onSubmit:A,children:[(0,t.jsxs)("div",{className:"mb-4 flex items-center gap-2.5 border-b border-border-subtle pb-4",children:[(0,t.jsx)("span",{className:"flex h-8 w-8 items-center justify-center rounded-brand bg-surface-2 text-text-muted",children:(0,t.jsx)(d.Icon,{name:r.icon,size:17})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-[13.5px] font-semibold text-text",children:r.label}),(0,t.jsx)("div",{className:"tnum text-[11px] text-text-subtle",children:r.sub})]}),(0,t.jsxs)("button",{type:"button",onClick:()=>{l(null),C(null)},className:"ml-auto inline-flex items-center gap-1 text-[12px] text-text-subtle hover:text-text",children:[(0,t.jsx)(d.Icon,{name:"arrow_back",size:14})," change type"]})]}),(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)(o.Field,{label:"Name",hint:"a friendly id — also the model prefix (name/model)",children:(0,t.jsx)(o.Input,{value:c,onChange:e=>x(e.target.value),placeholder:"e.g. openai, anthropic"})}),(0,t.jsx)(o.Field,{label:"Base URL",hint:r.hint,children:(0,t.jsx)(o.Input,{value:p,onChange:e=>{h(e.target.value),C(null)},placeholder:r.base_url,className:"font-mono text-[12.5px]"})}),(0,t.jsx)(o.Field,{label:"API Key",hint:"used for Check and live requests — leave blank for a free / no-auth endpoint",children:(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsxs)("div",{className:"relative flex-1",children:[(0,t.jsx)(o.Input,{type:g?"text":"password",value:b,onChange:e=>{f(e.target.value),C(null)},placeholder:"sk-…",className:"pr-9 font-mono text-[12.5px]"}),b&&(0,t.jsx)("button",{type:"button",onClick:()=>v(e=>!e),className:"absolute right-2 top-1/2 -translate-y-1/2 text-text-subtle hover:text-text","aria-label":g?"Hide key":"Show key",children:(0,t.jsx)(d.Icon,{name:g?"visibility_off":"visibility",size:15})})]}),(0,t.jsxs)(o.Button,{type:"button",variant:"ghost",disabled:k||!p,onClick:_,children:[(0,t.jsx)(d.Icon,{name:k?"progress_activity":"wifi_tethering",size:15}),k?"Checking…":"Check"]})]})}),S&&(0,t.jsxs)("div",{className:"flex items-center gap-2 text-[12px]",children:[(0,t.jsx)(i.Badge,{tone:S.ok?"live":S.reachable?"warn":"down",children:S.ok?"valid":S.reachable?`reachable (${S.status})`:"invalid"}),S.error&&(0,t.jsx)("span",{className:"text-text-subtle",children:S.error})]}),(0,t.jsx)(o.Field,{label:"Model ID",hint:"optional — seed one if the provider has no /models endpoint",children:(0,t.jsx)(o.Input,{value:j,onChange:e=>y(e.target.value),placeholder:r.modelHint,className:"font-mono text-[12.5px]"})})]}),I&&(0,t.jsx)("div",{className:"mt-2 text-[12px] text-danger",children:I}),(0,t.jsxs)("div",{className:"mt-4 flex justify-end gap-2",children:[(0,t.jsx)(o.Button,{type:"button",variant:"ghost",onClick:s,children:"Cancel"}),(0,t.jsx)(o.Button,{type:"submit",disabled:N,children:N?"Adding…":"Add provider"})]})]})})}e.s(["ProviderManager",0,function(){let[e,u]=(0,a.useState)(null),[p,h]=(0,a.useState)(""),[b,f]=(0,a.useState)(!1),g=(0,a.useCallback)(async()=>{let[e,t]=await Promise.all([fetch("/api/gw/admin/config"),n.adminApi.providers()]);e.ok&&t.ok?(h(""),u({config:await e.json(),health:t.data?.providers??[]})):h("could not reach the gateway")},[]);if((0,a.useEffect)(()=>{g()},[g]),p)return(0,t.jsx)(c.Empty,{children:p});if(!e)return(0,t.jsx)(c.Empty,{children:"Loading…"});let v=new Map(e.health.map(e=>[e.id,e]));return(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"mb-6 flex items-center justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{className:"text-[22px] font-semibold tracking-tight text-text",children:"Providers & Keys"}),(0,t.jsx)("p",{className:"mt-1 text-[13px] text-text-muted",children:"Upstream providers the gateway routes to."})]}),(0,t.jsxs)(o.Button,{onClick:()=>f(!0),children:[(0,t.jsx)(d.Icon,{name:"add",size:17}),"Add provider"]})]}),b&&(0,t.jsx)(m,{onClose:()=>f(!1),onDone:()=>{f(!1),g()}}),0===e.config.providers.length?(0,t.jsx)(c.Empty,{children:"No providers yet. Add one to start routing."}):(0,t.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:e.config.providers.map(e=>{let a=v.get(e.id),n=!a||a.keys.some(e=>e.healthy),o=a?.keys.find(e=>!e.healthy&&e.cooldown_ms>0);return(0,t.jsxs)(s.default,{href:`/providers/${encodeURIComponent(e.id)}`,className:`group rounded-brand-lg border bg-surface p-4 shadow-soft transition-colors ${e.disabled?"border-danger/35 opacity-60 hover:opacity-100 hover:border-danger/60":"border-border hover:border-text-subtle"}`,children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,t.jsx)(r.Lamp,{state:e.disabled?"idle":n?"live":"down"}),(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("span",{className:"block truncate text-[14px] font-semibold text-text",children:e.name||e.id}),e.name&&(0,t.jsxs)("span",{className:"block truncate text-[11px] text-text-subtle",children:[e.id,"/"]})]})]}),(0,t.jsx)(i.FormatBadge,{format:e.format})]}),(0,t.jsx)("div",{className:"mt-2 truncate text-[12px] text-text-subtle",children:e.base_url}),(0,t.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-2",children:[(0,t.jsx)(x,{id:e.id,disabled:!!e.disabled,onDone:g}),e.free&&(0,t.jsx)(i.Badge,{tone:"info",children:"free"}),e.service_account&&(0,t.jsx)(i.Badge,{tone:"info",children:"service-account"}),(0,t.jsx)(i.Badge,{tone:"neutral",children:e.free||e.service_account?`${e.api_keys?.length??0} keys`:`${e.api_keys?.length??+!!e.api_key} keys`}),(0,t.jsxs)(i.Badge,{tone:"neutral",children:[e.models.length," models"]}),o&&(0,t.jsx)(l.CooldownTimer,{ms:o.cooldown_ms})]})]},e.id)})})]})}])}]);