@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.
Files changed (138) hide show
  1. package/SKILL.md +279 -68
  2. package/dist/agent/executor.d.ts +13 -0
  3. package/dist/agent/executor.d.ts.map +1 -0
  4. package/dist/agent/executor.js +128 -0
  5. package/dist/agent/executor.js.map +1 -0
  6. package/dist/agent/pipeline.d.ts +5 -0
  7. package/dist/agent/pipeline.d.ts.map +1 -0
  8. package/dist/agent/pipeline.js +198 -0
  9. package/dist/agent/pipeline.js.map +1 -0
  10. package/dist/agent/planner.d.ts +9 -0
  11. package/dist/agent/planner.d.ts.map +1 -0
  12. package/dist/agent/planner.js +190 -0
  13. package/dist/agent/planner.js.map +1 -0
  14. package/dist/cache/db.d.ts.map +1 -1
  15. package/dist/cache/db.js +32 -0
  16. package/dist/cache/db.js.map +1 -1
  17. package/dist/cache/store.d.ts +14 -0
  18. package/dist/cache/store.d.ts.map +1 -1
  19. package/dist/cache/store.js +69 -0
  20. package/dist/cache/store.js.map +1 -1
  21. package/dist/cli/warmup.d.ts +4 -0
  22. package/dist/cli/warmup.d.ts.map +1 -1
  23. package/dist/cli/warmup.js +58 -0
  24. package/dist/cli/warmup.js.map +1 -1
  25. package/dist/config.d.ts +8 -0
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +8 -0
  28. package/dist/config.js.map +1 -1
  29. package/dist/embedding/embed.d.ts +19 -0
  30. package/dist/embedding/embed.d.ts.map +1 -0
  31. package/dist/embedding/embed.js +131 -0
  32. package/dist/embedding/embed.js.map +1 -0
  33. package/dist/embedding/key-terms.d.ts +12 -0
  34. package/dist/embedding/key-terms.d.ts.map +1 -0
  35. package/dist/embedding/key-terms.js +138 -0
  36. package/dist/embedding/key-terms.js.map +1 -0
  37. package/dist/embedding/subprocess.d.ts +31 -0
  38. package/dist/embedding/subprocess.d.ts.map +1 -0
  39. package/dist/embedding/subprocess.js +213 -0
  40. package/dist/embedding/subprocess.js.map +1 -0
  41. package/dist/embedding/vector-index.d.ts +26 -0
  42. package/dist/embedding/vector-index.d.ts.map +1 -0
  43. package/dist/embedding/vector-index.js +78 -0
  44. package/dist/embedding/vector-index.js.map +1 -0
  45. package/dist/fetch/browser-pool.d.ts.map +1 -1
  46. package/dist/fetch/browser-pool.js +61 -0
  47. package/dist/fetch/browser-pool.js.map +1 -1
  48. package/dist/fetch/browser-types.js +1 -1
  49. package/dist/fetch/browser-types.js.map +1 -1
  50. package/dist/fetch/lightpanda.d.ts +28 -0
  51. package/dist/fetch/lightpanda.d.ts.map +1 -0
  52. package/dist/fetch/lightpanda.js +177 -0
  53. package/dist/fetch/lightpanda.js.map +1 -0
  54. package/dist/fetch/router.d.ts +1 -0
  55. package/dist/fetch/router.d.ts.map +1 -1
  56. package/dist/fetch/router.js.map +1 -1
  57. package/dist/instructions.d.ts +9 -6
  58. package/dist/instructions.d.ts.map +1 -1
  59. package/dist/instructions.js +111 -21
  60. package/dist/instructions.js.map +1 -1
  61. package/dist/logger.d.ts +1 -1
  62. package/dist/logger.d.ts.map +1 -1
  63. package/dist/repl/commands/agent.d.ts +5 -0
  64. package/dist/repl/commands/agent.d.ts.map +1 -0
  65. package/dist/repl/commands/agent.js +48 -0
  66. package/dist/repl/commands/agent.js.map +1 -0
  67. package/dist/repl/commands/find-similar.d.ts +5 -0
  68. package/dist/repl/commands/find-similar.d.ts.map +1 -0
  69. package/dist/repl/commands/find-similar.js +61 -0
  70. package/dist/repl/commands/find-similar.js.map +1 -0
  71. package/dist/repl/commands/research.d.ts +5 -0
  72. package/dist/repl/commands/research.d.ts.map +1 -0
  73. package/dist/repl/commands/research.js +50 -0
  74. package/dist/repl/commands/research.js.map +1 -0
  75. package/dist/repl/formatters.d.ts +4 -1
  76. package/dist/repl/formatters.d.ts.map +1 -1
  77. package/dist/repl/formatters.js +73 -0
  78. package/dist/repl/formatters.js.map +1 -1
  79. package/dist/repl/shell.d.ts.map +1 -1
  80. package/dist/repl/shell.js +22 -1
  81. package/dist/repl/shell.js.map +1 -1
  82. package/dist/research/decompose.d.ts +7 -0
  83. package/dist/research/decompose.d.ts.map +1 -0
  84. package/dist/research/decompose.js +195 -0
  85. package/dist/research/decompose.js.map +1 -0
  86. package/dist/research/pipeline.d.ts +5 -0
  87. package/dist/research/pipeline.d.ts.map +1 -0
  88. package/dist/research/pipeline.js +135 -0
  89. package/dist/research/pipeline.js.map +1 -0
  90. package/dist/research/synthesize.d.ts +10 -0
  91. package/dist/research/synthesize.d.ts.map +1 -0
  92. package/dist/research/synthesize.js +119 -0
  93. package/dist/research/synthesize.js.map +1 -0
  94. package/dist/search/answer-synthesis.d.ts +13 -0
  95. package/dist/search/answer-synthesis.d.ts.map +1 -0
  96. package/dist/search/answer-synthesis.js +120 -0
  97. package/dist/search/answer-synthesis.js.map +1 -0
  98. package/dist/search/find-similar.d.ts +5 -0
  99. package/dist/search/find-similar.d.ts.map +1 -0
  100. package/dist/search/find-similar.js +436 -0
  101. package/dist/search/find-similar.js.map +1 -0
  102. package/dist/search/multi-query.d.ts +22 -0
  103. package/dist/search/multi-query.d.ts.map +1 -0
  104. package/dist/search/multi-query.js +157 -0
  105. package/dist/search/multi-query.js.map +1 -0
  106. package/dist/search/rrf.d.ts +17 -0
  107. package/dist/search/rrf.d.ts.map +1 -0
  108. package/dist/search/rrf.js +48 -0
  109. package/dist/search/rrf.js.map +1 -0
  110. package/dist/search/sampling.d.ts +25 -0
  111. package/dist/search/sampling.d.ts.map +1 -0
  112. package/dist/search/sampling.js +52 -0
  113. package/dist/search/sampling.js.map +1 -0
  114. package/dist/server.d.ts.map +1 -1
  115. package/dist/server.js +210 -5
  116. package/dist/server.js.map +1 -1
  117. package/dist/tools/agent.d.ts +5 -0
  118. package/dist/tools/agent.d.ts.map +1 -0
  119. package/dist/tools/agent.js +67 -0
  120. package/dist/tools/agent.js.map +1 -0
  121. package/dist/tools/fetch.d.ts.map +1 -1
  122. package/dist/tools/fetch.js +16 -4
  123. package/dist/tools/fetch.js.map +1 -1
  124. package/dist/tools/find-similar.d.ts +5 -0
  125. package/dist/tools/find-similar.d.ts.map +1 -0
  126. package/dist/tools/find-similar.js +48 -0
  127. package/dist/tools/find-similar.js.map +1 -0
  128. package/dist/tools/research.d.ts +5 -0
  129. package/dist/tools/research.d.ts.map +1 -0
  130. package/dist/tools/research.js +50 -0
  131. package/dist/tools/research.js.map +1 -0
  132. package/dist/tools/search.d.ts +3 -2
  133. package/dist/tools/search.d.ts.map +1 -1
  134. package/dist/tools/search.js +217 -14
  135. package/dist/tools/search.js.map +1 -1
  136. package/dist/types.d.ts +108 -3
  137. package/dist/types.d.ts.map +1 -1
  138. package/package.json +10 -3
package/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: wigolo
3
- description: Local-first web search MCP server for AI coding agents. Search, fetch, crawl, cache, and extract from the web with zero API keys, zero cloud, zero cost.
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 a web page and return its content as clean markdown. Supports JavaScript rendering, authenticated browsing, section extraction, and caching.
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 website starting from a seed URL. Supports BFS, DFS, sitemap, and map (URL-only) strategies with depth/page limits and URL filtering.
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: Query the local knowledge base of previously fetched content. Full-text search over cached pages by query, URL pattern, or date. Cache stats and clearing.
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: Extract structured data from a web page. Supports CSS selector extraction, HTML table parsing, metadata extraction (title, author, JSON-LD), and JSON Schema heuristic matching.
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
- ## Installation
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
- **Optional warmup (improves search quality):**
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
- ## Tools
60
+ Warmup flags: `--force`, `--all`, `--trafilatura`, `--reranker`, `--firefox`, `--webkit`, `--embeddings`, `--lightpanda`.
53
61
 
54
- ### search
62
+ ## Tools
55
63
 
56
- Search the web and get full markdown content in one call.
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
- Returns: titles, URLs, relevance scores, and full extracted markdown per result.
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
- ### fetch
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
- Returns: clean markdown, links, images, metadata. Cached for future use.
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
- Returns: array of pages with titles, markdown, depth. Supports `bfs`, `dfs`, `sitemap`, `map` strategies.
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
- Query previously fetched content without hitting the network.
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
- Returns: matching cached pages with full markdown and fetch timestamps.
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 data extraction from any URL or HTML.
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
- "url": "https://example.com/product",
116
- "mode": "schema",
117
- "schema": {
118
- "type": "object",
119
- "properties": {
120
- "price": { "type": "string" },
121
- "name": { "type": "string" }
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
- Modes: `selector` (CSS), `tables` (HTML tables), `metadata` (meta tags + JSON-LD), `schema` (JSON Schema heuristic matching).
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
- ## Key Features
336
+ ## Configuration
130
337
 
131
- - Zero API keys required
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
- ## Requirements
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
- - Node.js 20+
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: BSL 1.1 (converts to MIT on 2029-04-12)
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":"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"}
@@ -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"}