feat(web): register Keenable provider in WebUI, docs, and tests
Bring the Keenable search provider in line with the established multi-file provider pattern so it surfaces everywhere the others do: - settings_api.py: register in the web-search provider options so it appears in the WebUI settings dropdown (credential: api_key, optional). - WebUI provider-brand: add keenable brand entry + brand test. - docs/configuration.md: provider table row + config example. - Harden _search_keenable: honor config.timeout and return explicit messages on HTTP status errors (429 / other), matching peer providers. - Add env-key and HTTP-error tests; add the websocket settings whitelist assertion. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
committed by
Xubin Ren
co-authored by
Claude Opus 4.8
parent
4f6e5e9cb8
commit
fa3e902ee8
@@ -130,6 +130,7 @@ const PROVIDER_BRANDS: Record<string, ProviderBrand> = {
|
||||
huggingface: brand("huggingface.co", "#FF9D00", "HF"),
|
||||
jina: brand("jina.ai", "#7C3AED", "J"),
|
||||
kagi: brand("kagi.com", "#FFB319", "K"),
|
||||
keenable: brand("keenable.ai", "#0EA5E9", "K"),
|
||||
lm_studio: brand("lmstudio.ai", "#111827", "LM"),
|
||||
longcat: brand("longcatai.org", "#4F8CFF", "LC", [
|
||||
"https://www.longcatai.org/favicon.svg",
|
||||
|
||||
@@ -57,4 +57,9 @@ describe("provider brand logos", () => {
|
||||
expect(providerBrand("bocha")?.logoUrls).toContain("https://bochaai.com/favicon.ico");
|
||||
expect(providerBrand("bocha")?.initials).toBe("B");
|
||||
});
|
||||
|
||||
it("keeps Keenable web search settings on the first-party brand domain", () => {
|
||||
expect(providerBrand("keenable")?.logoUrls).toContain("https://keenable.ai/favicon.ico");
|
||||
expect(providerBrand("keenable")?.initials).toBe("K");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user