docs(web): sync v0.8.45 facts and provider surface

This commit is contained in:
Hunter Bown
2026-05-25 22:07:10 -05:00
parent 85e9a46ddf
commit 64c870f35c
9 changed files with 125 additions and 85 deletions
+8 -6
View File
@@ -77,12 +77,15 @@ function deriveProvidersFromConfig(cfg: string): ProviderFact[] {
// so the binary rejects it — keep it out of the docs. Issue #1104.
const labelMap: Record<string, ProviderFact> = {
Deepseek: { id: "deepseek", label: "DeepSeek", env: "DEEPSEEK_API_KEY" },
NvidiaNim: { id: "nvidia-nim", label: "NVIDIA NIM", env: "NVIDIA_API_KEY" },
Openai: { id: "openai", label: "OpenAI", env: "OPENAI_API_KEY" },
NvidiaNim: { id: "nvidia-nim", label: "NVIDIA NIM", env: "NVIDIA_API_KEY / NVIDIA_NIM_API_KEY" },
Openai: { id: "openai", label: "OpenAI-compatible", env: "OPENAI_API_KEY" },
Atlascloud: { id: "atlascloud", label: "AtlasCloud", env: "ATLASCLOUD_API_KEY" },
WanjieArk: { id: "wanjie-ark", label: "Wanjie Ark", env: "WANJIE_ARK_API_KEY / WANJIE_API_KEY / WANJIE_MAAS_API_KEY" },
Openrouter: { id: "openrouter", label: "OpenRouter", env: "OPENROUTER_API_KEY" },
Novita: { id: "novita", label: "Novita", env: "NOVITA_API_KEY" },
Fireworks: { id: "fireworks", label: "Fireworks", env: "FIREWORKS_API_KEY" },
Sglang: { id: "sglang", label: "sglang", env: "SGLANG_API_KEY" },
Novita: { id: "novita", label: "Novita AI", env: "NOVITA_API_KEY" },
Fireworks: { id: "fireworks", label: "Fireworks AI", env: "FIREWORKS_API_KEY" },
Moonshot: { id: "moonshot", label: "Moonshot/Kimi", env: "MOONSHOT_API_KEY / KIMI_API_KEY" },
Sglang: { id: "sglang", label: "SGLang", env: "SGLANG_API_KEY" },
Vllm: { id: "vllm", label: "vLLM", env: "VLLM_API_KEY" },
Ollama: { id: "ollama", label: "Ollama", env: "OLLAMA_API_KEY" },
};
@@ -98,7 +101,6 @@ function deriveSandboxBackends(files: string[]): string[] {
const map: Record<string, string> = {
seatbelt: "seatbelt (macOS)",
landlock: "landlock (Linux)",
windows: "AppContainer / restricted tokens (Windows)",
};
return files
.map((f) => f.replace(/\.rs$/, ""))
+24 -10
View File
@@ -18,8 +18,8 @@ export interface RepoFacts {
}
export const FACTS: RepoFacts = {
"generatedAt": "2026-05-24T16:01:45.189Z",
"version": "0.8.43",
"generatedAt": "2026-05-26T03:03:01.383Z",
"version": "0.8.45",
"crates": [
"agent",
"app-server",
@@ -38,8 +38,7 @@ export const FACTS: RepoFacts = {
],
"sandboxBackends": [
"landlock (Linux)",
"seatbelt (macOS)",
"AppContainer / restricted tokens (Windows)"
"seatbelt (macOS)"
],
"providers": [
{
@@ -50,13 +49,23 @@ export const FACTS: RepoFacts = {
{
"id": "nvidia-nim",
"label": "NVIDIA NIM",
"env": "NVIDIA_API_KEY"
"env": "NVIDIA_API_KEY / NVIDIA_NIM_API_KEY"
},
{
"id": "openai",
"label": "OpenAI",
"label": "OpenAI-compatible",
"env": "OPENAI_API_KEY"
},
{
"id": "atlascloud",
"label": "AtlasCloud",
"env": "ATLASCLOUD_API_KEY"
},
{
"id": "wanjie-ark",
"label": "Wanjie Ark",
"env": "WANJIE_ARK_API_KEY / WANJIE_API_KEY / WANJIE_MAAS_API_KEY"
},
{
"id": "openrouter",
"label": "OpenRouter",
@@ -64,17 +73,22 @@ export const FACTS: RepoFacts = {
},
{
"id": "novita",
"label": "Novita",
"label": "Novita AI",
"env": "NOVITA_API_KEY"
},
{
"id": "fireworks",
"label": "Fireworks",
"label": "Fireworks AI",
"env": "FIREWORKS_API_KEY"
},
{
"id": "moonshot",
"label": "Moonshot/Kimi",
"env": "MOONSHOT_API_KEY / KIMI_API_KEY"
},
{
"id": "sglang",
"label": "sglang",
"label": "SGLang",
"env": "SGLANG_API_KEY"
},
{
@@ -90,7 +104,7 @@ export const FACTS: RepoFacts = {
],
"defaultModel": "deepseek-v4-pro",
"nodeEngines": ">=18",
"toolCount": 69,
"toolCount": 70,
"license": "MIT",
"latestRelease": null
};
+1 -1
View File
@@ -2,7 +2,7 @@ import type { FeedItem, RepoStats } from "./types";
const REPO = process.env.GITHUB_REPO ?? "Hmbown/CodeWhale";
const GH = "https://api.github.com";
const MIN_KNOWN_CONTRIBUTORS = 98;
const MIN_KNOWN_CONTRIBUTORS = 99;
function headers(token?: string): HeadersInit {
const h: Record<string, string> = {
+23 -4
View File
@@ -55,6 +55,20 @@ async function gh<T>(url: string, ghToken?: string): Promise<T | null> {
interface GhRelease { tag_name: string; name: string | null; body: string | null; html_url: string; prerelease: boolean; draft: boolean }
interface GhIssue { number: number; title: string; html_url: string; body: string | null; state: string; pull_request?: unknown }
const FALLBACK_SHIPPED: RoadmapItem[] = [
{
title: "v0.8.45",
note: "Moonshot/Kimi OAuth, provider-surface sync, and current Windows install/runtime guidance",
href: "https://github.com/Hmbown/CodeWhale/releases/tag/v0.8.45",
},
];
function withPinnedShipped(items: RoadmapItem[]): RoadmapItem[] {
const seen = new Set(items.map((item) => item.title));
const pinned = FALLBACK_SHIPPED.filter((item) => !seen.has(item.title));
return [...pinned, ...items];
}
function summarizeReleaseBody(body: string | null): string {
if (!body) return "";
// First non-empty line, stripped of markdown headers / bullets / links
@@ -100,17 +114,19 @@ export async function fetchRoadmap(ghToken?: string): Promise<RoadmapFeed> {
fetchByLabel("roadmap:ruled-out", ghToken, "all"),
]);
const shipped: RoadmapItem[] = (releases ?? [])
const shipped: RoadmapItem[] = releases
? releases
.filter((r) => !r.draft)
.map((r) => ({
title: r.name?.trim() || r.tag_name,
note: summarizeReleaseBody(r.body) || r.tag_name,
href: r.html_url,
}));
}))
: FALLBACK_SHIPPED;
return {
generatedAt: new Date().toISOString(),
shipped,
shipped: withPinnedShipped(shipped),
underway,
considered,
ruledOut,
@@ -121,7 +137,10 @@ export async function getCachedRoadmap(kv: KVNamespace | undefined, ghToken: str
try {
if (kv) {
const cached = await kv.get(KV_KEY);
if (cached) return JSON.parse(cached) as RoadmapFeed;
if (cached) {
const parsed = JSON.parse(cached) as RoadmapFeed;
return { ...parsed, shipped: withPinnedShipped(parsed.shipped ?? []) };
}
}
const fresh = await fetchRoadmap(ghToken);
if (kv) {