@staticn0va/wigolo 0.5.1 → 0.6.1

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 (48) hide show
  1. package/README.md +46 -34
  2. package/SKILL.md +253 -89
  3. package/dist/cli/doctor.d.ts.map +1 -1
  4. package/dist/cli/doctor.js +17 -15
  5. package/dist/cli/doctor.js.map +1 -1
  6. package/dist/cli/warmup.d.ts.map +1 -1
  7. package/dist/cli/warmup.js +93 -13
  8. package/dist/cli/warmup.js.map +1 -1
  9. package/dist/embedding/subprocess.d.ts.map +1 -1
  10. package/dist/embedding/subprocess.js +2 -1
  11. package/dist/embedding/subprocess.js.map +1 -1
  12. package/dist/extraction/trafilatura.d.ts.map +1 -1
  13. package/dist/extraction/trafilatura.js +3 -2
  14. package/dist/extraction/trafilatura.js.map +1 -1
  15. package/dist/fetch/router.d.ts +1 -0
  16. package/dist/fetch/router.d.ts.map +1 -1
  17. package/dist/fetch/router.js.map +1 -1
  18. package/dist/instructions.d.ts +3 -3
  19. package/dist/instructions.d.ts.map +1 -1
  20. package/dist/instructions.js +19 -4
  21. package/dist/instructions.js.map +1 -1
  22. package/dist/python-env.d.ts +9 -0
  23. package/dist/python-env.d.ts.map +1 -0
  24. package/dist/python-env.js +18 -0
  25. package/dist/python-env.js.map +1 -0
  26. package/dist/search/find-similar.d.ts.map +1 -1
  27. package/dist/search/find-similar.js +136 -29
  28. package/dist/search/find-similar.js.map +1 -1
  29. package/dist/search/flashrank.d.ts.map +1 -1
  30. package/dist/search/flashrank.js +2 -1
  31. package/dist/search/flashrank.js.map +1 -1
  32. package/dist/server/backend-status.d.ts +2 -0
  33. package/dist/server/backend-status.d.ts.map +1 -1
  34. package/dist/server/backend-status.js +13 -0
  35. package/dist/server/backend-status.js.map +1 -1
  36. package/dist/server.d.ts.map +1 -1
  37. package/dist/server.js +51 -3
  38. package/dist/server.js.map +1 -1
  39. package/dist/tools/fetch.d.ts.map +1 -1
  40. package/dist/tools/fetch.js +6 -4
  41. package/dist/tools/fetch.js.map +1 -1
  42. package/dist/tools/search.d.ts +2 -2
  43. package/dist/tools/search.d.ts.map +1 -1
  44. package/dist/tools/search.js +55 -8
  45. package/dist/tools/search.js.map +1 -1
  46. package/dist/types.d.ts +8 -0
  47. package/dist/types.d.ts.map +1 -1
  48. package/package.json +2 -1
@@ -41,6 +41,15 @@ export const WIGOLO_INSTRUCTIONS = `Wigolo is a local-first web access layer: se
41
41
  | Structured extraction | \`extract\` | \`mode: "schema"\` with a JSON Schema, or \`mode: "tables"\` |
42
42
  | Site inventory | \`crawl\` | \`strategy: "map"\` for URL-only discovery, no content fetched |
43
43
 
44
+ ## Rapidly changing content
45
+
46
+ For news, prices, status pages, release notes, or any content that changes frequently, bypass the cache with \`force_refresh: true\`:
47
+
48
+ search({ query: "...", force_refresh: true })
49
+ fetch({ url: "...", force_refresh: true })
50
+
51
+ When freshness matters more than speed, use \`force_refresh\`. When speed matters more than freshness (documentation, tutorials, reference pages), let the cache work -- it is much faster.
52
+
44
53
  ## Check the cache before going to the network
45
54
 
46
55
  Before every \`search\` or \`fetch\`, consider a \`cache\` call with the query text or URL pattern. Pages read in this or a prior session return instantly with their full markdown -- no network, no rate limits. The \`research\` and \`agent\` tools check the cache internally, so you do not need a separate call for those.
@@ -85,8 +94,11 @@ Key parameters:
85
94
  - use_auth: true to use stored browser session for authenticated/private pages
86
95
  - render_js: "auto" (default, detects JS need), "always" (force browser), "never" (HTTP only, fastest)
87
96
  - headers: custom HTTP headers if needed
97
+ - force_refresh: true to bypass cache and fetch fresh content from the network
98
+
99
+ Returns title, markdown content, links, images, and metadata. Result is cached locally -- subsequent fetches of the same URL return instantly. Works with localhost URLs (localhost:3000, etc.) for reading local dev servers.
88
100
 
89
- Returns title, markdown content, links, images, and metadata. Result is cached locally -- subsequent fetches of the same URL return instantly. Works with localhost URLs (localhost:3000, etc.) for reading local dev servers.`,
101
+ Use force_refresh: true for pages that change frequently (news sites, changelogs, dashboards, API status pages). By default, previously fetched pages are served from local cache for speed.`,
90
102
  search: `Search the web and return full markdown content from top results. Use for finding information on any topic -- returns extracted page content, not just snippets.
91
103
 
92
104
  Key parameters:
@@ -95,11 +107,14 @@ Key parameters:
95
107
  - category: "general", "news", "code", "docs", "papers" -- filters by content type
96
108
  - from_date/to_date: ISO dates for time-bounded queries
97
109
  - max_results: default 5. Use 3 for focused queries, 10+ for research.
98
- - format: "full" (default, structured JSON), "context" (single token-budgeted string for LLM injection), "answer" (synthesized direct answer via requestSampling), "stream_answer" (streaming answer chunks)
110
+ - format: "full" (default, structured JSON), "context" (single token-budgeted string for LLM injection), "answer" (synthesized direct answer via requestSampling), "stream_answer" (same as answer, with MCP progress notifications emitted between pipeline phases)
111
+ - force_refresh: true to bypass all caches (search results and page content)
112
+
113
+ The "answer" format uses the MCP client's sampling capability to synthesize a direct response from search results. If sampling is not supported, falls back to "context" format. "stream_answer" emits notifications/progress messages at each pipeline phase (search, fetch, synthesize) when the client provides a progressToken via request._meta — token-level streaming of the LLM response is not supported by MCP sampling, so the answer itself still arrives as one block.
99
114
 
100
- The "answer" format uses the MCP client's sampling capability to synthesize a direct response from search results. If sampling is not supported, falls back to "context" format. "stream_answer" sends incremental progress notifications.
115
+ Results include title, URL, relevance_score, and full markdown_content per result. Previously fetched pages are served from local cache.
101
116
 
102
- Results include title, URL, relevance_score, and full markdown_content per result. Previously fetched pages are served from local cache.`,
117
+ Use force_refresh: true when you need current information that may have changed since the last search. Default behavior uses cached results when available.`,
103
118
  crawl: `Crawl a website starting from a URL and return content from multiple pages. Use for indexing documentation sites, wikis, or any multi-page resource.
104
119
 
105
120
  Key parameters:
@@ -1 +1 @@
1
- {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mMA8DgK,CAAC;AAEpM,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAE;;;;;;;;+NAQsN;IAE7N,MAAM,EAAE;;;;;;;;;;;;yIAY+H;IAEvI,KAAK,EAAE;;;;;;;;uLAQ8K;IAErL,KAAK,EAAE;;;;;;;;;0GASiG;IAExG,OAAO,EAAE;;;;;;;;4LAQiL;IAE1L,YAAY,EAAE;;;;;;;;;;;uEAWuD;IAErE,QAAQ,EAAE;;;;;;;;;;;;;;yHAc6G;IAEvH,KAAK,EAAE;;;;;;;;;;;;;;;;sKAgB6J;CAC5J,CAAC"}
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mMAuEgK,CAAC;AAEpM,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAE;;;;;;;;;;;6LAWoL;IAE3L,MAAM,EAAE;;;;;;;;;;;;;;;4JAekJ;IAE1J,KAAK,EAAE;;;;;;;;uLAQ8K;IAErL,KAAK,EAAE;;;;;;;;;0GASiG;IAExG,OAAO,EAAE;;;;;;;;4LAQiL;IAE1L,YAAY,EAAE;;;;;;;;;;;uEAWuD;IAErE,QAAQ,EAAE;;;;;;;;;;;;;;yHAc6G;IAEvH,KAAK,EAAE;;;;;;;;;;;;;;;;sKAgB6J;CAC5J,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Returns the Python binary to use for every Python operation — pip installs,
3
+ * import availability checks, and long-lived subprocess spawns. Prefers the
4
+ * SearXNG venv python (created by bootstrap) to guarantee that warmup, doctor,
5
+ * and runtime all hit the same interpreter and see the same packages.
6
+ * Falls back to system `python3` when the venv has not been created yet.
7
+ */
8
+ export declare function getPythonBin(dataDir?: string): string;
9
+ //# sourceMappingURL=python-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-env.d.ts","sourceRoot":"","sources":["../src/python-env.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAKrD"}
@@ -0,0 +1,18 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { getConfig } from './config.js';
4
+ /**
5
+ * Returns the Python binary to use for every Python operation — pip installs,
6
+ * import availability checks, and long-lived subprocess spawns. Prefers the
7
+ * SearXNG venv python (created by bootstrap) to guarantee that warmup, doctor,
8
+ * and runtime all hit the same interpreter and see the same packages.
9
+ * Falls back to system `python3` when the venv has not been created yet.
10
+ */
11
+ export function getPythonBin(dataDir) {
12
+ const dir = dataDir ?? getConfig().dataDir;
13
+ if (!dir)
14
+ return 'python3';
15
+ const venvPython = join(dir, 'searxng', 'venv', 'bin', 'python');
16
+ return existsSync(venvPython) ? venvPython : 'python3';
17
+ }
18
+ //# sourceMappingURL=python-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-env.js","sourceRoot":"","sources":["../src/python-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,MAAM,GAAG,GAAG,OAAO,IAAI,SAAS,EAAE,CAAC,OAAO,CAAC;IAC3C,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"find-similar.d.ts","sourceRoot":"","sources":["../../src/search/find-similar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAEjB,YAAY,EAEb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAuBjE,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAoH5B"}
1
+ {"version":3,"file":"find-similar.d.ts","sourceRoot":"","sources":["../../src/search/find-similar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAEjB,YAAY,EAEb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAyBjE,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAqJ5B"}
@@ -9,9 +9,12 @@ import { createLogger } from '../logger.js';
9
9
  const log = createLogger('search');
10
10
  const DEFAULT_MAX_RESULTS = 10;
11
11
  const MAX_FTS5_CANDIDATES = 20;
12
+ const MAX_EMBEDDING_CANDIDATES = 20;
12
13
  const WEB_SEARCH_QUERY_COUNT = 3;
13
14
  export async function findSimilar(input, engines, router, backendStatus) {
14
15
  const start = Date.now();
16
+ // Probe embedding availability once up front for the whole request
17
+ const embeddingAvailable = checkEmbeddingAvailable();
15
18
  try {
16
19
  const url = input.url?.trim();
17
20
  const concept = input.concept?.trim();
@@ -21,7 +24,7 @@ export async function findSimilar(input, engines, router, backendStatus) {
21
24
  method: 'fts5',
22
25
  cache_hits: 0,
23
26
  search_hits: 0,
24
- embedding_available: false,
27
+ embedding_available: embeddingAvailable,
25
28
  error: 'Either url or concept must be provided',
26
29
  total_time_ms: Date.now() - start,
27
30
  };
@@ -30,50 +33,70 @@ export async function findSimilar(input, engines, router, backendStatus) {
30
33
  const includeCache = input.include_cache ?? true;
31
34
  const includeWeb = input.include_web ?? true;
32
35
  const signal = await prepareSignal(url, concept, router);
33
- if (signal.terms.length === 0) {
34
- log.warn('no key terms extracted, falling back to web search');
36
+ if (signal.terms.length === 0 && !signal.queryText) {
37
+ log.warn('no key terms or query text extracted, falling back to web search');
35
38
  if (!includeWeb) {
36
39
  return {
37
40
  results: [],
38
41
  method: 'fts5',
39
42
  cache_hits: 0,
40
43
  search_hits: 0,
41
- embedding_available: false,
44
+ embedding_available: embeddingAvailable,
42
45
  error: 'Could not extract key terms from input and web search is disabled',
43
46
  total_time_ms: Date.now() - start,
44
47
  };
45
48
  }
46
49
  }
47
- // FTS5 search on cache
50
+ // Phase 1: FTS5 + embedding in parallel (both hit local state, cheap)
48
51
  let cacheResults = [];
49
52
  const fts5RankMap = new Map();
50
- if (includeCache && signal.terms.length > 0) {
51
- cacheResults = runFTS5Search(signal.terms, signal.inputNormalizedUrl, input.include_domains, input.exclude_domains, MAX_FTS5_CANDIDATES, fts5RankMap);
52
- log.debug('FTS5 search complete', { hits: cacheResults.length });
53
- }
54
- // Web search fallback
53
+ let embeddingResults = [];
54
+ const embeddingRankMap = new Map();
55
+ await Promise.all([
56
+ (async () => {
57
+ if (includeCache && signal.terms.length > 0) {
58
+ cacheResults = runFTS5Search(signal.terms, signal.inputNormalizedUrl, input.include_domains, input.exclude_domains, MAX_FTS5_CANDIDATES, fts5RankMap);
59
+ log.debug('FTS5 search complete', { hits: cacheResults.length });
60
+ }
61
+ })(),
62
+ (async () => {
63
+ if (includeCache && embeddingAvailable && signal.queryText) {
64
+ embeddingResults = await runEmbeddingSearch(signal.queryText, signal.inputNormalizedUrl, input.include_domains, input.exclude_domains, MAX_EMBEDDING_CANDIDATES, embeddingRankMap);
65
+ log.debug('embedding search complete', { hits: embeddingResults.length });
66
+ }
67
+ })(),
68
+ ]);
69
+ // Phase 2: Web search fallback (only if combined unique local hits < maxResults)
55
70
  let searchResults = [];
56
71
  const searchRankMap = new Map();
57
- if (cacheResults.length < maxResults && includeWeb) {
72
+ const combinedLocalHits = new Set();
73
+ for (const r of cacheResults)
74
+ combinedLocalHits.add(safeNormalize(r.url));
75
+ for (const r of embeddingResults)
76
+ combinedLocalHits.add(safeNormalize(r.url));
77
+ if (combinedLocalHits.size < maxResults && includeWeb) {
58
78
  searchResults = await runWebSearchFallback(signal, engines, router, backendStatus, maxResults, signal.inputNormalizedUrl, input.include_domains, input.exclude_domains, searchRankMap);
59
79
  log.debug('web search fallback complete', { hits: searchResults.length });
60
80
  }
61
- // Fuse results via RRF
81
+ // Phase 3: 3-way RRF fusion
62
82
  const rankedLists = [];
63
83
  if (fts5RankMap.size > 0)
64
84
  rankedLists.push(fts5RankMap);
85
+ if (embeddingRankMap.size > 0)
86
+ rankedLists.push(embeddingRankMap);
65
87
  if (searchRankMap.size > 0)
66
88
  rankedLists.push(searchRankMap);
89
+ const allResults = mergeResults(cacheResults, embeddingResults, searchResults);
67
90
  let finalResults;
68
91
  if (rankedLists.length >= 1) {
69
- finalResults = fuseResults(rankedLists, cacheResults, searchResults, maxResults);
92
+ finalResults = fuseResults(rankedLists, allResults, maxResults);
70
93
  }
71
94
  else {
72
- finalResults = [...cacheResults, ...searchResults]
95
+ finalResults = allResults
73
96
  .sort((a, b) => b.relevance_score - a.relevance_score)
74
97
  .slice(0, maxResults);
75
98
  }
76
- const method = determineMethod(cacheResults.length > 0, searchResults.length > 0);
99
+ const method = determineMethod(cacheResults.length > 0, embeddingResults.length > 0, searchResults.length > 0);
77
100
  const cacheHits = finalResults.filter(r => r.source === 'cache').length;
78
101
  const searchHits = finalResults.filter(r => r.source === 'search').length;
79
102
  return {
@@ -81,7 +104,7 @@ export async function findSimilar(input, engines, router, backendStatus) {
81
104
  method,
82
105
  cache_hits: cacheHits,
83
106
  search_hits: searchHits,
84
- embedding_available: false,
107
+ embedding_available: embeddingAvailable,
85
108
  total_time_ms: Date.now() - start,
86
109
  };
87
110
  }
@@ -92,19 +115,57 @@ export async function findSimilar(input, engines, router, backendStatus) {
92
115
  method: 'fts5',
93
116
  cache_hits: 0,
94
117
  search_hits: 0,
95
- embedding_available: false,
118
+ embedding_available: embeddingAvailable,
96
119
  error: `find_similar failed: ${err instanceof Error ? err.message : String(err)}`,
97
120
  total_time_ms: Date.now() - start,
98
121
  };
99
122
  }
100
123
  }
124
+ function checkEmbeddingAvailable() {
125
+ try {
126
+ const svc = getEmbeddingService();
127
+ return svc.isAvailable() && svc.getIndex().size() > 0;
128
+ }
129
+ catch {
130
+ return false;
131
+ }
132
+ }
133
+ function safeNormalize(url) {
134
+ try {
135
+ return normalizeUrl(url);
136
+ }
137
+ catch {
138
+ return url;
139
+ }
140
+ }
141
+ function mergeResults(...lists) {
142
+ const seen = new Map();
143
+ for (const list of lists) {
144
+ for (const r of list) {
145
+ const key = safeNormalize(r.url);
146
+ const existing = seen.get(key);
147
+ if (!existing) {
148
+ seen.set(key, r);
149
+ }
150
+ else {
151
+ // Merge match_signals so fused result records the most-specific source info
152
+ existing.match_signals = {
153
+ ...existing.match_signals,
154
+ ...r.match_signals,
155
+ fused_score: existing.match_signals.fused_score,
156
+ };
157
+ }
158
+ }
159
+ }
160
+ return [...seen.values()];
161
+ }
101
162
  async function prepareSignal(url, concept, router) {
102
163
  if (url) {
103
164
  return await prepareSignalFromUrl(url, router);
104
165
  }
105
166
  if (concept) {
106
167
  const terms = extractKeyTerms(concept, '');
107
- return { terms, title: concept };
168
+ return { terms, title: concept, queryText: concept };
108
169
  }
109
170
  return { terms: [], title: '' };
110
171
  }
@@ -124,6 +185,7 @@ async function prepareSignalFromUrl(url, router) {
124
185
  title: cached.title,
125
186
  inputUrl: url,
126
187
  inputNormalizedUrl: normalizedInputUrl,
188
+ queryText: cached.markdown,
127
189
  };
128
190
  }
129
191
  try {
@@ -138,6 +200,7 @@ async function prepareSignalFromUrl(url, router) {
138
200
  title: extraction.title,
139
201
  inputUrl: url,
140
202
  inputNormalizedUrl: normalizedInputUrl,
203
+ queryText: extraction.markdown,
141
204
  };
142
205
  }
143
206
  catch (err) {
@@ -151,6 +214,53 @@ async function prepareSignalFromUrl(url, router) {
151
214
  };
152
215
  }
153
216
  }
217
+ async function runEmbeddingSearch(queryText, excludeNormalizedUrl, includeDomains, excludeDomains, topK, rankMap) {
218
+ try {
219
+ const service = getEmbeddingService();
220
+ if (!service.isAvailable() || service.getIndex().size() === 0)
221
+ return [];
222
+ const excludeUrls = excludeNormalizedUrl ? new Set([excludeNormalizedUrl]) : undefined;
223
+ const similar = await service.findSimilar(queryText, topK, excludeUrls);
224
+ if (similar.length === 0)
225
+ return [];
226
+ // Hydrate with cached content and apply domain filters on the hydrated pool
227
+ const hydrated = [];
228
+ for (const { url: nUrl, score } of similar) {
229
+ const cached = getCachedContent(nUrl);
230
+ hydrated.push({ entry: cached, url: nUrl, score });
231
+ }
232
+ const filterableInputs = hydrated.map(h => ({
233
+ url: h.entry?.url ?? h.url,
234
+ }));
235
+ const filtered = filterByDomains(filterableInputs, includeDomains, excludeDomains);
236
+ const allowedUrls = new Set(filtered.map(f => f.url));
237
+ const results = [];
238
+ let rank = 0;
239
+ for (const h of hydrated) {
240
+ const displayUrl = h.entry?.url ?? h.url;
241
+ if (!allowedUrls.has(displayUrl))
242
+ continue;
243
+ rank++;
244
+ rankMap.set(safeNormalize(displayUrl), rank);
245
+ results.push({
246
+ url: displayUrl,
247
+ title: h.entry?.title ?? displayUrl,
248
+ markdown: (h.entry?.markdown ?? '').slice(0, 5000),
249
+ relevance_score: h.score,
250
+ source: 'cache',
251
+ match_signals: {
252
+ embedding_rank: rank,
253
+ fused_score: 0,
254
+ },
255
+ });
256
+ }
257
+ return results;
258
+ }
259
+ catch (err) {
260
+ log.warn('embedding search failed', { error: String(err) });
261
+ return [];
262
+ }
263
+ }
154
264
  function runFTS5Search(terms, excludeNormalizedUrl, includeDomains, excludeDomains, maxCandidates, rankMap) {
155
265
  try {
156
266
  const fts5Query = buildFTS5Query(terms);
@@ -283,18 +393,12 @@ function generateSearchQueries(terms, title) {
283
393
  const unique = [...new Set(queries)];
284
394
  return unique.slice(0, WEB_SEARCH_QUERY_COUNT);
285
395
  }
286
- function fuseResults(rankedLists, cacheResults, searchResults, maxResults) {
396
+ function fuseResults(rankedLists, allResults, maxResults) {
287
397
  const scores = reciprocalRankFusion(rankedLists);
288
398
  const sorted = sortByRRFScore(scores);
289
399
  const resultsByNormalizedUrl = new Map();
290
- for (const r of [...cacheResults, ...searchResults]) {
291
- let key;
292
- try {
293
- key = normalizeUrl(r.url);
294
- }
295
- catch {
296
- key = r.url;
297
- }
400
+ for (const r of allResults) {
401
+ const key = safeNormalize(r.url);
298
402
  if (!resultsByNormalizedUrl.has(key)) {
299
403
  resultsByNormalizedUrl.set(key, r);
300
404
  }
@@ -317,9 +421,12 @@ function fuseResults(rankedLists, cacheResults, searchResults, maxResults) {
317
421
  }
318
422
  return fused;
319
423
  }
320
- function determineMethod(hasCache, hasSearch) {
321
- if (hasCache && hasSearch)
424
+ function determineMethod(hasCache, hasEmbedding, hasSearch) {
425
+ const sources = [hasCache, hasEmbedding, hasSearch].filter(Boolean).length;
426
+ if (sources >= 2)
322
427
  return 'hybrid';
428
+ if (hasEmbedding)
429
+ return 'embedding';
323
430
  if (hasCache)
324
431
  return 'fts5';
325
432
  if (hasSearch)
@@ -1 +1 @@
1
- {"version":3,"file":"find-similar.js","sourceRoot":"","sources":["../../src/search/find-similar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-similar.js","sourceRoot":"","sources":["../../src/search/find-similar.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"flashrank.d.ts","sourceRoot":"","sources":["../../src/search/flashrank.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAkBD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS7D;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAMD,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,EAAE,EACzB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CA0BhC"}
1
+ {"version":3,"file":"flashrank.d.ts","sourceRoot":"","sources":["../../src/search/flashrank.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAkBD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS7D;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAMD,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,EAAE,EACzB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CA0BhC"}
@@ -2,6 +2,7 @@ import { execFile as execFileCb } from 'node:child_process';
2
2
  import { promisify } from 'node:util';
3
3
  import { runPythonWithStdin } from '../extraction/trafilatura.js';
4
4
  import { createLogger } from '../logger.js';
5
+ import { getPythonBin } from '../python-env.js';
5
6
  const execFileAsync = promisify(execFileCb);
6
7
  const log = createLogger('search');
7
8
  const FLASHRANK_SCRIPT = `
@@ -21,7 +22,7 @@ export async function isFlashRankAvailable() {
21
22
  if (availableCache !== null)
22
23
  return availableCache;
23
24
  try {
24
- await execFileAsync('python3', ['-c', 'import flashrank'], { timeout: AVAILABILITY_CHECK_TIMEOUT_MS });
25
+ await execFileAsync(getPythonBin(), ['-c', 'import flashrank'], { timeout: AVAILABILITY_CHECK_TIMEOUT_MS });
25
26
  availableCache = true;
26
27
  }
27
28
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"flashrank.js","sourceRoot":"","sources":["../../src/search/flashrank.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAYnC,MAAM,gBAAgB,GAAG;;;;;;;;;CASxB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAE3C,IAAI,cAAc,GAAmB,IAAI,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,cAAc,KAAK,IAAI;QAAE,OAAO,cAAc,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;QACvG,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAa,EACb,QAAyB,EACzB,KAAc;IAEd,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,KAAK;YACL,QAAQ;YACR,KAAK,EAAE,KAAK,IAAI,yBAAyB;SAC1C,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,gBAAgB,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAClF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmC,EAAE,EAAE,CAAC,CAAC;YAC1D,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;SAC3B,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,6DAA6D,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"flashrank.js","sourceRoot":"","sources":["../../src/search/flashrank.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAYnC,MAAM,gBAAgB,GAAG;;;;;;;;;CASxB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAE3C,IAAI,cAAc,GAAmB,IAAI,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,cAAc,KAAK,IAAI;QAAE,OAAO,cAAc,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;QAC5G,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAa,EACb,QAAyB,EACzB,KAAc;IAEd,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,KAAK;YACL,QAAQ;YACR,KAAK,EAAE,KAAK,IAAI,yBAAyB;SAC1C,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,gBAAgB,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAClF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAmC,EAAE,EAAE,CAAC,CAAC;YAC1D,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;SAC3B,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,6DAA6D,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -2,8 +2,10 @@ export declare class BackendStatus {
2
2
  private _active;
3
3
  private _reason;
4
4
  private _warned;
5
+ private _bootstrapping;
5
6
  get isActive(): boolean;
6
7
  markUnhealthy(reason: string): void;
8
+ markBootstrapping(): void;
7
9
  markHealthy(): void;
8
10
  /** Returns warning text once per fallback session, then undefined. */
9
11
  consumeWarning(): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"backend-status.d.ts","sourceRoot":"","sources":["../../src/server/backend-status.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAS;IAExB,IAAI,QAAQ,IAAI,OAAO,CAAyB;IAEhD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMnC,WAAW,IAAI,IAAI;IAMnB,sEAAsE;IACtE,cAAc,IAAI,MAAM,GAAG,SAAS;CAUrC"}
1
+ {"version":3,"file":"backend-status.d.ts","sourceRoot":"","sources":["../../src/server/backend-status.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;IAE/B,IAAI,QAAQ,IAAI,OAAO,CAAyB;IAEhD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOnC,iBAAiB,IAAI,IAAI;IAOzB,WAAW,IAAI,IAAI;IAOnB,sEAAsE;IACtE,cAAc,IAAI,MAAM,GAAG,SAAS;CAgBrC"}
@@ -2,22 +2,35 @@ export class BackendStatus {
2
2
  _active = false;
3
3
  _reason;
4
4
  _warned = false;
5
+ _bootstrapping = false;
5
6
  get isActive() { return this._active; }
6
7
  markUnhealthy(reason) {
7
8
  this._active = false;
8
9
  this._reason = reason;
9
10
  this._warned = false;
11
+ this._bootstrapping = false;
12
+ }
13
+ markBootstrapping() {
14
+ this._active = false;
15
+ this._reason = 'bootstrap in progress';
16
+ this._warned = false;
17
+ this._bootstrapping = true;
10
18
  }
11
19
  markHealthy() {
12
20
  this._active = true;
13
21
  this._reason = undefined;
14
22
  this._warned = false;
23
+ this._bootstrapping = false;
15
24
  }
16
25
  /** Returns warning text once per fallback session, then undefined. */
17
26
  consumeWarning() {
18
27
  if (this._active || this._warned)
19
28
  return undefined;
20
29
  this._warned = true;
30
+ if (this._bootstrapping) {
31
+ return (`SearXNG is still starting up. Results may be lower quality until bootstrap finishes. ` +
32
+ `For best results, run: \`npx @staticn0va/wigolo warmup --all\` before connecting your agent.`);
33
+ }
21
34
  return (`SearXNG embedded search is unavailable; using direct engine scraping (lower quality). ` +
22
35
  `Reason: ${this._reason ?? 'unknown'}. ` +
23
36
  `To retry: \`npx @staticn0va/wigolo warmup --force\`. ` +
@@ -1 +1 @@
1
- {"version":3,"file":"backend-status.js","sourceRoot":"","sources":["../../src/server/backend-status.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAa;IAChB,OAAO,GAAG,KAAK,CAAC;IAChB,OAAO,CAAqB;IAC5B,OAAO,GAAG,KAAK,CAAC;IAExB,IAAI,QAAQ,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhD,aAAa,CAAC,MAAc;QAC1B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,WAAW;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,sEAAsE;IACtE,cAAc;QACZ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QACnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,OAAO,CACL,wFAAwF;YACxF,WAAW,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI;YACxC,uDAAuD;YACvD,iDAAiD,CAClD,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"backend-status.js","sourceRoot":"","sources":["../../src/server/backend-status.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAa;IAChB,OAAO,GAAG,KAAK,CAAC;IAChB,OAAO,CAAqB;IAC5B,OAAO,GAAG,KAAK,CAAC;IAChB,cAAc,GAAG,KAAK,CAAC;IAE/B,IAAI,QAAQ,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhD,aAAa,CAAC,MAAc;QAC1B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,uBAAuB,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,sEAAsE;IACtE,cAAc;QACZ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QACnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,CACL,uFAAuF;gBACvF,8FAA8F,CAC/F,CAAC;QACJ,CAAC;QACD,OAAO,CACL,wFAAwF;YACxF,WAAW,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI;YACxC,uDAAuD;YACvD,iDAAiD,CAClD,CAAC;IACJ,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAMnE,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAmB3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAK3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAA2B,YAAY,EAAqF,MAAM,YAAY,CAAC;AAiV3J,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAqK1D;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAkJ9D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBjD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAMnE,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAmB3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAM3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAA2B,YAAY,EAAuG,MAAM,YAAY,CAAC;AAyV7K,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAsL1D;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CA0K9D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBjD"}