agent-nuvira 3.3.7 → 3.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -50
- package/dist/agents/agents/planner.d.ts.map +1 -1
- package/dist/agents/agents/planner.js +41 -0
- package/dist/agents/agents/planner.js.map +1 -1
- package/dist/agents/agents/reasoner.d.ts.map +1 -1
- package/dist/agents/agents/reasoner.js +6 -0
- package/dist/agents/agents/reasoner.js.map +1 -1
- package/dist/agents/agents/runner.d.ts +6 -0
- package/dist/agents/agents/runner.d.ts.map +1 -1
- package/dist/agents/agents/runner.js +82 -5
- package/dist/agents/agents/runner.js.map +1 -1
- package/dist/agents/agents/writer-tool-calling.d.ts.map +1 -1
- package/dist/agents/agents/writer-tool-calling.js +5 -2
- package/dist/agents/agents/writer-tool-calling.js.map +1 -1
- package/dist/agents/agents/writer.d.ts.map +1 -1
- package/dist/agents/agents/writer.js +8 -4
- package/dist/agents/agents/writer.js.map +1 -1
- package/dist/agents/fanout-scheduler.d.ts +72 -0
- package/dist/agents/fanout-scheduler.d.ts.map +1 -0
- package/dist/agents/fanout-scheduler.js +100 -0
- package/dist/agents/fanout-scheduler.js.map +1 -0
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +30 -1
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/agents/plan-quality.d.ts +58 -0
- package/dist/agents/plan-quality.d.ts.map +1 -0
- package/dist/agents/plan-quality.js +152 -0
- package/dist/agents/plan-quality.js.map +1 -0
- package/dist/agents/prompt-assembly.d.ts +8 -0
- package/dist/agents/prompt-assembly.d.ts.map +1 -1
- package/dist/agents/prompt-assembly.js +18 -0
- package/dist/agents/prompt-assembly.js.map +1 -1
- package/dist/agents/step-handoff.d.ts +12 -2
- package/dist/agents/step-handoff.d.ts.map +1 -1
- package/dist/agents/step-handoff.js +65 -8
- package/dist/agents/step-handoff.js.map +1 -1
- package/dist/agents/tool-calling-agent.d.ts.map +1 -1
- package/dist/agents/tool-calling-agent.js +18 -0
- package/dist/agents/tool-calling-agent.js.map +1 -1
- package/dist/cli/cache.d.ts.map +1 -1
- package/dist/cli/cache.js +34 -4
- package/dist/cli/cache.js.map +1 -1
- package/dist/cli/chat.d.ts +6 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +79 -18
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts.map +1 -1
- package/dist/cli/cli-program.js +6 -0
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/config.d.ts +10 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +179 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/continuity.d.ts +61 -0
- package/dist/cli/continuity.d.ts.map +1 -0
- package/dist/cli/continuity.js +112 -0
- package/dist/cli/continuity.js.map +1 -0
- package/dist/cli/dashboard.d.ts +3 -1
- package/dist/cli/dashboard.d.ts.map +1 -1
- package/dist/cli/dashboard.js +5 -16
- package/dist/cli/dashboard.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +48 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/execute.d.ts +8 -0
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +34 -1
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/loop-executor.d.ts +24 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +134 -13
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/website.d.ts +25 -0
- package/dist/cli/website.d.ts.map +1 -0
- package/dist/cli/website.js +58 -0
- package/dist/cli/website.js.map +1 -0
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +35 -0
- package/dist/config/manager.js.map +1 -1
- package/dist/config/process-env.d.ts.map +1 -1
- package/dist/config/process-env.js +20 -0
- package/dist/config/process-env.js.map +1 -1
- package/dist/config/provider-env.d.ts +2 -1
- package/dist/config/provider-env.d.ts.map +1 -1
- package/dist/config/provider-env.js +19 -2
- package/dist/config/provider-env.js.map +1 -1
- package/dist/config/service-catalog.d.ts +81 -0
- package/dist/config/service-catalog.d.ts.map +1 -0
- package/dist/config/service-catalog.js +286 -0
- package/dist/config/service-catalog.js.map +1 -0
- package/dist/config/service-probe.d.ts +27 -0
- package/dist/config/service-probe.d.ts.map +1 -0
- package/dist/config/service-probe.js +104 -0
- package/dist/config/service-probe.js.map +1 -0
- package/dist/config/types.d.ts +63 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/context/cache.d.ts +46 -2
- package/dist/context/cache.d.ts.map +1 -1
- package/dist/context/cache.js +85 -7
- package/dist/context/cache.js.map +1 -1
- package/dist/findings/verdicts.d.ts +59 -0
- package/dist/findings/verdicts.d.ts.map +1 -1
- package/dist/findings/verdicts.js +117 -0
- package/dist/findings/verdicts.js.map +1 -1
- package/dist/forwarded.d.ts +2 -0
- package/dist/forwarded.d.ts.map +1 -0
- package/dist/forwarded.js +2 -0
- package/dist/forwarded.js.map +1 -0
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +9 -0
- package/dist/gateway/registry.js.map +1 -1
- package/dist/learning/auto-router.d.ts +30 -0
- package/dist/learning/auto-router.d.ts.map +1 -1
- package/dist/learning/auto-router.js +69 -12
- package/dist/learning/auto-router.js.map +1 -1
- package/dist/learning/context-assembly.d.ts +37 -0
- package/dist/learning/context-assembly.d.ts.map +1 -0
- package/dist/learning/context-assembly.js +63 -0
- package/dist/learning/context-assembly.js.map +1 -0
- package/dist/learning/reasoning-trace.d.ts +26 -5
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +21 -1
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/session-digest.d.ts +78 -0
- package/dist/learning/session-digest.d.ts.map +1 -0
- package/dist/learning/session-digest.js +185 -0
- package/dist/learning/session-digest.js.map +1 -0
- package/dist/learning/session-recall.d.ts +135 -0
- package/dist/learning/session-recall.d.ts.map +1 -0
- package/dist/learning/session-recall.js +305 -0
- package/dist/learning/session-recall.js.map +1 -0
- package/dist/learning/session-store.d.ts +172 -0
- package/dist/learning/session-store.d.ts.map +1 -0
- package/dist/learning/session-store.js +424 -0
- package/dist/learning/session-store.js.map +1 -0
- package/dist/learning/step-checkpoint.d.ts +28 -0
- package/dist/learning/step-checkpoint.d.ts.map +1 -1
- package/dist/learning/step-checkpoint.js +90 -6
- package/dist/learning/step-checkpoint.js.map +1 -1
- package/dist/learning/working-state.d.ts +19 -0
- package/dist/learning/working-state.d.ts.map +1 -1
- package/dist/learning/working-state.js +34 -1
- package/dist/learning/working-state.js.map +1 -1
- package/dist/parity/drivers.d.ts.map +1 -1
- package/dist/parity/drivers.js +29 -0
- package/dist/parity/drivers.js.map +1 -1
- package/dist/parity/wire-fixtures.d.ts +88 -0
- package/dist/parity/wire-fixtures.d.ts.map +1 -0
- package/dist/parity/wire-fixtures.js +405 -0
- package/dist/parity/wire-fixtures.js.map +1 -0
- package/dist/tools/artifact-append.d.ts +23 -0
- package/dist/tools/artifact-append.d.ts.map +1 -1
- package/dist/tools/artifact-append.js +28 -0
- package/dist/tools/artifact-append.js.map +1 -1
- package/dist/tools/ask-user.d.ts +5 -0
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/ask-user.js +51 -5
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/child-agent-entry.js +1 -0
- package/dist/tools/child-agent-entry.js.map +1 -1
- package/dist/tools/child-agent-runtime.d.ts +7 -0
- package/dist/tools/child-agent-runtime.d.ts.map +1 -1
- package/dist/tools/child-agent-runtime.js +116 -6
- package/dist/tools/child-agent-runtime.js.map +1 -1
- package/dist/tools/child-agent-worker.d.ts +15 -0
- package/dist/tools/child-agent-worker.d.ts.map +1 -0
- package/dist/tools/child-agent-worker.js.map +1 -0
- package/dist/tools/coding-tools.d.ts.map +1 -1
- package/dist/tools/coding-tools.js +11 -0
- package/dist/tools/coding-tools.js.map +1 -1
- package/dist/tools/finding-tool.d.ts +6 -1
- package/dist/tools/finding-tool.d.ts.map +1 -1
- package/dist/tools/finding-tool.js +15 -2
- package/dist/tools/finding-tool.js.map +1 -1
- package/dist/tools/followup-utils.d.ts +35 -0
- package/dist/tools/followup-utils.d.ts.map +1 -1
- package/dist/tools/followup-utils.js +36 -0
- package/dist/tools/followup-utils.js.map +1 -1
- package/dist/tools/loop-project-context.d.ts +4 -1
- package/dist/tools/loop-project-context.d.ts.map +1 -1
- package/dist/tools/loop-project-context.js +48 -1
- package/dist/tools/loop-project-context.js.map +1 -1
- package/dist/tools/loop-skill-hint.d.ts.map +1 -1
- package/dist/tools/loop-skill-hint.js +7 -0
- package/dist/tools/loop-skill-hint.js.map +1 -1
- package/dist/tools/modality/image-gen.d.ts +25 -6
- package/dist/tools/modality/image-gen.d.ts.map +1 -1
- package/dist/tools/modality/image-gen.js +46 -27
- package/dist/tools/modality/image-gen.js.map +1 -1
- package/dist/tools/modality/image-providers.d.ts +71 -0
- package/dist/tools/modality/image-providers.d.ts.map +1 -0
- package/dist/tools/modality/image-providers.js +277 -0
- package/dist/tools/modality/image-providers.js.map +1 -0
- package/dist/tools/registry.d.ts +10 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +35 -8
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run-cli.d.ts.map +1 -1
- package/dist/tools/run-cli.js +39 -1
- package/dist/tools/run-cli.js.map +1 -1
- package/dist/tools/run-terminal.d.ts.map +1 -1
- package/dist/tools/run-terminal.js +50 -6
- package/dist/tools/run-terminal.js.map +1 -1
- package/dist/tools/subagent-spawner.d.ts +8 -0
- package/dist/tools/subagent-spawner.d.ts.map +1 -1
- package/dist/tools/subagent-spawner.js +3 -0
- package/dist/tools/subagent-spawner.js.map +1 -1
- package/dist/tools/tool-loop.d.ts +55 -0
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +136 -0
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/untrusted-content.d.ts +29 -0
- package/dist/tools/untrusted-content.d.ts.map +1 -0
- package/dist/tools/untrusted-content.js +53 -0
- package/dist/tools/untrusted-content.js.map +1 -0
- package/dist/tools/web-research.d.ts +76 -14
- package/dist/tools/web-research.d.ts.map +1 -1
- package/dist/tools/web-research.js +280 -35
- package/dist/tools/web-research.js.map +1 -1
- package/dist/utils/effect-verification.d.ts +115 -0
- package/dist/utils/effect-verification.d.ts.map +1 -0
- package/dist/utils/effect-verification.js +337 -0
- package/dist/utils/effect-verification.js.map +1 -0
- package/dist/utils/open-url.d.ts +16 -0
- package/dist/utils/open-url.d.ts.map +1 -0
- package/dist/utils/open-url.js +32 -0
- package/dist/utils/open-url.js.map +1 -0
- package/dist/utils/project-env.d.ts +146 -0
- package/dist/utils/project-env.d.ts.map +1 -0
- package/dist/utils/project-env.js +584 -0
- package/dist/utils/project-env.js.map +1 -0
- package/dist/utils/shell.d.ts +7 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +2 -0
- package/dist/utils/shell.js.map +1 -1
- package/dist/web-dashboard/chat-console.d.ts +2 -0
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +7 -0
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +3 -1
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +534 -8
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +150 -1
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.d.ts +40 -0
- package/dist/web-dashboard/workspace-guard.d.ts.map +1 -0
- package/dist/web-dashboard/workspace-guard.js +92 -0
- package/dist/web-dashboard/workspace-guard.js.map +1 -0
- package/package.json +4 -1
- package/src/web-dashboard/public/assets/index-Beportyl.js +207 -0
- package/src/web-dashboard/public/assets/index-Beportyl.js.map +1 -0
- package/src/web-dashboard/public/assets/index-gtQyg9nm.css +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/src/web-dashboard/public/assets/index-D1YFCcIZ.js +0 -207
- package/src/web-dashboard/public/assets/index-D1YFCcIZ.js.map +0 -1
- package/src/web-dashboard/public/assets/index-jkW5qcf-.css +0 -1
|
@@ -6,18 +6,27 @@
|
|
|
6
6
|
* page's text to ground its answers — the single biggest "understanding"
|
|
7
7
|
* capability agent-nuvira was missing (capability gap #3, 🔴 MAJOR).
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
* - **DuckDuckGo HTML** (no key) —
|
|
11
|
-
* - **SearXNG** (self-host, OSS) — opt-in JSON endpoint
|
|
12
|
-
* - **
|
|
13
|
-
*
|
|
9
|
+
* Search backends — bring your own key (BYOK) or use the keyless default:
|
|
10
|
+
* - **DuckDuckGo HTML** (no key) — the always-available fallback.
|
|
11
|
+
* - **SearXNG** (self-host, OSS) — opt-in JSON endpoint (`SEARXNG_URL`).
|
|
12
|
+
* - **Brave Search** (`BRAVE_SEARCH_API_KEY`) — paid, high quality.
|
|
13
|
+
* - **Serper.dev** (`SERPER_API_KEY`) — paid Google SERP proxy.
|
|
14
|
+
* - **Tavily** (`TAVILY_API_KEY`) — paid, LLM-optimised.
|
|
15
|
+
* - **Google Custom Search** (`GOOGLE_CSE_API_KEY` + `GOOGLE_CSE_ID`).
|
|
14
16
|
*
|
|
15
|
-
*
|
|
16
|
-
* `
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
17
|
+
* Which backend runs is resolved by {@link resolveSearchProvider}: an explicit
|
|
18
|
+
* `provider` option wins, then the first backend whose key is configured (in
|
|
19
|
+
* {@link SEARCH_BACKEND_PRIORITY} order), then SearXNG, then DuckDuckGo. When a
|
|
20
|
+
* keyed backend returns nothing (or errors) the call degrades to DuckDuckGo so
|
|
21
|
+
* `web_search` never returns empty just because one provider is down.
|
|
22
|
+
*
|
|
23
|
+
* Page reading: **Jina Reader** (free tier, `JINA_API_KEY`) for page-to-markdown;
|
|
24
|
+
* falls back to a plain fetch + naive HTML→text strip when unconfigured.
|
|
25
|
+
*
|
|
26
|
+
* Every fetch carries a timeout + a real browser UA (robots-aware); results are
|
|
27
|
+
* cached in `context/cache.ts` (provider=`web`) so repeated queries never hit
|
|
28
|
+
* the network twice. `fetchFn` is injectable for the mocked-fetch tests (no
|
|
29
|
+
* network in tests).
|
|
21
30
|
*/
|
|
22
31
|
/** One search hit — the same {title,url,snippet} shape as web_search tools. */
|
|
23
32
|
export interface WebSearchResult {
|
|
@@ -25,9 +34,16 @@ export interface WebSearchResult {
|
|
|
25
34
|
url: string;
|
|
26
35
|
snippet: string;
|
|
27
36
|
}
|
|
37
|
+
/** A concrete search backend id. */
|
|
38
|
+
export type SearchProvider = 'brave' | 'serper' | 'tavily' | 'google-cse' | 'searxng' | 'duckduckgo';
|
|
28
39
|
export interface WebSearchOptions {
|
|
29
40
|
/** Max hits to return (default 5). */
|
|
30
41
|
maxResults?: number;
|
|
42
|
+
/**
|
|
43
|
+
* Explicit backend override. When omitted the first AVAILABLE backend in
|
|
44
|
+
* {@link SEARCH_BACKEND_PRIORITY} order is used. Unknown values are ignored.
|
|
45
|
+
*/
|
|
46
|
+
provider?: string;
|
|
31
47
|
/** SearXNG self-hosted JSON endpoint, e.g. http://localhost:8888/search. */
|
|
32
48
|
searxngUrl?: string;
|
|
33
49
|
/** Injectable fetch (tests stub it; defaults to global fetch). */
|
|
@@ -43,6 +59,41 @@ export interface ReadPageOptions {
|
|
|
43
59
|
/** Fetch timeout in ms (default 20_000). */
|
|
44
60
|
timeoutMs?: number;
|
|
45
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* A search backend descriptor. `keyEnvVars` lists every env var that can carry
|
|
64
|
+
* the credential (first set wins); plain names are checked alongside the
|
|
65
|
+
* `NUVIRA_`/`BUFF_` prefixed forms so both a bare export and the nuvira-style
|
|
66
|
+
* override work.
|
|
67
|
+
*/
|
|
68
|
+
interface SearchBackend {
|
|
69
|
+
id: SearchProvider;
|
|
70
|
+
label: string;
|
|
71
|
+
/** Env vars that can supply the key (empty = keyless). */
|
|
72
|
+
keyEnvVars: string[];
|
|
73
|
+
/** Extra required env var (e.g. Google CSE also needs the engine id). */
|
|
74
|
+
extraEnvVars?: string[];
|
|
75
|
+
/** True when an API key is required. */
|
|
76
|
+
requiresKey: boolean;
|
|
77
|
+
/** Cost note for diagnostics. */
|
|
78
|
+
free: boolean;
|
|
79
|
+
}
|
|
80
|
+
/** The catalog — single source of backend metadata. */
|
|
81
|
+
export declare const SEARCH_BACKENDS: Record<SearchProvider, SearchBackend>;
|
|
82
|
+
/**
|
|
83
|
+
* Auto-selection order when no explicit provider is configured. A user who set
|
|
84
|
+
* several keys gets the highest-quality one; `searxng` and `duckduckgo` are the
|
|
85
|
+
* keyless tail so a search always works.
|
|
86
|
+
*/
|
|
87
|
+
export declare const SEARCH_BACKEND_PRIORITY: readonly SearchProvider[];
|
|
88
|
+
/** Is a specific backend usable right now (key/endpoint present)? */
|
|
89
|
+
export declare function isBackendAvailable(provider: SearchProvider, options?: WebSearchOptions): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Which backend will actually run. Explicit `provider` (when known) wins, then
|
|
92
|
+
* the first available backend in priority order. Never throws.
|
|
93
|
+
*/
|
|
94
|
+
export declare function resolveSearchProvider(options?: WebSearchOptions): SearchProvider;
|
|
95
|
+
/** Every backend id with a configured key/endpoint (for CLI + dashboard). */
|
|
96
|
+
export declare function availableSearchBackends(options?: WebSearchOptions): SearchProvider[];
|
|
46
97
|
/** DDG needs no key → web search is available out of the box. */
|
|
47
98
|
export declare function isWebSearchAvailable(): boolean;
|
|
48
99
|
/**
|
|
@@ -53,10 +104,20 @@ export declare function isWebSearchAvailable(): boolean;
|
|
|
53
104
|
export declare function parseDuckDuckGoHtml(html: string, maxResults: number): WebSearchResult[];
|
|
54
105
|
/** SearXNG JSON → the same result shape (format=json returns `results[]`). */
|
|
55
106
|
export declare function parseSearxngJson(json: unknown, maxResults: number): WebSearchResult[];
|
|
107
|
+
/** Brave Search `{ web: { results: [{ title, url, description }] } }`. */
|
|
108
|
+
export declare function parseBraveJson(json: unknown, maxResults: number): WebSearchResult[];
|
|
109
|
+
/** Serper.dev `{ organic: [{ title, link, snippet }] }`. */
|
|
110
|
+
export declare function parseSerperJson(json: unknown, maxResults: number): WebSearchResult[];
|
|
111
|
+
/** Tavily `{ results: [{ title, url, content }] }`. */
|
|
112
|
+
export declare function parseTavilyJson(json: unknown, maxResults: number): WebSearchResult[];
|
|
113
|
+
/** Google Custom Search `{ items: [{ title, link, snippet }] }`. */
|
|
114
|
+
export declare function parseGoogleCseJson(json: unknown, maxResults: number): WebSearchResult[];
|
|
56
115
|
/**
|
|
57
|
-
* Search the web.
|
|
58
|
-
*
|
|
59
|
-
*
|
|
116
|
+
* Search the web. Backend: an explicit `provider` option, else the first
|
|
117
|
+
* AVAILABLE backend in priority order (Brave → Serper → Tavily → Google CSE →
|
|
118
|
+
* SearXNG → DuckDuckGo). When a keyed backend yields nothing, the query is
|
|
119
|
+
* retried once on the keyless DuckDuckGo fallback. Results cached in
|
|
120
|
+
* context/cache.ts (provider=`web`) keyed by backend+query.
|
|
60
121
|
*/
|
|
61
122
|
export declare function searchWeb(query: string, options?: WebSearchOptions): Promise<WebSearchResult[]>;
|
|
62
123
|
/**
|
|
@@ -71,4 +132,5 @@ export declare function readWebPage(url: string, options?: ReadPageOptions): Pro
|
|
|
71
132
|
* cloud metadata (169.254.169.254) and internal services are unreachable.
|
|
72
133
|
*/
|
|
73
134
|
export declare function isAllowedReadUrl(url: string): boolean;
|
|
135
|
+
export {};
|
|
74
136
|
//# sourceMappingURL=web-research.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-research.d.ts","sourceRoot":"","sources":["../../src/tools/web-research.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"web-research.d.ts","sourceRoot":"","sources":["../../src/tools/web-research.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAOH,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oCAAoC;AACpC,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD;;;;;GAKG;AACH,UAAU,aAAa;IACrB,EAAE,EAAE,cAAc,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,wCAAwC;IACxC,WAAW,EAAE,OAAO,CAAC;IACrB,iCAAiC;IACjC,IAAI,EAAE,OAAO,CAAC;CACf;AAED,uDAAuD;AACvD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,aAAa,CA4CjE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,cAAc,EAO5D,CAAC;AAgBF,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAQpG;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,gBAAqB,GAAG,cAAc,CAOpF;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,gBAAqB,GAAG,cAAc,EAAE,CAExF;AA8BD,iEAAiE;AACjE,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAID;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE,CAyBvF;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE,CAQrF;AAUD,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE,CAOnF;AAED,4DAA4D;AAC5D,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE,CAOpF;AAED,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE,CAOpF;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE,CAOvF;AAkJD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC,CA4B5B;AAID;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyC7F;AAoBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAwBrD"}
|
|
@@ -6,18 +6,27 @@
|
|
|
6
6
|
* page's text to ground its answers — the single biggest "understanding"
|
|
7
7
|
* capability agent-nuvira was missing (capability gap #3, 🔴 MAJOR).
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
* - **DuckDuckGo HTML** (no key) —
|
|
11
|
-
* - **SearXNG** (self-host, OSS) — opt-in JSON endpoint
|
|
12
|
-
* - **
|
|
13
|
-
*
|
|
9
|
+
* Search backends — bring your own key (BYOK) or use the keyless default:
|
|
10
|
+
* - **DuckDuckGo HTML** (no key) — the always-available fallback.
|
|
11
|
+
* - **SearXNG** (self-host, OSS) — opt-in JSON endpoint (`SEARXNG_URL`).
|
|
12
|
+
* - **Brave Search** (`BRAVE_SEARCH_API_KEY`) — paid, high quality.
|
|
13
|
+
* - **Serper.dev** (`SERPER_API_KEY`) — paid Google SERP proxy.
|
|
14
|
+
* - **Tavily** (`TAVILY_API_KEY`) — paid, LLM-optimised.
|
|
15
|
+
* - **Google Custom Search** (`GOOGLE_CSE_API_KEY` + `GOOGLE_CSE_ID`).
|
|
14
16
|
*
|
|
15
|
-
*
|
|
16
|
-
* `
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
17
|
+
* Which backend runs is resolved by {@link resolveSearchProvider}: an explicit
|
|
18
|
+
* `provider` option wins, then the first backend whose key is configured (in
|
|
19
|
+
* {@link SEARCH_BACKEND_PRIORITY} order), then SearXNG, then DuckDuckGo. When a
|
|
20
|
+
* keyed backend returns nothing (or errors) the call degrades to DuckDuckGo so
|
|
21
|
+
* `web_search` never returns empty just because one provider is down.
|
|
22
|
+
*
|
|
23
|
+
* Page reading: **Jina Reader** (free tier, `JINA_API_KEY`) for page-to-markdown;
|
|
24
|
+
* falls back to a plain fetch + naive HTML→text strip when unconfigured.
|
|
25
|
+
*
|
|
26
|
+
* Every fetch carries a timeout + a real browser UA (robots-aware); results are
|
|
27
|
+
* cached in `context/cache.ts` (provider=`web`) so repeated queries never hit
|
|
28
|
+
* the network twice. `fetchFn` is injectable for the mocked-fetch tests (no
|
|
29
|
+
* network in tests).
|
|
21
30
|
*/
|
|
22
31
|
import { getCache } from '../context/cache.js';
|
|
23
32
|
import { envBuff } from '../config/paths.js';
|
|
@@ -25,6 +34,111 @@ import { envBuff } from '../config/paths.js';
|
|
|
25
34
|
const BROWSER_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36';
|
|
26
35
|
const DEFAULT_SEARCH_TTL = 6 * 3600; // 6h — search results drift slowly
|
|
27
36
|
const DEFAULT_PAGE_TTL = 24 * 3600; // 24h — page text is stable
|
|
37
|
+
/** The catalog — single source of backend metadata. */
|
|
38
|
+
export const SEARCH_BACKENDS = {
|
|
39
|
+
brave: {
|
|
40
|
+
id: 'brave',
|
|
41
|
+
label: 'Brave Search',
|
|
42
|
+
keyEnvVars: ['BRAVE_SEARCH_API_KEY', 'BRAVE_API_KEY'],
|
|
43
|
+
requiresKey: true,
|
|
44
|
+
free: false,
|
|
45
|
+
},
|
|
46
|
+
serper: {
|
|
47
|
+
id: 'serper',
|
|
48
|
+
label: 'Serper.dev',
|
|
49
|
+
keyEnvVars: ['SERPER_API_KEY'],
|
|
50
|
+
requiresKey: true,
|
|
51
|
+
free: false,
|
|
52
|
+
},
|
|
53
|
+
tavily: {
|
|
54
|
+
id: 'tavily',
|
|
55
|
+
label: 'Tavily',
|
|
56
|
+
keyEnvVars: ['TAVILY_API_KEY'],
|
|
57
|
+
requiresKey: true,
|
|
58
|
+
free: false,
|
|
59
|
+
},
|
|
60
|
+
'google-cse': {
|
|
61
|
+
id: 'google-cse',
|
|
62
|
+
label: 'Google Custom Search',
|
|
63
|
+
keyEnvVars: ['GOOGLE_CSE_API_KEY', 'GOOGLE_API_KEY'],
|
|
64
|
+
extraEnvVars: ['GOOGLE_CSE_ID', 'GOOGLE_CSE_CX'],
|
|
65
|
+
requiresKey: true,
|
|
66
|
+
free: false,
|
|
67
|
+
},
|
|
68
|
+
searxng: {
|
|
69
|
+
id: 'searxng',
|
|
70
|
+
label: 'SearXNG (self-hosted)',
|
|
71
|
+
keyEnvVars: [],
|
|
72
|
+
requiresKey: false,
|
|
73
|
+
free: true,
|
|
74
|
+
},
|
|
75
|
+
duckduckgo: {
|
|
76
|
+
id: 'duckduckgo',
|
|
77
|
+
label: 'DuckDuckGo (keyless)',
|
|
78
|
+
keyEnvVars: [],
|
|
79
|
+
requiresKey: false,
|
|
80
|
+
free: true,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Auto-selection order when no explicit provider is configured. A user who set
|
|
85
|
+
* several keys gets the highest-quality one; `searxng` and `duckduckgo` are the
|
|
86
|
+
* keyless tail so a search always works.
|
|
87
|
+
*/
|
|
88
|
+
export const SEARCH_BACKEND_PRIORITY = [
|
|
89
|
+
'brave',
|
|
90
|
+
'serper',
|
|
91
|
+
'tavily',
|
|
92
|
+
'google-cse',
|
|
93
|
+
'searxng',
|
|
94
|
+
'duckduckgo',
|
|
95
|
+
];
|
|
96
|
+
/** Read the first non-empty value among names (prefixed + plain). */
|
|
97
|
+
function keyFromEnv(names) {
|
|
98
|
+
for (const name of names) {
|
|
99
|
+
const value = (envBuff(name) ?? process.env[name])?.trim();
|
|
100
|
+
if (value)
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
/** Resolve the effective SearXNG endpoint (explicit option or env). */
|
|
106
|
+
function searxngEndpoint(options) {
|
|
107
|
+
return options.searxngUrl || envBuff('SEARXNG_URL');
|
|
108
|
+
}
|
|
109
|
+
/** Is a specific backend usable right now (key/endpoint present)? */
|
|
110
|
+
export function isBackendAvailable(provider, options = {}) {
|
|
111
|
+
const backend = SEARCH_BACKENDS[provider];
|
|
112
|
+
if (!backend)
|
|
113
|
+
return false;
|
|
114
|
+
if (provider === 'duckduckgo')
|
|
115
|
+
return true;
|
|
116
|
+
if (provider === 'searxng')
|
|
117
|
+
return Boolean(searxngEndpoint(options));
|
|
118
|
+
if (!keyFromEnv(backend.keyEnvVars))
|
|
119
|
+
return false;
|
|
120
|
+
if (backend.extraEnvVars && !keyFromEnv(backend.extraEnvVars))
|
|
121
|
+
return false;
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Which backend will actually run. Explicit `provider` (when known) wins, then
|
|
126
|
+
* the first available backend in priority order. Never throws.
|
|
127
|
+
*/
|
|
128
|
+
export function resolveSearchProvider(options = {}) {
|
|
129
|
+
const explicit = options.provider;
|
|
130
|
+
if (explicit && SEARCH_BACKENDS[explicit])
|
|
131
|
+
return explicit;
|
|
132
|
+
for (const id of SEARCH_BACKEND_PRIORITY) {
|
|
133
|
+
if (isBackendAvailable(id, options))
|
|
134
|
+
return id;
|
|
135
|
+
}
|
|
136
|
+
return 'duckduckgo';
|
|
137
|
+
}
|
|
138
|
+
/** Every backend id with a configured key/endpoint (for CLI + dashboard). */
|
|
139
|
+
export function availableSearchBackends(options = {}) {
|
|
140
|
+
return SEARCH_BACKEND_PRIORITY.filter((id) => isBackendAvailable(id, options));
|
|
141
|
+
}
|
|
28
142
|
// ─── Fetch helper ───────────────────────────────────────────────────────────
|
|
29
143
|
/** fetch with timeout + browser UA. Aborts via AbortSignal.timeout when free. */
|
|
30
144
|
async function fetchWithTimeout(url, init, timeoutMs, fetchFn) {
|
|
@@ -36,7 +150,7 @@ async function fetchWithTimeout(url, init, timeoutMs, fetchFn) {
|
|
|
36
150
|
signal: controller.signal,
|
|
37
151
|
headers: {
|
|
38
152
|
'User-Agent': BROWSER_UA,
|
|
39
|
-
Accept: 'text/html,application/xhtml+xml,text/plain,*/*;q=0.8',
|
|
153
|
+
Accept: 'text/html,application/xhtml+xml,application/json,text/plain,*/*;q=0.8',
|
|
40
154
|
...(init.headers || {}),
|
|
41
155
|
},
|
|
42
156
|
});
|
|
@@ -95,20 +209,161 @@ export function parseSearxngJson(json, maxResults) {
|
|
|
95
209
|
.slice(0, maxResults)
|
|
96
210
|
.map((r) => ({ title: r.title, url: r.url, snippet: (r.content || '').trim() }));
|
|
97
211
|
}
|
|
212
|
+
// ─── Hosted-backend JSON parsers (one per provider shape) ───────────────────
|
|
213
|
+
/** Shared cleanup: strip tags/entities from a provider snippet. */
|
|
214
|
+
function cleanSnippet(value) {
|
|
215
|
+
if (typeof value !== 'string')
|
|
216
|
+
return '';
|
|
217
|
+
return stripTags(decodeEntities(value)).trim();
|
|
218
|
+
}
|
|
219
|
+
/** Brave Search `{ web: { results: [{ title, url, description }] } }`. */
|
|
220
|
+
export function parseBraveJson(json, maxResults) {
|
|
221
|
+
const arr = json?.web?.results;
|
|
222
|
+
if (!Array.isArray(arr))
|
|
223
|
+
return [];
|
|
224
|
+
return arr
|
|
225
|
+
.filter((r) => r && r.title && r.url)
|
|
226
|
+
.slice(0, maxResults)
|
|
227
|
+
.map((r) => ({ title: cleanSnippet(r.title), url: r.url, snippet: cleanSnippet(r.description) }));
|
|
228
|
+
}
|
|
229
|
+
/** Serper.dev `{ organic: [{ title, link, snippet }] }`. */
|
|
230
|
+
export function parseSerperJson(json, maxResults) {
|
|
231
|
+
const arr = json?.organic;
|
|
232
|
+
if (!Array.isArray(arr))
|
|
233
|
+
return [];
|
|
234
|
+
return arr
|
|
235
|
+
.filter((r) => r && r.title && r.link)
|
|
236
|
+
.slice(0, maxResults)
|
|
237
|
+
.map((r) => ({ title: cleanSnippet(r.title), url: r.link, snippet: cleanSnippet(r.snippet) }));
|
|
238
|
+
}
|
|
239
|
+
/** Tavily `{ results: [{ title, url, content }] }`. */
|
|
240
|
+
export function parseTavilyJson(json, maxResults) {
|
|
241
|
+
const arr = json?.results;
|
|
242
|
+
if (!Array.isArray(arr))
|
|
243
|
+
return [];
|
|
244
|
+
return arr
|
|
245
|
+
.filter((r) => r && r.title && r.url)
|
|
246
|
+
.slice(0, maxResults)
|
|
247
|
+
.map((r) => ({ title: cleanSnippet(r.title), url: r.url, snippet: cleanSnippet(r.content) }));
|
|
248
|
+
}
|
|
249
|
+
/** Google Custom Search `{ items: [{ title, link, snippet }] }`. */
|
|
250
|
+
export function parseGoogleCseJson(json, maxResults) {
|
|
251
|
+
const arr = json?.items;
|
|
252
|
+
if (!Array.isArray(arr))
|
|
253
|
+
return [];
|
|
254
|
+
return arr
|
|
255
|
+
.filter((r) => r && r.title && r.link)
|
|
256
|
+
.slice(0, maxResults)
|
|
257
|
+
.map((r) => ({ title: cleanSnippet(r.title), url: r.link, snippet: cleanSnippet(r.snippet) }));
|
|
258
|
+
}
|
|
259
|
+
// ─── Backend runners ────────────────────────────────────────────────────────
|
|
260
|
+
/** DuckDuckGo HTML lite (no key). */
|
|
261
|
+
async function runDuckDuckGo(query, maxResults, timeoutMs, fetchFn) {
|
|
262
|
+
const url = `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`;
|
|
263
|
+
const res = await fetchWithTimeout(url, {}, timeoutMs, fetchFn);
|
|
264
|
+
if (!res.ok)
|
|
265
|
+
return [];
|
|
266
|
+
return parseDuckDuckGoHtml(await res.text(), maxResults);
|
|
267
|
+
}
|
|
268
|
+
/** SearXNG self-hosted JSON endpoint. */
|
|
269
|
+
async function runSearxng(query, maxResults, endpoint, timeoutMs, fetchFn) {
|
|
270
|
+
const url = `${endpoint.replace(/\/$/, '')}/search?q=${encodeURIComponent(query)}&format=json`;
|
|
271
|
+
const res = await fetchWithTimeout(url, {}, timeoutMs, fetchFn);
|
|
272
|
+
if (!res.ok)
|
|
273
|
+
return [];
|
|
274
|
+
return parseSearxngJson(await res.json(), maxResults);
|
|
275
|
+
}
|
|
276
|
+
/** Brave Search API (`X-Subscription-Token`). */
|
|
277
|
+
async function runBrave(query, maxResults, timeoutMs, fetchFn) {
|
|
278
|
+
const key = keyFromEnv(SEARCH_BACKENDS.brave.keyEnvVars);
|
|
279
|
+
if (!key)
|
|
280
|
+
return [];
|
|
281
|
+
const count = Math.min(maxResults, 20);
|
|
282
|
+
const url = `https://api.search.brave.com/res/v1/web/search?q=${encodeURIComponent(query)}&count=${count}`;
|
|
283
|
+
const res = await fetchWithTimeout(url, { headers: { 'X-Subscription-Token': key, Accept: 'application/json' } }, timeoutMs, fetchFn);
|
|
284
|
+
if (!res.ok)
|
|
285
|
+
return [];
|
|
286
|
+
return parseBraveJson(await res.json(), maxResults);
|
|
287
|
+
}
|
|
288
|
+
/** Serper.dev Google SERP proxy (`X-API-KEY`, POST {q}). */
|
|
289
|
+
async function runSerper(query, maxResults, timeoutMs, fetchFn) {
|
|
290
|
+
const key = keyFromEnv(SEARCH_BACKENDS.serper.keyEnvVars);
|
|
291
|
+
if (!key)
|
|
292
|
+
return [];
|
|
293
|
+
const res = await fetchWithTimeout('https://google.serper.dev/search', {
|
|
294
|
+
method: 'POST',
|
|
295
|
+
headers: { 'X-API-KEY': key, 'content-type': 'application/json' },
|
|
296
|
+
body: JSON.stringify({ q: query, num: maxResults }),
|
|
297
|
+
}, timeoutMs, fetchFn);
|
|
298
|
+
if (!res.ok)
|
|
299
|
+
return [];
|
|
300
|
+
return parseSerperJson(await res.json(), maxResults);
|
|
301
|
+
}
|
|
302
|
+
/** Tavily (`Authorization: Bearer`, POST {query}). */
|
|
303
|
+
async function runTavily(query, maxResults, timeoutMs, fetchFn) {
|
|
304
|
+
const key = keyFromEnv(SEARCH_BACKENDS.tavily.keyEnvVars);
|
|
305
|
+
if (!key)
|
|
306
|
+
return [];
|
|
307
|
+
const res = await fetchWithTimeout('https://api.tavily.com/search', {
|
|
308
|
+
method: 'POST',
|
|
309
|
+
headers: { Authorization: `Bearer ${key}`, 'content-type': 'application/json' },
|
|
310
|
+
body: JSON.stringify({ query, max_results: maxResults, search_depth: 'basic' }),
|
|
311
|
+
}, timeoutMs, fetchFn);
|
|
312
|
+
if (!res.ok)
|
|
313
|
+
return [];
|
|
314
|
+
return parseTavilyJson(await res.json(), maxResults);
|
|
315
|
+
}
|
|
316
|
+
/** Google Custom Search JSON API (`key` + `cx`). */
|
|
317
|
+
async function runGoogleCse(query, maxResults, timeoutMs, fetchFn) {
|
|
318
|
+
const key = keyFromEnv(SEARCH_BACKENDS['google-cse'].keyEnvVars);
|
|
319
|
+
const cx = keyFromEnv(SEARCH_BACKENDS['google-cse'].extraEnvVars ?? []);
|
|
320
|
+
if (!key || !cx)
|
|
321
|
+
return [];
|
|
322
|
+
const num = Math.min(maxResults, 10);
|
|
323
|
+
const url = `https://www.googleapis.com/customsearch/v1?key=${encodeURIComponent(key)}&cx=${encodeURIComponent(cx)}&q=${encodeURIComponent(query)}&num=${num}`;
|
|
324
|
+
const res = await fetchWithTimeout(url, {}, timeoutMs, fetchFn);
|
|
325
|
+
if (!res.ok)
|
|
326
|
+
return [];
|
|
327
|
+
return parseGoogleCseJson(await res.json(), maxResults);
|
|
328
|
+
}
|
|
329
|
+
/** Dispatch a query to one concrete backend. */
|
|
330
|
+
async function runBackend(provider, query, options, fetchFn, timeoutMs) {
|
|
331
|
+
const maxResults = options.maxResults ?? 5;
|
|
332
|
+
switch (provider) {
|
|
333
|
+
case 'brave':
|
|
334
|
+
return runBrave(query, maxResults, timeoutMs, fetchFn);
|
|
335
|
+
case 'serper':
|
|
336
|
+
return runSerper(query, maxResults, timeoutMs, fetchFn);
|
|
337
|
+
case 'tavily':
|
|
338
|
+
return runTavily(query, maxResults, timeoutMs, fetchFn);
|
|
339
|
+
case 'google-cse':
|
|
340
|
+
return runGoogleCse(query, maxResults, timeoutMs, fetchFn);
|
|
341
|
+
case 'searxng': {
|
|
342
|
+
const endpoint = searxngEndpoint(options);
|
|
343
|
+
if (!endpoint)
|
|
344
|
+
return [];
|
|
345
|
+
return runSearxng(query, maxResults, endpoint, timeoutMs, fetchFn);
|
|
346
|
+
}
|
|
347
|
+
case 'duckduckgo':
|
|
348
|
+
default:
|
|
349
|
+
return runDuckDuckGo(query, maxResults, timeoutMs, fetchFn);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
98
352
|
// ─── searchWeb ──────────────────────────────────────────────────────────────
|
|
99
353
|
/**
|
|
100
|
-
* Search the web.
|
|
101
|
-
*
|
|
102
|
-
*
|
|
354
|
+
* Search the web. Backend: an explicit `provider` option, else the first
|
|
355
|
+
* AVAILABLE backend in priority order (Brave → Serper → Tavily → Google CSE →
|
|
356
|
+
* SearXNG → DuckDuckGo). When a keyed backend yields nothing, the query is
|
|
357
|
+
* retried once on the keyless DuckDuckGo fallback. Results cached in
|
|
358
|
+
* context/cache.ts (provider=`web`) keyed by backend+query.
|
|
103
359
|
*/
|
|
104
360
|
export async function searchWeb(query, options = {}) {
|
|
105
361
|
const fetchFn = options.fetchFn || globalThis.fetch.bind(globalThis);
|
|
106
|
-
const maxResults = options.maxResults ?? 5;
|
|
107
362
|
const timeoutMs = options.timeoutMs ?? 15_000;
|
|
363
|
+
const provider = resolveSearchProvider(options);
|
|
108
364
|
const cache = getCache();
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
const cached = await cache.get(cacheKey, 'web', backend);
|
|
365
|
+
const cacheKey = `${provider}:${query}`;
|
|
366
|
+
const cached = await cache.get(cacheKey, 'web', provider);
|
|
112
367
|
if (cached) {
|
|
113
368
|
try {
|
|
114
369
|
return JSON.parse(cached);
|
|
@@ -117,27 +372,17 @@ export async function searchWeb(query, options = {}) {
|
|
|
117
372
|
}
|
|
118
373
|
let results = [];
|
|
119
374
|
try {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
results = parseSearxngJson(json, maxResults);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
if (results.length === 0) {
|
|
129
|
-
const url = `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`;
|
|
130
|
-
const res = await fetchWithTimeout(url, {}, timeoutMs, fetchFn);
|
|
131
|
-
if (res.ok) {
|
|
132
|
-
const html = await res.text();
|
|
133
|
-
results = parseDuckDuckGoHtml(html, maxResults);
|
|
134
|
-
}
|
|
375
|
+
results = await runBackend(provider, query, options, fetchFn, timeoutMs);
|
|
376
|
+
// Keyed backend down or empty → degrade to the keyless fallback so a
|
|
377
|
+
// `web_search` never silently returns nothing because one provider failed.
|
|
378
|
+
if (results.length === 0 && provider !== 'duckduckgo') {
|
|
379
|
+
results = await runDuckDuckGo(query, options.maxResults ?? 5, timeoutMs, fetchFn);
|
|
135
380
|
}
|
|
136
381
|
}
|
|
137
382
|
catch {
|
|
138
383
|
return []; // network failure → empty, never throw into the tool loop
|
|
139
384
|
}
|
|
140
|
-
await cache.set(cacheKey, JSON.stringify(results), 'web',
|
|
385
|
+
await cache.set(cacheKey, JSON.stringify(results), 'web', provider, DEFAULT_SEARCH_TTL);
|
|
141
386
|
return results;
|
|
142
387
|
}
|
|
143
388
|
// ─── readWebPage ────────────────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-research.js","sourceRoot":"","sources":["../../src/tools/web-research.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web-research.js","sourceRoot":"","sources":["../../src/tools/web-research.ts"],"names":[],"mappings":"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"}
|