docs(web): sync v0.8.45 facts and provider surface
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user