@staticn0va/wigolo 0.4.0 → 0.6.0
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/SKILL.md +279 -68
- package/dist/agent/executor.d.ts +13 -0
- package/dist/agent/executor.d.ts.map +1 -0
- package/dist/agent/executor.js +128 -0
- package/dist/agent/executor.js.map +1 -0
- package/dist/agent/pipeline.d.ts +5 -0
- package/dist/agent/pipeline.d.ts.map +1 -0
- package/dist/agent/pipeline.js +198 -0
- package/dist/agent/pipeline.js.map +1 -0
- package/dist/agent/planner.d.ts +9 -0
- package/dist/agent/planner.d.ts.map +1 -0
- package/dist/agent/planner.js +190 -0
- package/dist/agent/planner.js.map +1 -0
- package/dist/cache/db.d.ts.map +1 -1
- package/dist/cache/db.js +32 -0
- package/dist/cache/db.js.map +1 -1
- package/dist/cache/store.d.ts +14 -0
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +69 -0
- package/dist/cache/store.js.map +1 -1
- package/dist/cli/warmup.d.ts +4 -0
- package/dist/cli/warmup.d.ts.map +1 -1
- package/dist/cli/warmup.js +58 -0
- package/dist/cli/warmup.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/embedding/embed.d.ts +19 -0
- package/dist/embedding/embed.d.ts.map +1 -0
- package/dist/embedding/embed.js +131 -0
- package/dist/embedding/embed.js.map +1 -0
- package/dist/embedding/key-terms.d.ts +12 -0
- package/dist/embedding/key-terms.d.ts.map +1 -0
- package/dist/embedding/key-terms.js +138 -0
- package/dist/embedding/key-terms.js.map +1 -0
- package/dist/embedding/subprocess.d.ts +31 -0
- package/dist/embedding/subprocess.d.ts.map +1 -0
- package/dist/embedding/subprocess.js +213 -0
- package/dist/embedding/subprocess.js.map +1 -0
- package/dist/embedding/vector-index.d.ts +26 -0
- package/dist/embedding/vector-index.d.ts.map +1 -0
- package/dist/embedding/vector-index.js +78 -0
- package/dist/embedding/vector-index.js.map +1 -0
- package/dist/fetch/browser-pool.d.ts.map +1 -1
- package/dist/fetch/browser-pool.js +61 -0
- package/dist/fetch/browser-pool.js.map +1 -1
- package/dist/fetch/browser-types.js +1 -1
- package/dist/fetch/browser-types.js.map +1 -1
- package/dist/fetch/lightpanda.d.ts +28 -0
- package/dist/fetch/lightpanda.d.ts.map +1 -0
- package/dist/fetch/lightpanda.js +177 -0
- package/dist/fetch/lightpanda.js.map +1 -0
- package/dist/fetch/router.d.ts +1 -0
- package/dist/fetch/router.d.ts.map +1 -1
- package/dist/fetch/router.js.map +1 -1
- package/dist/instructions.d.ts +9 -6
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +111 -21
- package/dist/instructions.js.map +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/repl/commands/agent.d.ts +5 -0
- package/dist/repl/commands/agent.d.ts.map +1 -0
- package/dist/repl/commands/agent.js +48 -0
- package/dist/repl/commands/agent.js.map +1 -0
- package/dist/repl/commands/find-similar.d.ts +5 -0
- package/dist/repl/commands/find-similar.d.ts.map +1 -0
- package/dist/repl/commands/find-similar.js +61 -0
- package/dist/repl/commands/find-similar.js.map +1 -0
- package/dist/repl/commands/research.d.ts +5 -0
- package/dist/repl/commands/research.d.ts.map +1 -0
- package/dist/repl/commands/research.js +50 -0
- package/dist/repl/commands/research.js.map +1 -0
- package/dist/repl/formatters.d.ts +4 -1
- package/dist/repl/formatters.d.ts.map +1 -1
- package/dist/repl/formatters.js +73 -0
- package/dist/repl/formatters.js.map +1 -1
- package/dist/repl/shell.d.ts.map +1 -1
- package/dist/repl/shell.js +22 -1
- package/dist/repl/shell.js.map +1 -1
- package/dist/research/decompose.d.ts +7 -0
- package/dist/research/decompose.d.ts.map +1 -0
- package/dist/research/decompose.js +195 -0
- package/dist/research/decompose.js.map +1 -0
- package/dist/research/pipeline.d.ts +5 -0
- package/dist/research/pipeline.d.ts.map +1 -0
- package/dist/research/pipeline.js +135 -0
- package/dist/research/pipeline.js.map +1 -0
- package/dist/research/synthesize.d.ts +10 -0
- package/dist/research/synthesize.d.ts.map +1 -0
- package/dist/research/synthesize.js +119 -0
- package/dist/research/synthesize.js.map +1 -0
- package/dist/search/answer-synthesis.d.ts +13 -0
- package/dist/search/answer-synthesis.d.ts.map +1 -0
- package/dist/search/answer-synthesis.js +120 -0
- package/dist/search/answer-synthesis.js.map +1 -0
- package/dist/search/find-similar.d.ts +5 -0
- package/dist/search/find-similar.d.ts.map +1 -0
- package/dist/search/find-similar.js +436 -0
- package/dist/search/find-similar.js.map +1 -0
- package/dist/search/multi-query.d.ts +22 -0
- package/dist/search/multi-query.d.ts.map +1 -0
- package/dist/search/multi-query.js +157 -0
- package/dist/search/multi-query.js.map +1 -0
- package/dist/search/rrf.d.ts +17 -0
- package/dist/search/rrf.d.ts.map +1 -0
- package/dist/search/rrf.js +48 -0
- package/dist/search/rrf.js.map +1 -0
- package/dist/search/sampling.d.ts +25 -0
- package/dist/search/sampling.d.ts.map +1 -0
- package/dist/search/sampling.js +52 -0
- package/dist/search/sampling.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +210 -5
- package/dist/server.js.map +1 -1
- package/dist/tools/agent.d.ts +5 -0
- package/dist/tools/agent.d.ts.map +1 -0
- package/dist/tools/agent.js +67 -0
- package/dist/tools/agent.js.map +1 -0
- package/dist/tools/fetch.d.ts.map +1 -1
- package/dist/tools/fetch.js +16 -4
- package/dist/tools/fetch.js.map +1 -1
- package/dist/tools/find-similar.d.ts +5 -0
- package/dist/tools/find-similar.d.ts.map +1 -0
- package/dist/tools/find-similar.js +48 -0
- package/dist/tools/find-similar.js.map +1 -0
- package/dist/tools/research.d.ts +5 -0
- package/dist/tools/research.d.ts.map +1 -0
- package/dist/tools/research.js +50 -0
- package/dist/tools/research.js.map +1 -0
- package/dist/tools/search.d.ts +3 -2
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +217 -14
- package/dist/tools/search.js.map +1 -1
- package/dist/types.d.ts +108 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +10 -3
package/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wigolo
|
|
3
|
-
description: Local-first web
|
|
3
|
+
description: Local-first web access MCP server for AI coding agents. Eight tools for search, fetch, crawl, cache, extract, find similar, research, and agent-driven data gathering. No API keys. Results cached in local SQLite.
|
|
4
4
|
author: KnockOutEZ
|
|
5
5
|
license: BUSL-1.1
|
|
6
6
|
repository: https://github.com/KnockOutEZ/wigolo
|
|
@@ -9,23 +9,29 @@ install: npx @staticn0va/wigolo
|
|
|
9
9
|
runtime: node
|
|
10
10
|
min_runtime_version: "20"
|
|
11
11
|
tools:
|
|
12
|
-
- name: search
|
|
13
|
-
description: Search the web and return results with optional full content extraction. Supports domain filtering, date ranges, categories, and ML reranking.
|
|
14
12
|
- name: fetch
|
|
15
|
-
description: Fetch
|
|
13
|
+
description: Fetch one URL, return clean markdown. Auto-routes between HTTP and Playwright. Supports sections, auth, screenshots, browser actions.
|
|
14
|
+
- name: search
|
|
15
|
+
description: Search the web, return extracted markdown per result. Single query or array of query variants. Domain, category, date filters. Optional synthesized answer via MCP sampling.
|
|
16
16
|
- name: crawl
|
|
17
|
-
description: Crawl a
|
|
17
|
+
description: Crawl a site from a seed URL. BFS, DFS, sitemap, or map (URL-only) strategies with regex include/exclude filters.
|
|
18
18
|
- name: cache
|
|
19
|
-
description:
|
|
19
|
+
description: FTS5 search over previously fetched content. URL glob, date filters, stats, clear, and change detection via re-fetch.
|
|
20
20
|
- name: extract
|
|
21
|
-
description:
|
|
21
|
+
description: Structured extraction from URL or raw HTML. Modes: selector (CSS), tables, metadata (meta + JSON-LD), schema (heuristic field matching).
|
|
22
|
+
- name: find_similar
|
|
23
|
+
description: Find pages similar to a URL or concept. Hybrid cache (FTS5 + embeddings) + optional web supplement.
|
|
24
|
+
- name: research
|
|
25
|
+
description: Multi-step research pipeline. Question decomposition, parallel sub-search, source synthesis with citations. Quick, standard, or comprehensive depth.
|
|
26
|
+
- name: agent
|
|
27
|
+
description: Natural-language data gathering. Plans searches/URLs, fetches in parallel within page and time budgets, optionally applies a JSON Schema to each page.
|
|
22
28
|
---
|
|
23
29
|
|
|
24
30
|
# wigolo
|
|
25
31
|
|
|
26
|
-
Local-first web search MCP server for AI coding agents.
|
|
32
|
+
Local-first web search MCP server for AI coding agents. Ships eight tools over stdio. All network results land in a local SQLite cache.
|
|
27
33
|
|
|
28
|
-
##
|
|
34
|
+
## Quick Setup
|
|
29
35
|
|
|
30
36
|
**Claude Code:**
|
|
31
37
|
```bash
|
|
@@ -44,106 +50,311 @@ claude mcp add wigolo -- npx @staticn0va/wigolo
|
|
|
44
50
|
}
|
|
45
51
|
```
|
|
46
52
|
|
|
47
|
-
**
|
|
53
|
+
**Warmup (recommended, one-time):**
|
|
48
54
|
```bash
|
|
49
|
-
npx @staticn0va/wigolo warmup
|
|
55
|
+
npx @staticn0va/wigolo warmup # installs Playwright Chromium + bootstraps SearXNG
|
|
56
|
+
npx @staticn0va/wigolo warmup --all # also installs Firefox, WebKit, reranker, embeddings, trafilatura
|
|
57
|
+
npx @staticn0va/wigolo warmup --force # wipe SearXNG state and rebuild
|
|
50
58
|
```
|
|
51
59
|
|
|
52
|
-
|
|
60
|
+
Warmup flags: `--force`, `--all`, `--trafilatura`, `--reranker`, `--firefox`, `--webkit`, `--embeddings`, `--lightpanda`.
|
|
53
61
|
|
|
54
|
-
|
|
62
|
+
## Tools
|
|
55
63
|
|
|
56
|
-
|
|
64
|
+
### fetch
|
|
57
65
|
|
|
66
|
+
Fetch a single URL and return clean markdown. Use when you already have a specific URL.
|
|
67
|
+
|
|
68
|
+
Parameters:
|
|
69
|
+
- `url` (string, required)
|
|
70
|
+
- `render_js`: `"auto"` (default) | `"always"` | `"never"`
|
|
71
|
+
- `use_auth`: boolean (default `false`) — reuses the user's browser session
|
|
72
|
+
- `max_chars`: number
|
|
73
|
+
- `section`: string — return only the content under a heading
|
|
74
|
+
- `section_index`: number (default `0`) — which heading match when multiple hit
|
|
75
|
+
- `screenshot`: boolean (default `false`)
|
|
76
|
+
- `headers`: object
|
|
77
|
+
- `force_refresh`: boolean — bypass cache
|
|
78
|
+
- `actions`: array of `{type, selector, text, ms, timeout, direction, amount}` — `click`, `type`, `wait`, `wait_for`, `scroll`, `screenshot`. Forces Playwright when present.
|
|
79
|
+
|
|
80
|
+
Example:
|
|
58
81
|
```json
|
|
59
|
-
{
|
|
60
|
-
"query": "React Server Components best practices",
|
|
61
|
-
"max_results": 5,
|
|
62
|
-
"include_domains": ["react.dev", "vercel.com"],
|
|
63
|
-
"from_date": "2024-01-01"
|
|
64
|
-
}
|
|
82
|
+
{ "url": "https://react.dev/reference/react/useState", "section": "Parameters" }
|
|
65
83
|
```
|
|
66
84
|
|
|
67
|
-
|
|
85
|
+
Tip: `section` is much cheaper than reading the full page. Repeat fetches of the same URL are free from cache unless `force_refresh: true`.
|
|
68
86
|
|
|
69
|
-
###
|
|
70
|
-
|
|
71
|
-
Fetch any URL and get clean markdown.
|
|
87
|
+
### search
|
|
72
88
|
|
|
89
|
+
Search the web and return extracted markdown per result. Use when you don't have a URL yet.
|
|
90
|
+
|
|
91
|
+
Parameters:
|
|
92
|
+
- `query` (string OR `string[]`, required) — array runs variants in parallel and dedupes
|
|
93
|
+
- `max_results`: number (default `5`, cap `20`)
|
|
94
|
+
- `include_content`: boolean (default `true`)
|
|
95
|
+
- `content_max_chars`: number (default `30000`)
|
|
96
|
+
- `max_total_chars`: number (default `50000`)
|
|
97
|
+
- `time_range`: `"day"` | `"week"` | `"month"` | `"year"`
|
|
98
|
+
- `include_domains` / `exclude_domains`: `string[]`
|
|
99
|
+
- `from_date` / `to_date`: ISO `YYYY-MM-DD`
|
|
100
|
+
- `category`: `"general"` | `"news"` | `"code"` | `"docs"` | `"papers"` | `"images"`
|
|
101
|
+
- `language`: string
|
|
102
|
+
- `search_engines`: `string[]` — override engine selection
|
|
103
|
+
- `format`: `"full"` (default) | `"context"` (token-budgeted string) | `"answer"` (synthesized via MCP sampling) | `"stream_answer"` (answer + phase progress notifications)
|
|
104
|
+
- `force_refresh`: boolean
|
|
105
|
+
|
|
106
|
+
Example:
|
|
73
107
|
```json
|
|
74
|
-
{
|
|
75
|
-
"url": "https://docs.react.dev/reference/react/useState",
|
|
76
|
-
"section": "Parameters"
|
|
77
|
-
}
|
|
108
|
+
{ "query": ["react server components patterns", "RSC data fetching", "react server components streaming"], "category": "docs", "include_domains": ["react.dev"], "max_results": 5 }
|
|
78
109
|
```
|
|
79
110
|
|
|
80
|
-
|
|
111
|
+
Tip: keyword queries beat natural-language questions. A 3–5 item `query` array usually finds more unique sources than one longer query.
|
|
81
112
|
|
|
82
113
|
### crawl
|
|
83
114
|
|
|
84
|
-
Crawl a site from a seed URL.
|
|
115
|
+
Crawl a site starting from a seed URL.
|
|
116
|
+
|
|
117
|
+
Parameters:
|
|
118
|
+
- `url` (string, required)
|
|
119
|
+
- `strategy`: `"bfs"` (default) | `"dfs"` | `"sitemap"` | `"map"` (URL-only discovery, no content)
|
|
120
|
+
- `max_depth`: number (default `2`)
|
|
121
|
+
- `max_pages`: number (default `20`)
|
|
122
|
+
- `include_patterns` / `exclude_patterns`: regex `string[]`
|
|
123
|
+
- `use_auth`: boolean (default `false`)
|
|
124
|
+
- `extract_links`: boolean (default `false`) — returns inter-page link graph
|
|
125
|
+
- `max_total_chars`: number (default `100000`)
|
|
85
126
|
|
|
127
|
+
Example:
|
|
86
128
|
```json
|
|
87
|
-
{
|
|
88
|
-
"url": "https://docs.example.com",
|
|
89
|
-
"strategy": "sitemap",
|
|
90
|
-
"max_pages": 50
|
|
91
|
-
}
|
|
129
|
+
{ "url": "https://docs.python.org/3/library/", "strategy": "sitemap", "max_pages": 30, "include_patterns": ["^https://docs\\.python\\.org/3/library/asyncio"] }
|
|
92
130
|
```
|
|
93
131
|
|
|
94
|
-
|
|
132
|
+
Tip: `strategy: "sitemap"` is faster and more complete than BFS on doc sites. `strategy: "map"` returns URLs only — cheap way to scope before targeted fetches.
|
|
95
133
|
|
|
96
134
|
### cache
|
|
97
135
|
|
|
98
|
-
|
|
136
|
+
Search previously fetched content without hitting the network.
|
|
137
|
+
|
|
138
|
+
Parameters:
|
|
139
|
+
- `query`: FTS5 syntax — supports `AND`, `OR`, `NOT`, `"exact phrase"`
|
|
140
|
+
- `url_pattern`: glob (e.g. `"*react.dev*"`)
|
|
141
|
+
- `since`: ISO date
|
|
142
|
+
- `stats`: boolean — returns total URLs, size, date range
|
|
143
|
+
- `clear`: boolean — deletes matching entries (requires one of `query`, `url_pattern`, `since`)
|
|
144
|
+
- `check_changes`: boolean — re-fetches matching URLs, reports changed/unchanged with diff summaries
|
|
99
145
|
|
|
146
|
+
Example:
|
|
100
147
|
```json
|
|
101
|
-
{
|
|
102
|
-
"query": "React hooks",
|
|
103
|
-
"url_pattern": "*react.dev*"
|
|
104
|
-
}
|
|
148
|
+
{ "query": "useState OR useReducer", "url_pattern": "*react.dev*" }
|
|
105
149
|
```
|
|
106
150
|
|
|
107
|
-
|
|
151
|
+
Tip: cache hits are instant and cross-session. Run this before `search` or `fetch` when you suspect the content is already on disk.
|
|
108
152
|
|
|
109
153
|
### extract
|
|
110
154
|
|
|
111
|
-
Structured
|
|
155
|
+
Structured extraction from URL or raw HTML.
|
|
156
|
+
|
|
157
|
+
Parameters:
|
|
158
|
+
- `url` OR `html` (one required; `url` wins if both provided)
|
|
159
|
+
- `mode`: `"metadata"` (default) | `"selector"` | `"tables"` | `"schema"`
|
|
160
|
+
- `css_selector`: string — required for `mode: "selector"`
|
|
161
|
+
- `multiple`: boolean (default `false`) — return all matches, selector mode only
|
|
162
|
+
- `schema`: JSON Schema object with `properties` — required for `mode: "schema"`
|
|
112
163
|
|
|
164
|
+
Example:
|
|
113
165
|
```json
|
|
114
|
-
{
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
166
|
+
{ "url": "https://example.com/product", "mode": "schema", "schema": { "type": "object", "properties": { "price": { "type": "string" }, "name": { "type": "string" }, "sku": { "type": "string" } } } }
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Tip: `mode: "schema"` does heuristic matching over CSS classes, ARIA labels, microdata, and JSON-LD — no LLM call required.
|
|
170
|
+
|
|
171
|
+
### find_similar
|
|
172
|
+
|
|
173
|
+
Find pages related to a URL or a free-text concept.
|
|
174
|
+
|
|
175
|
+
Parameters:
|
|
176
|
+
- `url` OR `concept` (one required)
|
|
177
|
+
- `max_results`: number (default `10`, cap `50`)
|
|
178
|
+
- `include_domains` / `exclude_domains`: `string[]`
|
|
179
|
+
- `include_cache`: boolean (default `true`)
|
|
180
|
+
- `include_web`: boolean (default `true`)
|
|
181
|
+
|
|
182
|
+
Example:
|
|
183
|
+
```json
|
|
184
|
+
{ "url": "https://react.dev/reference/react/useState", "max_results": 8, "include_domains": ["react.dev", "developer.mozilla.org"] }
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Tip: uses hybrid 3-way search — FTS5 over titles, FTS5 over body, plus embeddings when available. Cache path is near-instant; web supplement runs only if cache yields too few results.
|
|
188
|
+
|
|
189
|
+
### research
|
|
190
|
+
|
|
191
|
+
Multi-step research pipeline with decomposition, parallel search, and cited synthesis.
|
|
192
|
+
|
|
193
|
+
Parameters:
|
|
194
|
+
- `question` (string, required)
|
|
195
|
+
- `depth`: `"quick"` (~15s, 2 sub-queries, 5–8 sources) | `"standard"` (~40s, default) | `"comprehensive"` (~80s, 7 sub-queries, 20–25 sources)
|
|
196
|
+
- `max_sources`: number (cap `50`) — overrides depth default
|
|
197
|
+
- `include_domains` / `exclude_domains`: `string[]`
|
|
198
|
+
- `schema`: JSON Schema — if present, report is structured to fill these fields
|
|
199
|
+
- `stream`: boolean — emit progress notifications per phase
|
|
200
|
+
|
|
201
|
+
Example:
|
|
202
|
+
```json
|
|
203
|
+
{ "question": "How do modern JS bundlers tree-shake ESM vs CJS?", "depth": "standard", "include_domains": ["webpack.js.org", "rollupjs.org", "esbuild.github.io", "vitejs.dev"] }
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Tip: `research` checks cache internally — no need to pre-probe. Requires MCP sampling-capable client for synthesis; without sampling, returns raw sources in context format.
|
|
207
|
+
|
|
208
|
+
### agent
|
|
209
|
+
|
|
210
|
+
Natural-language data gathering. Plans queries and URLs from a prompt, runs them in parallel within budget, optionally applies a schema.
|
|
211
|
+
|
|
212
|
+
Parameters:
|
|
213
|
+
- `prompt` (string, required)
|
|
214
|
+
- `urls`: `string[]` — seed URLs to include
|
|
215
|
+
- `schema`: JSON Schema — extract structured fields per page and merge
|
|
216
|
+
- `max_pages`: number (default `10`, cap `100`)
|
|
217
|
+
- `max_time_ms`: number (default `60000`, cap `600000`)
|
|
218
|
+
- `stream`: boolean
|
|
219
|
+
|
|
220
|
+
Example:
|
|
221
|
+
```json
|
|
222
|
+
{ "prompt": "Compare pricing tiers for Supabase, Firebase, and Clerk", "schema": { "type": "object", "properties": { "provider": { "type": "string" }, "free_tier": { "type": "string" }, "paid_start": { "type": "string" } } }, "max_pages": 12 }
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Tip: output includes a `steps` array showing every action (plan, search, fetch, extract, synthesize) with timings. Use this to debug why an agent run produced a weak result.
|
|
226
|
+
|
|
227
|
+
## Workflow Patterns
|
|
228
|
+
|
|
229
|
+
Quick routing:
|
|
230
|
+
- Use when `search` — you need information but don't have a URL.
|
|
231
|
+
- Use when `fetch` — you already have the URL.
|
|
232
|
+
- Use when `crawl` — you need multiple pages from one site.
|
|
233
|
+
- Use when `cache` — you want to check whether something is already on disk.
|
|
234
|
+
- Use when `extract` — you need specific fields, tables, or metadata, not the whole page.
|
|
235
|
+
- Use when `find_similar` — you have a good page/concept and want related content.
|
|
236
|
+
- Use when `research` — a question needs decomposition and multi-source synthesis.
|
|
237
|
+
- Use when `agent` — a natural-language task needs multi-step data gathering.
|
|
238
|
+
|
|
239
|
+
**Cache-first lookup.** Before any `fetch` or `search`, probe the cache.
|
|
240
|
+
```json
|
|
241
|
+
cache({ "query": "oauth2 pkce", "url_pattern": "*auth0.com*" })
|
|
242
|
+
// empty? fall through to search
|
|
243
|
+
search({ "query": "oauth2 pkce flow", "include_domains": ["auth0.com"] })
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Fresh content (news, dashboards, changelogs).** Bypass cache explicitly.
|
|
247
|
+
```json
|
|
248
|
+
search({ "query": "node.js 22 release notes", "force_refresh": true, "time_range": "week" })
|
|
249
|
+
fetch({ "url": "https://nodejs.org/en/blog", "force_refresh": true })
|
|
125
250
|
```
|
|
126
251
|
|
|
127
|
-
|
|
252
|
+
**Scoped documentation research.** Crawl the relevant slice, then query cache.
|
|
253
|
+
```json
|
|
254
|
+
crawl({ "url": "https://docs.astro.build", "strategy": "sitemap", "max_pages": 40 })
|
|
255
|
+
cache({ "query": "server islands hydration", "url_pattern": "*docs.astro.build*" })
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Broad exploration.** Pass a query array; dedup is automatic.
|
|
259
|
+
```json
|
|
260
|
+
search({ "query": ["rust async runtimes comparison", "tokio vs async-std vs smol", "rust executor benchmarks"], "max_results": 8 })
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**More like this.** Start with a known-good URL, widen via `find_similar`.
|
|
264
|
+
```json
|
|
265
|
+
find_similar({ "url": "https://react.dev/reference/react/useMemo", "max_results": 6, "include_domains": ["react.dev"] })
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**Complex synthesis.** One `research` call replaces 5+ manual search/fetch cycles.
|
|
269
|
+
```json
|
|
270
|
+
research({ "question": "Tradeoffs of vector DBs for RAG at 100M+ embeddings", "depth": "comprehensive" })
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Structured data from multiple sources.** Use `agent` with a schema.
|
|
274
|
+
```json
|
|
275
|
+
agent({ "prompt": "Find latency and pricing for top 5 edge compute providers", "schema": { "type": "object", "properties": { "provider": {"type":"string"}, "cold_start_ms": {"type":"string"}, "price_per_million": {"type":"string"} } } })
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Table extraction.** Skip markdown entirely.
|
|
279
|
+
```json
|
|
280
|
+
extract({ "url": "https://en.wikipedia.org/wiki/List_of_programming_languages", "mode": "tables" })
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## Parameter Cheat Sheet
|
|
284
|
+
|
|
285
|
+
| Situation | Tool + parameters |
|
|
286
|
+
|---|---|
|
|
287
|
+
| Focused lookup, known site | `search` + `max_results: 3` + `include_domains` |
|
|
288
|
+
| Broad topic survey | `search` + `query: [...3-5 variants]` + `max_results: 8` |
|
|
289
|
+
| Fresh content required | any tool + `force_refresh: true` |
|
|
290
|
+
| Doc site indexing | `crawl` + `strategy: "sitemap"` |
|
|
291
|
+
| Site URL inventory only | `crawl` + `strategy: "map"` |
|
|
292
|
+
| Single heading from long page | `fetch` + `section: "..."` |
|
|
293
|
+
| Behind login | `fetch` / `crawl` + `use_auth: true` |
|
|
294
|
+
| Direct answer (sampling client) | `search` + `format: "answer"` |
|
|
295
|
+
| LLM-ready context blob | `search` + `format: "context"` |
|
|
296
|
+
| Complex question, multi-source | `research` + `depth: "standard"` |
|
|
297
|
+
| Structured multi-page extraction | `agent` + `schema` |
|
|
298
|
+
| One-page structured data | `extract` + `mode: "schema"` or `"tables"` |
|
|
299
|
+
| Change tracking | `cache` + `check_changes: true` |
|
|
300
|
+
|
|
301
|
+
## Anti-Patterns
|
|
302
|
+
|
|
303
|
+
**Do not skip the cache.** Running `search` or `fetch` without probing `cache` wastes time on content already on disk. `research` and `agent` check cache internally; manual `search`/`fetch` do not.
|
|
304
|
+
|
|
305
|
+
**Do not send natural-language questions to `search`.** Use keywords. `"how do I debounce in React hooks"` loses to `"react useDebounce hook custom"`.
|
|
306
|
+
|
|
307
|
+
**Do not retry an identical failing query.** Reformulate keywords, swap `category`, or add `include_domains`. Same query → same empty result.
|
|
308
|
+
|
|
309
|
+
**Do not use `agent` or `research` for one-URL lookups.** Use `fetch`. `agent` is for multi-source gathering; `research` is for decomposable questions.
|
|
310
|
+
|
|
311
|
+
**Do not crawl `max_pages: 100` without filters.** Always add `include_patterns` to stay in-scope. Unfiltered crawls fetch nav, footer, and sitemap garbage.
|
|
312
|
+
|
|
313
|
+
**Do not fetch whole pages when you need one section.** `fetch` + `section` reads under one heading only.
|
|
314
|
+
|
|
315
|
+
**Do not set `force_refresh: true` by default.** It defeats the cache. Use it for news, status, changelogs — content that actually churns.
|
|
316
|
+
|
|
317
|
+
**Do not pass a JSON Schema to `extract` without `properties`.** The handler rejects schemas that lack a `properties` key.
|
|
318
|
+
|
|
319
|
+
## CLI Commands
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
wigolo # default: start MCP server on stdio
|
|
323
|
+
wigolo mcp # explicit: start MCP server
|
|
324
|
+
wigolo warmup [flags] # install Playwright, bootstrap SearXNG, optional extras
|
|
325
|
+
wigolo serve # start HTTP daemon on WIGOLO_DAEMON_PORT (default 3333)
|
|
326
|
+
wigolo health # health probe, exits 0 if ok
|
|
327
|
+
wigolo doctor # environment diagnostics (Python, Docker, Playwright, SearXNG)
|
|
328
|
+
wigolo auth discover # list CDP sessions (needs WIGOLO_CDP_URL)
|
|
329
|
+
wigolo auth status # show configured auth paths
|
|
330
|
+
wigolo plugin add <git-url> # clone plugin into ~/.wigolo/plugins/
|
|
331
|
+
wigolo plugin list # list installed plugins
|
|
332
|
+
wigolo plugin remove <name> # remove a plugin
|
|
333
|
+
wigolo shell [--json] # interactive REPL against subsystems
|
|
334
|
+
```
|
|
128
335
|
|
|
129
|
-
##
|
|
336
|
+
## Configuration
|
|
130
337
|
|
|
131
|
-
|
|
132
|
-
- Zero cloud dependency -- runs entirely local
|
|
133
|
-
- Authenticated browsing (Chrome profiles, session state)
|
|
134
|
-
- Localhost access (develop against local servers)
|
|
135
|
-
- SQLite FTS5 cache with full-text search
|
|
136
|
-
- ML reranking (optional, via FlashRank)
|
|
137
|
-
- Extraction ensemble: site-specific, Defuddle, Trafilatura, Readability, Turndown
|
|
338
|
+
Top environment variables. All optional — defaults are safe.
|
|
138
339
|
|
|
139
|
-
|
|
340
|
+
| Variable | Default | Purpose |
|
|
341
|
+
|---|---|---|
|
|
342
|
+
| `WIGOLO_DATA_DIR` | `~/.wigolo` | Cache DB, SearXNG state, plugins, embeddings |
|
|
343
|
+
| `SEARXNG_URL` | unset | Point at an existing SearXNG (skips native bootstrap) |
|
|
344
|
+
| `SEARXNG_MODE` | `native` | `native` runs local Python SearXNG; `docker` runs container |
|
|
345
|
+
| `WIGOLO_CHROME_PROFILE_PATH` | unset | Chrome profile for `use_auth: true` |
|
|
346
|
+
| `WIGOLO_CDP_URL` | unset | Chrome DevTools endpoint (e.g. `http://localhost:9222`) |
|
|
347
|
+
| `MAX_BROWSERS` | `3` | Playwright pool size |
|
|
348
|
+
| `WIGOLO_BROWSER_TYPES` | `chromium` | Comma list: `chromium,firefox,webkit` |
|
|
349
|
+
| `WIGOLO_RERANKER` | `none` | `flashrank` for ML reranking |
|
|
350
|
+
| `WIGOLO_EMBEDDING_MODEL` | `BAAI/bge-small-en-v1.5` | Used by `find_similar` |
|
|
351
|
+
| `CACHE_TTL_CONTENT` | `604800` (7d) | Seconds before cached pages expire |
|
|
352
|
+
| `LOG_LEVEL` | `info` | `debug` \| `info` \| `warn` \| `error` |
|
|
140
353
|
|
|
141
|
-
|
|
142
|
-
- Python 3.8+ (recommended, for embedded SearXNG search)
|
|
143
|
-
- Docker (optional, alternative to Python for SearXNG)
|
|
354
|
+
Full list: see `src/config.ts`.
|
|
144
355
|
|
|
145
356
|
## Links
|
|
146
357
|
|
|
147
358
|
- Repository: https://github.com/KnockOutEZ/wigolo
|
|
148
359
|
- npm: https://www.npmjs.com/package/@staticn0va/wigolo
|
|
149
|
-
- License:
|
|
360
|
+
- License: BUSL-1.1 (converts to open source on 2029-04-12)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AgentPlan } from './planner.js';
|
|
2
|
+
import type { AgentSource, AgentStep, SearchEngine } from '../types.js';
|
|
3
|
+
import type { SmartRouter } from '../fetch/router.js';
|
|
4
|
+
export interface ExecutionBudget {
|
|
5
|
+
maxPages: number;
|
|
6
|
+
deadlineMs: number;
|
|
7
|
+
}
|
|
8
|
+
export interface ExecutionResult {
|
|
9
|
+
sources: AgentSource[];
|
|
10
|
+
steps: AgentStep[];
|
|
11
|
+
}
|
|
12
|
+
export declare function executeAgentPlan(plan: AgentPlan, engines: SearchEngine[], router: SmartRouter, budget: ExecutionBudget): Promise<ExecutionResult>;
|
|
13
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/agent/executor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAmB,MAAM,aAAa,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,eAAe,CAAC,CAgD1B"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { createLogger } from '../logger.js';
|
|
2
|
+
import { deduplicateResults } from '../search/dedup.js';
|
|
3
|
+
import { extractContent } from '../extraction/pipeline.js';
|
|
4
|
+
import { cacheContent } from '../cache/store.js';
|
|
5
|
+
const log = createLogger('agent');
|
|
6
|
+
const FETCH_TIMEOUT_MS = 15000;
|
|
7
|
+
export async function executeAgentPlan(plan, engines, router, budget) {
|
|
8
|
+
const steps = [];
|
|
9
|
+
const allUrls = new Set();
|
|
10
|
+
try {
|
|
11
|
+
// Phase 1: Execute search queries
|
|
12
|
+
if (plan.searches.length > 0) {
|
|
13
|
+
const searchStart = Date.now();
|
|
14
|
+
const searchResults = await executeSearches(plan.searches, engines, budget.deadlineMs);
|
|
15
|
+
steps.push({
|
|
16
|
+
action: 'search',
|
|
17
|
+
detail: `Searched ${plan.searches.length} queries, found ${searchResults.length} results`,
|
|
18
|
+
time_ms: Date.now() - searchStart,
|
|
19
|
+
});
|
|
20
|
+
for (const result of searchResults) {
|
|
21
|
+
allUrls.add(result.url);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Phase 2: Add explicit URLs
|
|
25
|
+
for (const url of plan.urls) {
|
|
26
|
+
allUrls.add(url);
|
|
27
|
+
}
|
|
28
|
+
if (allUrls.size === 0) {
|
|
29
|
+
return { sources: [], steps };
|
|
30
|
+
}
|
|
31
|
+
// Phase 3: Fetch pages within budget
|
|
32
|
+
const urlsToFetch = [...allUrls].slice(0, budget.maxPages);
|
|
33
|
+
const fetchStart = Date.now();
|
|
34
|
+
const sources = await fetchPages(urlsToFetch, router, budget);
|
|
35
|
+
steps.push({
|
|
36
|
+
action: 'fetch',
|
|
37
|
+
detail: `Fetched ${sources.filter((s) => s.fetched).length}/${urlsToFetch.length} pages`,
|
|
38
|
+
time_ms: Date.now() - fetchStart,
|
|
39
|
+
});
|
|
40
|
+
return { sources, steps };
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
log.error('execution failed', {
|
|
44
|
+
error: err instanceof Error ? err.message : String(err),
|
|
45
|
+
});
|
|
46
|
+
return { sources: [], steps };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async function executeSearches(queries, engines, deadlineMs) {
|
|
50
|
+
const allRaw = [];
|
|
51
|
+
const searchPromises = engines.flatMap((engine) => queries.map(async (query) => {
|
|
52
|
+
if (Date.now() >= deadlineMs)
|
|
53
|
+
return;
|
|
54
|
+
try {
|
|
55
|
+
const results = await engine.search(query, { maxResults: 10 });
|
|
56
|
+
for (const r of results) {
|
|
57
|
+
allRaw.push(r);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
log.warn('agent search query failed', {
|
|
62
|
+
engine: engine.name,
|
|
63
|
+
query,
|
|
64
|
+
error: err instanceof Error ? err.message : String(err),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}));
|
|
68
|
+
await Promise.allSettled(searchPromises);
|
|
69
|
+
const merged = deduplicateResults(allRaw);
|
|
70
|
+
return merged.map((m) => ({
|
|
71
|
+
url: m.url,
|
|
72
|
+
title: m.title,
|
|
73
|
+
snippet: m.snippet,
|
|
74
|
+
relevance_score: m.relevance_score,
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
async function fetchPages(urls, router, budget) {
|
|
78
|
+
const fetchPromises = urls.map(async (url) => {
|
|
79
|
+
if (Date.now() >= budget.deadlineMs) {
|
|
80
|
+
return {
|
|
81
|
+
url,
|
|
82
|
+
title: '',
|
|
83
|
+
markdown_content: '',
|
|
84
|
+
fetched: false,
|
|
85
|
+
fetch_error: 'budget exceeded',
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const timeRemaining = budget.deadlineMs - Date.now();
|
|
90
|
+
const fetchTimeout = Math.min(FETCH_TIMEOUT_MS, Math.max(timeRemaining, 1000));
|
|
91
|
+
const raw = await Promise.race([
|
|
92
|
+
router.fetch(url, { renderJs: 'auto' }),
|
|
93
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('fetch timeout')), fetchTimeout)),
|
|
94
|
+
]);
|
|
95
|
+
const extraction = await extractContent(raw.html, raw.finalUrl, {
|
|
96
|
+
maxChars: 30000,
|
|
97
|
+
contentType: raw.contentType,
|
|
98
|
+
});
|
|
99
|
+
try {
|
|
100
|
+
cacheContent(raw, extraction);
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
log.debug('failed to cache agent source', { url, error: String(err) });
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
url,
|
|
107
|
+
title: extraction.title,
|
|
108
|
+
markdown_content: extraction.markdown,
|
|
109
|
+
fetched: true,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
log.debug('agent fetch failed', {
|
|
114
|
+
url,
|
|
115
|
+
error: err instanceof Error ? err.message : String(err),
|
|
116
|
+
});
|
|
117
|
+
return {
|
|
118
|
+
url,
|
|
119
|
+
title: '',
|
|
120
|
+
markdown_content: '',
|
|
121
|
+
fetched: false,
|
|
122
|
+
fetch_error: err instanceof Error ? err.message : String(err),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
return Promise.all(fetchPromises);
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/agent/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAElC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAY/B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAe,EACf,OAAuB,EACvB,MAAmB,EACnB,MAAuB;IAEvB,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,IAAI,CAAC;QACH,kCAAkC;QAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAEvF,KAAK,CAAC,IAAI,CAAC;gBACT,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,mBAAmB,aAAa,CAAC,MAAM,UAAU;gBACzF,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW;aAClC,CAAC,CAAC;YAEH,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QAChC,CAAC;QAED,qCAAqC;QACrC,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAE9D,KAAK,CAAC,IAAI,CAAC;YACT,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,WAAW,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,QAAQ;YACxF,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;SACjC,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE;YAC5B,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,OAAiB,EACjB,OAAuB,EACvB,UAAkB;IAElB,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAChD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,UAAU;YAAE,OAAO;QAErC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE;gBACpC,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,KAAK;gBACL,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,eAAe,EAAE,CAAC,CAAC,eAAe;KACnC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,IAAc,EACd,MAAmB,EACnB,MAAuB;IAEvB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAwB,EAAE;QACjE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpC,OAAO;gBACL,GAAG;gBACH,KAAK,EAAE,EAAE;gBACT,gBAAgB,EAAE,EAAE;gBACpB,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,iBAAiB;aAC/B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACrD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;YAE/E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACvC,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,YAAY,CAAC,CACnE;aACF,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE;gBAC9D,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,GAAG,CAAC,WAAW;aAC7B,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,OAAO;gBACL,GAAG;gBACH,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,gBAAgB,EAAE,UAAU,CAAC,QAAQ;gBACrC,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE;gBAC9B,GAAG;gBACH,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;YACH,OAAO;gBACL,GAAG;gBACH,KAAK,EAAE,EAAE;gBACT,gBAAgB,EAAE,EAAE;gBACpB,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type SamplingCapableServer } from '../search/sampling.js';
|
|
2
|
+
import type { AgentInput, AgentOutput, SearchEngine } from '../types.js';
|
|
3
|
+
import type { SmartRouter } from '../fetch/router.js';
|
|
4
|
+
export declare function runAgentPipeline(input: AgentInput, engines: SearchEngine[], router: SmartRouter, server?: SamplingCapableServer): Promise<AgentOutput>;
|
|
5
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/agent/pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAGX,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQtD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,WAAW,CAAC,CAyFtB"}
|