@staticn0va/wigolo 0.6.3 → 0.6.4

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 (194) hide show
  1. package/SKILL.md +30 -8
  2. package/dist/cli/index.d.ts +1 -1
  3. package/dist/cli/index.d.ts.map +1 -1
  4. package/dist/cli/index.js +12 -1
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/cli/init.d.ts +2 -0
  7. package/dist/cli/init.d.ts.map +1 -0
  8. package/dist/cli/init.js +162 -0
  9. package/dist/cli/init.js.map +1 -0
  10. package/dist/cli/setup-mcp.d.ts +2 -0
  11. package/dist/cli/setup-mcp.d.ts.map +1 -0
  12. package/dist/cli/setup-mcp.js +116 -0
  13. package/dist/cli/setup-mcp.js.map +1 -0
  14. package/dist/cli/status.d.ts +2 -0
  15. package/dist/cli/status.d.ts.map +1 -0
  16. package/dist/cli/status.js +32 -0
  17. package/dist/cli/status.js.map +1 -0
  18. package/dist/cli/tui/agents-types.d.ts +28 -0
  19. package/dist/cli/tui/agents-types.d.ts.map +1 -0
  20. package/dist/cli/tui/agents-types.js +2 -0
  21. package/dist/cli/tui/agents-types.js.map +1 -0
  22. package/dist/cli/tui/agents.d.ts +11 -0
  23. package/dist/cli/tui/agents.d.ts.map +1 -0
  24. package/dist/cli/tui/agents.js +101 -0
  25. package/dist/cli/tui/agents.js.map +1 -0
  26. package/dist/cli/tui/banner.d.ts +3 -0
  27. package/dist/cli/tui/banner.d.ts.map +1 -0
  28. package/dist/cli/tui/banner.js +25 -0
  29. package/dist/cli/tui/banner.js.map +1 -0
  30. package/dist/cli/tui/config-writer-cli.d.ts +12 -0
  31. package/dist/cli/tui/config-writer-cli.d.ts.map +1 -0
  32. package/dist/cli/tui/config-writer-cli.js +33 -0
  33. package/dist/cli/tui/config-writer-cli.js.map +1 -0
  34. package/dist/cli/tui/config-writer-json.d.ts +16 -0
  35. package/dist/cli/tui/config-writer-json.d.ts.map +1 -0
  36. package/dist/cli/tui/config-writer-json.js +89 -0
  37. package/dist/cli/tui/config-writer-json.js.map +1 -0
  38. package/dist/cli/tui/config-writer-toml.d.ts +16 -0
  39. package/dist/cli/tui/config-writer-toml.d.ts.map +1 -0
  40. package/dist/cli/tui/config-writer-toml.js +88 -0
  41. package/dist/cli/tui/config-writer-toml.js.map +1 -0
  42. package/dist/cli/tui/config-writer.d.ts +25 -0
  43. package/dist/cli/tui/config-writer.d.ts.map +1 -0
  44. package/dist/cli/tui/config-writer.js +98 -0
  45. package/dist/cli/tui/config-writer.js.map +1 -0
  46. package/dist/cli/tui/detect-helpers.d.ts +6 -0
  47. package/dist/cli/tui/detect-helpers.d.ts.map +1 -0
  48. package/dist/cli/tui/detect-helpers.js +44 -0
  49. package/dist/cli/tui/detect-helpers.js.map +1 -0
  50. package/dist/cli/tui/flags-types.d.ts +19 -0
  51. package/dist/cli/tui/flags-types.d.ts.map +1 -0
  52. package/dist/cli/tui/flags-types.js +19 -0
  53. package/dist/cli/tui/flags-types.js.map +1 -0
  54. package/dist/cli/tui/flags.d.ts +5 -0
  55. package/dist/cli/tui/flags.d.ts.map +1 -0
  56. package/dist/cli/tui/flags.js +124 -0
  57. package/dist/cli/tui/flags.js.map +1 -0
  58. package/dist/cli/tui/format.d.ts +14 -0
  59. package/dist/cli/tui/format.d.ts.map +1 -0
  60. package/dist/cli/tui/format.js +28 -0
  61. package/dist/cli/tui/format.js.map +1 -0
  62. package/dist/cli/tui/reporter-auto.d.ts +7 -0
  63. package/dist/cli/tui/reporter-auto.d.ts.map +1 -0
  64. package/dist/cli/tui/reporter-auto.js +15 -0
  65. package/dist/cli/tui/reporter-auto.js.map +1 -0
  66. package/dist/cli/tui/reporter.d.ts +26 -0
  67. package/dist/cli/tui/reporter.d.ts.map +1 -0
  68. package/dist/cli/tui/reporter.js +31 -0
  69. package/dist/cli/tui/reporter.js.map +1 -0
  70. package/dist/cli/tui/run-command.d.ts +14 -0
  71. package/dist/cli/tui/run-command.d.ts.map +1 -0
  72. package/dist/cli/tui/run-command.js +73 -0
  73. package/dist/cli/tui/run-command.js.map +1 -0
  74. package/dist/cli/tui/select-agents.d.ts +6 -0
  75. package/dist/cli/tui/select-agents.d.ts.map +1 -0
  76. package/dist/cli/tui/select-agents.js +28 -0
  77. package/dist/cli/tui/select-agents.js.map +1 -0
  78. package/dist/cli/tui/status-agents.d.ts +11 -0
  79. package/dist/cli/tui/status-agents.d.ts.map +1 -0
  80. package/dist/cli/tui/status-agents.js +53 -0
  81. package/dist/cli/tui/status-agents.js.map +1 -0
  82. package/dist/cli/tui/status-cache.d.ts +6 -0
  83. package/dist/cli/tui/status-cache.d.ts.map +1 -0
  84. package/dist/cli/tui/status-cache.js +39 -0
  85. package/dist/cli/tui/status-cache.js.map +1 -0
  86. package/dist/cli/tui/status-format.d.ts +15 -0
  87. package/dist/cli/tui/status-format.d.ts.map +1 -0
  88. package/dist/cli/tui/status-format.js +45 -0
  89. package/dist/cli/tui/status-format.js.map +1 -0
  90. package/dist/cli/tui/status-python.d.ts +7 -0
  91. package/dist/cli/tui/status-python.d.ts.map +1 -0
  92. package/dist/cli/tui/status-python.js +24 -0
  93. package/dist/cli/tui/status-python.js.map +1 -0
  94. package/dist/cli/tui/system-check.d.ts +24 -0
  95. package/dist/cli/tui/system-check.d.ts.map +1 -0
  96. package/dist/cli/tui/system-check.js +101 -0
  97. package/dist/cli/tui/system-check.js.map +1 -0
  98. package/dist/cli/tui/tui-reporter.d.ts +19 -0
  99. package/dist/cli/tui/tui-reporter.d.ts.map +1 -0
  100. package/dist/cli/tui/tui-reporter.js +94 -0
  101. package/dist/cli/tui/tui-reporter.js.map +1 -0
  102. package/dist/cli/tui/verify-suggestions.d.ts +5 -0
  103. package/dist/cli/tui/verify-suggestions.d.ts.map +1 -0
  104. package/dist/cli/tui/verify-suggestions.js +25 -0
  105. package/dist/cli/tui/verify-suggestions.js.map +1 -0
  106. package/dist/cli/tui/verify.d.ts +19 -0
  107. package/dist/cli/tui/verify.d.ts.map +1 -0
  108. package/dist/cli/tui/verify.js +138 -0
  109. package/dist/cli/tui/verify.js.map +1 -0
  110. package/dist/cli/tui/version.d.ts +2 -0
  111. package/dist/cli/tui/version.d.ts.map +1 -0
  112. package/dist/cli/tui/version.js +12 -0
  113. package/dist/cli/tui/version.js.map +1 -0
  114. package/dist/cli/warmup.d.ts +2 -1
  115. package/dist/cli/warmup.d.ts.map +1 -1
  116. package/dist/cli/warmup.js +147 -208
  117. package/dist/cli/warmup.js.map +1 -1
  118. package/dist/daemon/http-server.js +1 -1
  119. package/dist/daemon/http-server.js.map +1 -1
  120. package/dist/embedding/embed.d.ts +0 -1
  121. package/dist/embedding/embed.d.ts.map +1 -1
  122. package/dist/embedding/embed.js +0 -3
  123. package/dist/embedding/embed.js.map +1 -1
  124. package/dist/extraction/extract.d.ts.map +1 -1
  125. package/dist/extraction/extract.js +6 -0
  126. package/dist/extraction/extract.js.map +1 -1
  127. package/dist/extraction/markdown.d.ts +2 -0
  128. package/dist/extraction/markdown.d.ts.map +1 -1
  129. package/dist/extraction/markdown.js +70 -0
  130. package/dist/extraction/markdown.js.map +1 -1
  131. package/dist/extraction/pipeline.d.ts.map +1 -1
  132. package/dist/extraction/pipeline.js +32 -7
  133. package/dist/extraction/pipeline.js.map +1 -1
  134. package/dist/extraction/readability.d.ts +1 -1
  135. package/dist/extraction/readability.d.ts.map +1 -1
  136. package/dist/extraction/readability.js +1 -1
  137. package/dist/extraction/readability.js.map +1 -1
  138. package/dist/extraction/site-extractors/github.js +1 -1
  139. package/dist/extraction/site-extractors/github.js.map +1 -1
  140. package/dist/extraction/site-extractors/mdn.js +1 -1
  141. package/dist/extraction/site-extractors/mdn.js.map +1 -1
  142. package/dist/extraction/site-extractors/stackoverflow.js +1 -1
  143. package/dist/extraction/site-extractors/stackoverflow.js.map +1 -1
  144. package/dist/extraction/structured.d.ts +4 -0
  145. package/dist/extraction/structured.d.ts.map +1 -0
  146. package/dist/extraction/structured.js +206 -0
  147. package/dist/extraction/structured.js.map +1 -0
  148. package/dist/fetch/lightpanda.js +1 -1
  149. package/dist/fetch/lightpanda.js.map +1 -1
  150. package/dist/index.js +18 -0
  151. package/dist/index.js.map +1 -1
  152. package/dist/instructions.d.ts +6 -6
  153. package/dist/instructions.d.ts.map +1 -1
  154. package/dist/instructions.js +54 -51
  155. package/dist/instructions.js.map +1 -1
  156. package/dist/research/brief.d.ts +3 -0
  157. package/dist/research/brief.d.ts.map +1 -0
  158. package/dist/research/brief.js +79 -0
  159. package/dist/research/brief.js.map +1 -0
  160. package/dist/research/pipeline.d.ts.map +1 -1
  161. package/dist/research/pipeline.js +8 -0
  162. package/dist/research/pipeline.js.map +1 -1
  163. package/dist/research/synthesize.js +1 -1
  164. package/dist/research/synthesize.js.map +1 -1
  165. package/dist/search/find-similar.d.ts.map +1 -1
  166. package/dist/search/find-similar.js +41 -1
  167. package/dist/search/find-similar.js.map +1 -1
  168. package/dist/search/highlights.d.ts +10 -0
  169. package/dist/search/highlights.d.ts.map +1 -0
  170. package/dist/search/highlights.js +103 -0
  171. package/dist/search/highlights.js.map +1 -0
  172. package/dist/searxng/docker.d.ts.map +1 -1
  173. package/dist/searxng/docker.js +6 -2
  174. package/dist/searxng/docker.js.map +1 -1
  175. package/dist/server.d.ts.map +1 -1
  176. package/dist/server.js +8 -4
  177. package/dist/server.js.map +1 -1
  178. package/dist/tools/agent.d.ts +2 -2
  179. package/dist/tools/agent.d.ts.map +1 -1
  180. package/dist/tools/agent.js +1 -1
  181. package/dist/tools/agent.js.map +1 -1
  182. package/dist/tools/extract.d.ts.map +1 -1
  183. package/dist/tools/extract.js +19 -1
  184. package/dist/tools/extract.js.map +1 -1
  185. package/dist/tools/research.d.ts +1 -1
  186. package/dist/tools/research.d.ts.map +1 -1
  187. package/dist/tools/research.js +1 -1
  188. package/dist/tools/research.js.map +1 -1
  189. package/dist/tools/search.d.ts.map +1 -1
  190. package/dist/tools/search.js +55 -27
  191. package/dist/tools/search.js.map +1 -1
  192. package/dist/types.d.ts +54 -4
  193. package/dist/types.d.ts.map +1 -1
  194. package/package.json +7 -1
package/SKILL.md CHANGED
@@ -12,13 +12,13 @@ tools:
12
12
  - name: fetch
13
13
  description: Fetch one URL, return clean markdown. Auto-routes between HTTP and Playwright. Supports sections, auth, screenshots, browser actions.
14
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.
15
+ description: Search the web, return extracted markdown per result. Single query or array of query variants. Domain, category, date filters. Formats include FlashRank-scored highlights with citations for host-LLM synthesis.
16
16
  - name: crawl
17
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
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: Structured extraction from URL or raw HTML. Modes: selector (CSS), tables, metadata (meta + JSON-LD), schema (heuristic field matching).
21
+ description: Structured extraction from URL or raw HTML. Modes: selector (CSS), tables, metadata (meta + JSON-LD), schema (heuristic field matching), structured (tables + dl + JSON-LD + chart hints + key-value pairs in one call).
22
22
  - name: find_similar
23
23
  description: Find pages similar to a URL or concept. Hybrid cache (FTS5 + embeddings) + optional web supplement.
24
24
  - name: research
@@ -31,6 +31,16 @@ tools:
31
31
 
32
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.
33
33
 
34
+ ## Host-LLM synthesis (read me first)
35
+
36
+ Wigolo has no internal LLM. It returns *structured evidence* so the calling model (you) writes the final answer. Fold structure into your reply rather than collapsing it away:
37
+
38
+ - `search` with `format: "highlights"` — FlashRank-scored passages + `citations`. Quote and cite [N].
39
+ - `research` — when MCP sampling is unavailable (common), the output carries a `brief` with `topics`, `highlights`, `key_findings`. Use it as the scaffold for the report you write.
40
+ - `find_similar` — may return a `cold_start` string. Pass it to the user; it explains why results came from the web and how to warm the cache.
41
+ - `extract` with `mode: "structured"` — one call for tables + `<dl>` definitions + JSON-LD + chart hints + key-value pairs.
42
+ - `fetch` metadata — surfaces `og_type`, `canonical_url`, and `og_image`; use `canonical_url` to dedupe tracked/canonical URLs.
43
+
34
44
  ## Quick Setup
35
45
 
36
46
  **Claude Code:**
@@ -100,7 +110,8 @@ Parameters:
100
110
  - `category`: `"general"` | `"news"` | `"code"` | `"docs"` | `"papers"` | `"images"`
101
111
  - `language`: string
102
112
  - `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)
113
+ - `format`: `"full"` (default) | `"context"` (token-budgeted string) | `"highlights"` (FlashRank-scored passages + citations) | `"answer"` (synthesized via MCP sampling; falls back to `highlights` when unsupported) | `"stream_answer"` (answer + phase progress notifications)
114
+ - `max_highlights`: number (default `10`) — cap when `format: "highlights"`
104
115
  - `force_refresh`: boolean
105
116
 
106
117
  Example:
@@ -156,7 +167,7 @@ Structured extraction from URL or raw HTML.
156
167
 
157
168
  Parameters:
158
169
  - `url` OR `html` (one required; `url` wins if both provided)
159
- - `mode`: `"metadata"` (default) | `"selector"` | `"tables"` | `"schema"`
170
+ - `mode`: `"metadata"` (default) | `"selector"` | `"tables"` | `"schema"` | `"structured"` (tables + `<dl>` definitions + JSON-LD + chart hints + microdata/data-attr/grid key-value pairs in one call)
160
171
  - `css_selector`: string — required for `mode: "selector"`
161
172
  - `multiple`: boolean (default `false`) — return all matches, selector mode only
162
173
  - `schema`: JSON Schema object with `properties` — required for `mode: "schema"`
@@ -166,7 +177,7 @@ Example:
166
177
  { "url": "https://example.com/product", "mode": "schema", "schema": { "type": "object", "properties": { "price": { "type": "string" }, "name": { "type": "string" }, "sku": { "type": "string" } } } }
167
178
  ```
168
179
 
169
- Tip: `mode: "schema"` does heuristic matching over CSS classes, ARIA labels, microdata, and JSON-LD — no LLM call required.
180
+ Tip: `mode: "schema"` does heuristic matching over CSS classes, ARIA labels, microdata, and JSON-LD — no LLM call required. `mode: "structured"` returns every structured pattern on the page (`tables`, `definitions`, `jsonld`, `chart_hints`, `key_value_pairs`) in one response — prefer it over chaining multiple extract calls.
170
181
 
171
182
  ### find_similar
172
183
 
@@ -184,7 +195,7 @@ Example:
184
195
  { "url": "https://react.dev/reference/react/useState", "max_results": 8, "include_domains": ["react.dev", "developer.mozilla.org"] }
185
196
  ```
186
197
 
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.
198
+ Tip: uses hybrid 3-way RRF fusion — FTS5 + sentence-transformer embeddings + live web search. Each result carries `match_signals` with `embedding_rank`, `fts5_rank`, and `fused_score`. If the cache is empty or embeddings aren't set up, the response includes a `cold_start` string — pass it to the user to explain why results came from the web.
188
199
 
189
200
  ### research
190
201
 
@@ -203,7 +214,7 @@ Example:
203
214
  { "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
215
  ```
205
216
 
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.
217
+ Tip: `research` checks cache internally — no need to pre-probe. With MCP sampling, the tool synthesizes the report directly. Without sampling (the common case), the output ships a `brief` with `topics`, `highlights`, and `key_findings`, plus the raw sources the host LLM writes the final report from the brief.
207
218
 
208
219
  ### agent
209
220
 
@@ -280,6 +291,16 @@ agent({ "prompt": "Find latency and pricing for top 5 edge compute providers", "
280
291
  extract({ "url": "https://en.wikipedia.org/wiki/List_of_programming_languages", "mode": "tables" })
281
292
  ```
282
293
 
294
+ **One-shot structured brief.** Tables + definition lists + JSON-LD + chart hints + key-value pairs in one call.
295
+ ```json
296
+ extract({ "url": "https://example.com/product-page", "mode": "structured" })
297
+ ```
298
+
299
+ **Direct quotes with citations.** FlashRank passages are ideal for host-LLM synthesis.
300
+ ```json
301
+ search({ "query": "react server components data fetching", "format": "highlights", "max_highlights": 6, "include_domains": ["react.dev", "nextjs.org"] })
302
+ ```
303
+
283
304
  ## Parameter Cheat Sheet
284
305
 
285
306
  | Situation | Tool + parameters |
@@ -292,10 +313,11 @@ extract({ "url": "https://en.wikipedia.org/wiki/List_of_programming_languages",
292
313
  | Single heading from long page | `fetch` + `section: "..."` |
293
314
  | Behind login | `fetch` / `crawl` + `use_auth: true` |
294
315
  | Direct answer (sampling client) | `search` + `format: "answer"` |
316
+ | FlashRank-scored quotes + citations | `search` + `format: "highlights"` |
295
317
  | LLM-ready context blob | `search` + `format: "context"` |
296
318
  | Complex question, multi-source | `research` + `depth: "standard"` |
297
319
  | Structured multi-page extraction | `agent` + `schema` |
298
- | One-page structured data | `extract` + `mode: "schema"` or `"tables"` |
320
+ | One-page structured data | `extract` + `mode: "structured"` (everything) or `"schema"` / `"tables"` (targeted) |
299
321
  | Change tracking | `cache` + `check_changes: true` |
300
322
 
301
323
  ## Anti-Patterns
@@ -1,4 +1,4 @@
1
- export type Command = 'mcp' | 'warmup' | 'serve' | 'health' | 'doctor' | 'auth' | 'plugin' | 'shell';
1
+ export type Command = 'mcp' | 'warmup' | 'serve' | 'health' | 'doctor' | 'auth' | 'plugin' | 'shell' | 'init' | 'setup' | 'status';
2
2
  export interface ParsedCommand {
3
3
  command: Command;
4
4
  args: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErG,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAQ1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnI,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAeD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAQ1D"}
package/dist/cli/index.js CHANGED
@@ -1,4 +1,15 @@
1
- const KNOWN_COMMANDS = new Set(['warmup', 'serve', 'health', 'doctor', 'auth', 'plugin', 'shell']);
1
+ const KNOWN_COMMANDS = new Set([
2
+ 'warmup',
3
+ 'serve',
4
+ 'health',
5
+ 'doctor',
6
+ 'auth',
7
+ 'plugin',
8
+ 'shell',
9
+ 'init',
10
+ 'setup',
11
+ 'status',
12
+ ]);
2
13
  export function parseCommand(argv) {
3
14
  const first = argv[0];
4
15
  if (first && KNOWN_COMMANDS.has(first)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAOA,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAExH,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEtB,IAAI,KAAK,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,KAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAOA,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAClD,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEtB,IAAI,KAAK,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,KAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runInit(args: string[]): Promise<number>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAoEA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsG7D"}
@@ -0,0 +1,162 @@
1
+ import { renderBanner } from './tui/banner.js';
2
+ import { getPackageVersion } from './tui/version.js';
3
+ import { runSystemCheck } from './tui/system-check.js';
4
+ import { ok, fail, warn, info } from './tui/format.js';
5
+ import chalk from 'chalk';
6
+ import { parseInitFlags, FlagParseError } from './tui/flags.js';
7
+ import { runWarmup } from './warmup.js';
8
+ import { detectAgents } from './tui/agents.js';
9
+ import { selectAgents, NotTtyError } from './tui/select-agents.js';
10
+ import { applyConfigs } from './tui/config-writer.js';
11
+ import { runVerify } from './tui/verify.js';
12
+ import { autoReporter } from './tui/reporter-auto.js';
13
+ import { getConfig } from '../config.js';
14
+ const INIT_USAGE = [
15
+ 'Usage: wigolo init [options]',
16
+ '',
17
+ 'Options:',
18
+ ' --non-interactive, -y Skip interactive prompts',
19
+ ' --agents=<csv> Comma-separated agent ids (required with --non-interactive)',
20
+ ' --skip-verify Skip the post-install verify step',
21
+ ' --plain Force plain (non-TUI) output',
22
+ ' --help, -h Show this message',
23
+ '',
24
+ ].join('\n');
25
+ function out(line = '') {
26
+ process.stdout.write(`${line}\n`);
27
+ }
28
+ function renderSystemCheck(result) {
29
+ out(chalk.bold(' Checking your system...'));
30
+ if (result.node.ok) {
31
+ out(` ${ok(`Node.js ${result.node.version}`)}`);
32
+ }
33
+ else {
34
+ out(` ${fail(`Node.js ${result.node.version ?? '(unknown)'}`)}`);
35
+ if (result.node.message)
36
+ out(` ${chalk.gray(result.node.message)}`);
37
+ }
38
+ if (result.python.ok) {
39
+ out(` ${ok(`Python ${result.python.version} (${result.python.binary})`)}`);
40
+ }
41
+ else {
42
+ out(` ${fail('Python 3 not found')}`);
43
+ if (result.python.message)
44
+ out(` ${chalk.gray(result.python.message)}`);
45
+ out(` ${chalk.gray('Install: https://python.org/downloads or `brew install python3`')}`);
46
+ }
47
+ if (result.docker.ok) {
48
+ const ver = result.docker.version ?? '';
49
+ out(` ${ok(`Docker ${ver} ${chalk.gray('(optional, available)')}`.trim())}`);
50
+ }
51
+ else {
52
+ out(` ${warn(`Docker not found ${chalk.gray('(optional — only needed for docker-mode SearXNG)')}`)}`);
53
+ }
54
+ if (result.disk.ok) {
55
+ out(` ${ok(`Disk: ${result.disk.freeMb} MB free`)}`);
56
+ }
57
+ else {
58
+ out(` ${warn(`Disk: ${result.disk.message ?? 'low free space'}`)}`);
59
+ }
60
+ }
61
+ function renderHardFailure() {
62
+ out();
63
+ out(chalk.red.bold(' Setup cannot continue until the issues above are resolved.'));
64
+ }
65
+ export async function runInit(args) {
66
+ let flags;
67
+ try {
68
+ flags = parseInitFlags(args);
69
+ }
70
+ catch (err) {
71
+ if (err instanceof FlagParseError) {
72
+ process.stderr.write(`${err.message}\n`);
73
+ process.stderr.write(INIT_USAGE);
74
+ return 2;
75
+ }
76
+ throw err;
77
+ }
78
+ if (flags.help) {
79
+ process.stderr.write(INIT_USAGE);
80
+ return 0;
81
+ }
82
+ if (flags.nonInteractive && flags.agents.length === 0) {
83
+ process.stderr.write('--non-interactive requires --agents=<csv>\n');
84
+ process.stderr.write(INIT_USAGE);
85
+ return 2;
86
+ }
87
+ const version = getPackageVersion();
88
+ process.stdout.write(renderBanner(version));
89
+ const sysResult = await runSystemCheck();
90
+ renderSystemCheck(sysResult);
91
+ if (sysResult.hardFailure) {
92
+ renderHardFailure();
93
+ return 1;
94
+ }
95
+ out();
96
+ out(` ${info('System check passed.')}`);
97
+ out();
98
+ const reporter = autoReporter({ plain: flags.plain, command: 'init' });
99
+ try {
100
+ await runWarmup(['--all'], reporter);
101
+ }
102
+ catch (err) {
103
+ const message = err instanceof Error ? err.message : String(err);
104
+ process.stderr.write(`Warmup failed: ${message}\n`);
105
+ return 1;
106
+ }
107
+ let detected;
108
+ try {
109
+ detected = detectAgents({});
110
+ }
111
+ catch (err) {
112
+ const message = err instanceof Error ? err.message : String(err);
113
+ process.stderr.write(`Agent detection failed: ${message}\n`);
114
+ return 1;
115
+ }
116
+ let selected;
117
+ if (flags.nonInteractive) {
118
+ selected = [...flags.agents];
119
+ }
120
+ else {
121
+ try {
122
+ selected = await selectAgents(detected);
123
+ }
124
+ catch (err) {
125
+ if (err instanceof NotTtyError) {
126
+ process.stderr.write('init requires an interactive terminal.\n');
127
+ process.stderr.write('Use --non-interactive --agents=<comma-list> in scripts or CI.\n');
128
+ return 2;
129
+ }
130
+ const message = err instanceof Error ? err.message : String(err);
131
+ process.stderr.write(`Selection failed: ${message}\n`);
132
+ return 1;
133
+ }
134
+ }
135
+ if (selected.length === 0) {
136
+ process.stderr.write('No agents selected — nothing to do.\n');
137
+ return 0;
138
+ }
139
+ const config = getConfig();
140
+ try {
141
+ await applyConfigs(detected, selected, {});
142
+ }
143
+ catch (err) {
144
+ const message = err instanceof Error ? err.message : String(err);
145
+ process.stderr.write(`Writing configs failed: ${message}\n`);
146
+ return 1;
147
+ }
148
+ if (!flags.skipVerify) {
149
+ try {
150
+ const verifyResult = await runVerify(config.dataDir, reporter);
151
+ if (!verifyResult.allPassed) {
152
+ reporter.note('Some checks failed. The CLI will still continue.');
153
+ }
154
+ }
155
+ catch (err) {
156
+ const message = err instanceof Error ? err.message : String(err);
157
+ process.stderr.write(`Verify failed: ${message}\n`);
158
+ }
159
+ }
160
+ return 0;
161
+ }
162
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runSetupMcp(args: string[]): Promise<number>;
2
+ //# sourceMappingURL=setup-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-mcp.d.ts","sourceRoot":"","sources":["../../src/cli/setup-mcp.ts"],"names":[],"mappings":"AAsBA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoGjE"}
@@ -0,0 +1,116 @@
1
+ import { detectAgents } from './tui/agents.js';
2
+ import { selectAgents, NotTtyError } from './tui/select-agents.js';
3
+ import { applyConfigs } from './tui/config-writer.js';
4
+ import { printAddMcpBanner } from './tui/banner.js';
5
+ import { parseSetupMcpFlags, FlagParseError } from './tui/flags.js';
6
+ const USAGE = [
7
+ 'Usage: wigolo setup <subcommand> [options]',
8
+ '',
9
+ 'Subcommands:',
10
+ ' mcp Configure wigolo in your AI tools (Claude Code, Cursor, ...)',
11
+ '',
12
+ 'Examples:',
13
+ ' npx @staticn0va/wigolo setup mcp',
14
+ ' npx @staticn0va/wigolo setup mcp --non-interactive --agents=claude-code,cursor',
15
+ ].join('\n');
16
+ function writeErr(line) {
17
+ process.stderr.write(`${line}\n`);
18
+ }
19
+ export async function runSetupMcp(args) {
20
+ const sub = args[0];
21
+ if (!sub) {
22
+ writeErr(USAGE);
23
+ return 2;
24
+ }
25
+ if (sub !== 'mcp') {
26
+ writeErr(`Unknown subcommand: ${sub}`);
27
+ writeErr(USAGE);
28
+ return 2;
29
+ }
30
+ let flags;
31
+ try {
32
+ flags = parseSetupMcpFlags(args);
33
+ }
34
+ catch (err) {
35
+ if (err instanceof FlagParseError) {
36
+ writeErr(err.message);
37
+ writeErr(USAGE);
38
+ return 2;
39
+ }
40
+ throw err;
41
+ }
42
+ if (flags.help) {
43
+ writeErr(USAGE);
44
+ return 0;
45
+ }
46
+ printAddMcpBanner();
47
+ let detected;
48
+ try {
49
+ detected = await detectAgents({});
50
+ }
51
+ catch (err) {
52
+ const message = err instanceof Error ? err.message : String(err);
53
+ writeErr(`Agent detection failed: ${message}`);
54
+ return 1;
55
+ }
56
+ if (detected.length === 0) {
57
+ writeErr('No supported AI tools detected on this machine.');
58
+ writeErr('Supported: Claude Code, Cursor, VS Code, Zed, Gemini CLI, Windsurf, Codex, OpenCode.');
59
+ writeErr('Install one of them, then re-run: npx @staticn0va/wigolo setup mcp');
60
+ return 0;
61
+ }
62
+ let selected = [];
63
+ if (flags.nonInteractive) {
64
+ if (flags.agents.length === 0) {
65
+ writeErr('--non-interactive requires --agents=<csv>');
66
+ writeErr(USAGE);
67
+ return 2;
68
+ }
69
+ selected = [...flags.agents];
70
+ }
71
+ else {
72
+ try {
73
+ selected = await selectAgents(detected);
74
+ }
75
+ catch (err) {
76
+ if (err instanceof NotTtyError) {
77
+ writeErr('setup mcp requires an interactive terminal.');
78
+ writeErr('Use --non-interactive --agents=<comma-list> in scripts or CI.');
79
+ return 2;
80
+ }
81
+ const message = err instanceof Error ? err.message : String(err);
82
+ writeErr(`Selection failed: ${message}`);
83
+ return 1;
84
+ }
85
+ }
86
+ if (selected.length === 0) {
87
+ writeErr('No agents selected — nothing to do.');
88
+ return 0;
89
+ }
90
+ let results;
91
+ try {
92
+ results = await applyConfigs(detected, selected, {});
93
+ }
94
+ catch (err) {
95
+ const message = err instanceof Error ? err.message : String(err);
96
+ writeErr(`Writing configs failed: ${message}`);
97
+ return 1;
98
+ }
99
+ writeErr('');
100
+ writeErr('Summary:');
101
+ let hadError = false;
102
+ for (const r of results) {
103
+ const name = r.displayName;
104
+ if (r.ok) {
105
+ writeErr(` ✓ ${name}: ${r.configPath ?? r.code}`);
106
+ }
107
+ else {
108
+ hadError = true;
109
+ const loc = r.configPath ? ` (${r.configPath})` : '';
110
+ writeErr(` ✗ ${name}: ${r.message ?? r.code}${loc}`);
111
+ }
112
+ }
113
+ writeErr('');
114
+ return hadError ? 1 : 0;
115
+ }
116
+ //# sourceMappingURL=setup-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-mcp.js","sourceRoot":"","sources":["../../src/cli/setup-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runStatus(_args: string[]): Promise<number>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAYA,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BhE"}
@@ -0,0 +1,32 @@
1
+ import { createRequire } from 'node:module';
2
+ import { getConfig } from '../config.js';
3
+ import { getBootstrapState } from '../searxng/bootstrap.js';
4
+ import { readCacheStats } from './tui/status-cache.js';
5
+ import { probePythonPackages } from './tui/status-python.js';
6
+ import { readConnectedAgents } from './tui/status-agents.js';
7
+ import { formatStatus } from './tui/status-format.js';
8
+ const require = createRequire(import.meta.url);
9
+ const pkg = require('../../package.json');
10
+ export async function runStatus(_args) {
11
+ const dataDir = getConfig().dataDir;
12
+ const bootstrap = getBootstrapState(dataDir);
13
+ const searxng = bootstrap === null ? 'pending' :
14
+ bootstrap.status === 'ready' ? 'ready' :
15
+ bootstrap.status === 'failed' ? 'failed' :
16
+ 'pending';
17
+ const python = probePythonPackages(dataDir);
18
+ const cache = readCacheStats(dataDir);
19
+ const agents = readConnectedAgents({});
20
+ const bag = {
21
+ version: pkg.version ?? '0.0.0',
22
+ searxng,
23
+ flashrank: python.flashrank,
24
+ trafilatura: python.trafilatura,
25
+ embeddings: python.embeddings,
26
+ cache,
27
+ agents,
28
+ };
29
+ process.stderr.write(formatStatus(bag));
30
+ return 0;
31
+ }
32
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAEtE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAgB,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAe;IAC7C,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC;IAEpC,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,OAAO,GACX,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChC,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACxC,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC1C,SAAS,CAAC;IAEZ,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAEvC,MAAM,GAAG,GAAc;QACrB,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO;QAC/B,OAAO;QACP,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK;QACL,MAAM;KACP,CAAC;IAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,28 @@
1
+ export type AgentId = 'claude-code' | 'cursor' | 'vscode' | 'zed' | 'gemini-cli' | 'windsurf' | 'codex' | 'opencode';
2
+ export type InstallType = 'cli-command' | 'config-file' | 'config-toml';
3
+ export interface AgentDescriptor {
4
+ id: AgentId;
5
+ displayName: string;
6
+ installType: InstallType;
7
+ /** Returns true when wigolo can plausibly install into this agent on this machine. */
8
+ detect(opts: {
9
+ cwd: string;
10
+ home: string;
11
+ }): boolean;
12
+ /**
13
+ * Returns the path wigolo will write its MCP config to (or read from for status).
14
+ * Returns null for cli-command agents (Claude Code).
15
+ */
16
+ configPath(opts: {
17
+ cwd: string;
18
+ home: string;
19
+ }): string | null;
20
+ }
21
+ export interface DetectedAgent {
22
+ id: AgentId;
23
+ displayName: string;
24
+ detected: boolean;
25
+ configPath: string | null;
26
+ installType: InstallType;
27
+ }
28
+ //# sourceMappingURL=agents-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-types.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/agents-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GACf,aAAa,GACb,QAAQ,GACR,QAAQ,GACR,KAAK,GACL,YAAY,GACZ,UAAU,GACV,OAAO,GACP,UAAU,CAAC;AAEf,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC;AAExE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,sFAAsF;IACtF,MAAM,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;IACrD;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agents-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-types.js","sourceRoot":"","sources":["../../../src/cli/tui/agents-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { AgentDescriptor, DetectedAgent } from './agents-types.js';
2
+ import { fileExists } from './detect-helpers.js';
3
+ export type { AgentId, AgentDescriptor, DetectedAgent, InstallType } from './agents-types.js';
4
+ export declare const AGENTS: readonly AgentDescriptor[];
5
+ export interface DetectAgentsOptions {
6
+ cwd?: string;
7
+ home?: string;
8
+ }
9
+ export declare function detectAgents(opts?: DetectAgentsOptions): DetectedAgent[];
10
+ export { fileExists };
11
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/agents.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAA2B,UAAU,EAAmB,MAAM,qBAAqB,CAAC;AAE3F,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAyF9F,eAAO,MAAM,MAAM,EAAE,SAAS,eAAe,EAS5C,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,aAAa,EAAE,CAY5E;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}