From 710c1cc4c826dfdf6ce4449c3ecf4ab5eeffc9ba Mon Sep 17 00:00:00 2001 From: Yushi Chen Date: Wed, 21 Oct 2026 15:35:26 +0800 Subject: [PATCH 1/2] feat(providers): list Perch as a reference-only directory entry Perch's free Starter plan is reachable only through its own Web, Desktop and CLI clients, and no registered operating entity could be found for it. Per MAINTAINERS.md, incomplete evidence gets an inert reference row: no base URL, no adapter, no discovery, unverified. --- src/providers/free-directory.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/providers/free-directory.ts b/src/providers/free-directory.ts index 9653fe27694..29e88303db0 100644 --- a/src/providers/free-directory.ts +++ b/src/providers/free-directory.ts @@ -12,7 +12,7 @@ export const FREE_PROVIDER_ACCESS_GROUPS = { "cloudflare-ai", "cohere", "coze", "duckduckgo-web", "felo-web", "friendliai", "gemini", "github-models", "groq", "hackclub", "huggingchat", "huggingface", "iflytek", "inference-net", "kiro", "liquid", "llm7", "mistral", "morph", "muse-spark-web", "nara", "navy", "nlpcloud", "ollama-cloud", "opencode", "openrouter", - "ovhcloud", "pollinations", "puter", "qwen-web", "reka", "runcrate", "sambanova", "sparkdesk", "t3-web", "uncloseai", + "ovhcloud", "perch", "pollinations", "puter", "qwen-web", "reka", "runcrate", "sambanova", "sparkdesk", "t3-web", "uncloseai", ], "recurring-uncapped": [ "agnes", "ainative", "aion", "baidu", "glm", "glm-cn", "kilo-gateway", "opencode-zen", "requesty", @@ -204,7 +204,7 @@ const LABELS: Record = { gemini: "Google Gemini", "github-models": "GitHub Models", huggingchat: "HuggingChat", huggingface: "Hugging Face", iflytek: "iFlytek", "inference-net": "Inference.net", llm7: "LLM7", "muse-spark-web": "Muse Spark Web", nlpcloud: "NLP Cloud", "ollama-cloud": "Ollama Cloud", ovhcloud: "OVHcloud", "qwen-web": "Qwen Web", - "t3-web": "T3 Web", uncloseai: "UncloseAI", ainative: "AI Native", baidu: "Baidu Qianfan", + "t3-web": "T3 Web", uncloseai: "UncloseAI", perch: "Perch", ainative: "AI Native", baidu: "Baidu Qianfan", glm: "Z.AI GLM", "glm-cn": "BigModel GLM (CN)", "kilo-gateway": "Kilo Gateway", "opencode-zen": "OpenCode Zen", sealion: "SEA-LION", bytez: "Bytez", "nous-research": "Nous Research", agentrouter: "AgentRouter", ai21: "AI21", baichuan: "Baichuan", crusoe: "Crusoe", deepinfra: "DeepInfra", deepseek: "DeepSeek", doubao: "Doubao", From 2d285c2cb54a763ba7975881fb6c34bb61693e6b Mon Sep 17 00:00:00 2001 From: Yushi Chen Date: Wed, 28 Oct 2026 20:41:46 +0800 Subject: [PATCH 2/2] test(providers): pin the Perch row to reference only The PR hygiene gate requires coverage when behavior under src/ changes. Assert the generated row keeps an empty base URL, no discovery and no verification date. --- tests/providers/provider-registry-parity.test.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/providers/provider-registry-parity.test.ts b/tests/providers/provider-registry-parity.test.ts index 0ee42da3376..d0a0c904cf0 100644 --- a/tests/providers/provider-registry-parity.test.ts +++ b/tests/providers/provider-registry-parity.test.ts @@ -1893,6 +1893,12 @@ describe("free-provider directory isolation", () => { } }); + test("Perch is listed as a reference row with no runtime destination", () => { + const perch = FREE_PROVIDER_DIRECTORY.find(entry => entry.id === "perch"); + expect(perch).toMatchObject({ supportLevel: "reference", verification: "unverified", baseUrl: "", discovery: "unsupported", liveModels: false }); + expect(perch?.lastVerified).toBeUndefined(); + }); + /* * #1057. The registry classifies DeepSeek V4 ids Flash-versus-Pro with a substring * test, which is correct for every id shipped today but is exactly the kind of