feat(FN-3901): add builtin research web-search provider as default

The merge adds a builtin web-search research provider as the default, replacing the need for external research provider configuration and removing the setup gate for builtin defaults. Dashboard settings UX for research defaults was aligned (ResearchView, SettingsModal), CLI research commands were up

Fusion-Task-Id: FN-3901
This commit is contained in:
Fusion
2026-05-09 19:37:31 -07:00
committed by gsxdsm
parent 986aef3f8e
commit e69631ec24
21 changed files with 493 additions and 187 deletions

View File

@@ -6,16 +6,19 @@ describe("ResearchProviderRegistry", () => {
const registry = new ResearchProviderRegistry({}, process.cwd());
expect(registry.getProvider("web-search")).toBeDefined();
expect(registry.getProvider("page-fetch")).toBeDefined();
expect(registry.isProviderAvailable("web-search")).toBe(true);
expect(registry.isProviderAvailable("local-docs")).toBe(true);
expect(registry.isProviderAvailable("github")).toBe(false);
});
it("detects search backend from credentials", () => {
const tavily = new ResearchProviderRegistry({ researchGlobalTavilyApiKey: "key" }, process.cwd());
expect(tavily.isProviderAvailable("web-search")).toBe(true);
it("honors explicit none by disabling web-search", () => {
const registry = new ResearchProviderRegistry({ researchGlobalWebSearchProvider: "none" }, process.cwd());
expect(registry.isProviderAvailable("web-search")).toBe(false);
});
const searx = new ResearchProviderRegistry({ researchGlobalSearxngUrl: "https://sx.local" }, process.cwd());
expect(searx.isProviderAvailable("web-search")).toBe(true);
it("requires credentials for explicit external providers", () => {
const registry = new ResearchProviderRegistry({ researchGlobalWebSearchProvider: "tavily" }, process.cwd());
expect(registry.isProviderAvailable("web-search")).toBe(false);
});
it("returns only configured providers in available list", () => {
@@ -40,10 +43,4 @@ describe("ResearchProviderRegistry", () => {
registry.refreshSettings({ researchGlobalWebSearchProvider: "tavily", researchGlobalTavilyApiKey: "key" });
expect(registry.isProviderAvailable("web-search")).toBe(true);
});
it("gracefully degrades disabled providers", () => {
const registry = new ResearchProviderRegistry({ researchGlobalGitHubEnabled: false, researchGlobalLocalDocsEnabled: false }, process.cwd());
expect(registry.isProviderAvailable("github")).toBe(false);
expect(registry.isProviderAvailable("local-docs")).toBe(false);
});
});