@staticn0va/wigolo 0.3.1 → 0.4.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 (163) hide show
  1. package/README.md +57 -2
  2. package/SKILL.md +149 -0
  3. package/dist/cache/change-detector.d.ts +7 -0
  4. package/dist/cache/change-detector.d.ts.map +1 -0
  5. package/dist/cache/change-detector.js +43 -0
  6. package/dist/cache/change-detector.js.map +1 -0
  7. package/dist/cache/diff-summary.d.ts +2 -0
  8. package/dist/cache/diff-summary.d.ts.map +1 -0
  9. package/dist/cache/diff-summary.js +87 -0
  10. package/dist/cache/diff-summary.js.map +1 -0
  11. package/dist/cache/store.d.ts +2 -0
  12. package/dist/cache/store.d.ts.map +1 -1
  13. package/dist/cache/store.js +10 -0
  14. package/dist/cache/store.js.map +1 -1
  15. package/dist/cli/auth.d.ts +2 -0
  16. package/dist/cli/auth.d.ts.map +1 -0
  17. package/dist/cli/auth.js +95 -0
  18. package/dist/cli/auth.js.map +1 -0
  19. package/dist/cli/daemon.d.ts +6 -1
  20. package/dist/cli/daemon.d.ts.map +1 -1
  21. package/dist/cli/daemon.js +56 -3
  22. package/dist/cli/daemon.js.map +1 -1
  23. package/dist/cli/health.d.ts +1 -1
  24. package/dist/cli/health.d.ts.map +1 -1
  25. package/dist/cli/health.js +41 -3
  26. package/dist/cli/health.js.map +1 -1
  27. package/dist/cli/index.d.ts +1 -1
  28. package/dist/cli/index.d.ts.map +1 -1
  29. package/dist/cli/index.js +1 -1
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/cli/plugin.d.ts +5 -0
  32. package/dist/cli/plugin.d.ts.map +1 -0
  33. package/dist/cli/plugin.js +188 -0
  34. package/dist/cli/plugin.js.map +1 -0
  35. package/dist/cli/shell.d.ts +2 -0
  36. package/dist/cli/shell.d.ts.map +1 -0
  37. package/dist/cli/shell.js +86 -0
  38. package/dist/cli/shell.js.map +1 -0
  39. package/dist/cli/warmup.d.ts +4 -0
  40. package/dist/cli/warmup.d.ts.map +1 -1
  41. package/dist/cli/warmup.js +48 -1
  42. package/dist/cli/warmup.js.map +1 -1
  43. package/dist/config.d.ts +7 -0
  44. package/dist/config.d.ts.map +1 -1
  45. package/dist/config.js +15 -0
  46. package/dist/config.js.map +1 -1
  47. package/dist/daemon/health-check.d.ts +16 -0
  48. package/dist/daemon/health-check.d.ts.map +1 -0
  49. package/dist/daemon/health-check.js +36 -0
  50. package/dist/daemon/health-check.js.map +1 -0
  51. package/dist/daemon/http-server.d.ts +26 -0
  52. package/dist/daemon/http-server.d.ts.map +1 -0
  53. package/dist/daemon/http-server.js +282 -0
  54. package/dist/daemon/http-server.js.map +1 -0
  55. package/dist/daemon/proxy.d.ts +10 -0
  56. package/dist/daemon/proxy.d.ts.map +1 -0
  57. package/dist/daemon/proxy.js +99 -0
  58. package/dist/daemon/proxy.js.map +1 -0
  59. package/dist/fetch/action-executor.d.ts +28 -0
  60. package/dist/fetch/action-executor.d.ts.map +1 -0
  61. package/dist/fetch/action-executor.js +86 -0
  62. package/dist/fetch/action-executor.js.map +1 -0
  63. package/dist/fetch/auth.d.ts +2 -1
  64. package/dist/fetch/auth.d.ts.map +1 -1
  65. package/dist/fetch/auth.js +30 -2
  66. package/dist/fetch/auth.js.map +1 -1
  67. package/dist/fetch/browser-pool.d.ts +30 -11
  68. package/dist/fetch/browser-pool.d.ts.map +1 -1
  69. package/dist/fetch/browser-pool.js +165 -49
  70. package/dist/fetch/browser-pool.js.map +1 -1
  71. package/dist/fetch/browser-selector.d.ts +17 -0
  72. package/dist/fetch/browser-selector.d.ts.map +1 -0
  73. package/dist/fetch/browser-selector.js +70 -0
  74. package/dist/fetch/browser-selector.js.map +1 -0
  75. package/dist/fetch/browser-types.d.ts +3 -0
  76. package/dist/fetch/browser-types.d.ts.map +1 -0
  77. package/dist/fetch/browser-types.js +45 -0
  78. package/dist/fetch/browser-types.js.map +1 -0
  79. package/dist/fetch/cdp-client.d.ts +9 -0
  80. package/dist/fetch/cdp-client.d.ts.map +1 -0
  81. package/dist/fetch/cdp-client.js +90 -0
  82. package/dist/fetch/cdp-client.js.map +1 -0
  83. package/dist/fetch/router.d.ts +4 -1
  84. package/dist/fetch/router.d.ts.map +1 -1
  85. package/dist/fetch/router.js +8 -2
  86. package/dist/fetch/router.js.map +1 -1
  87. package/dist/index.js +32 -3
  88. package/dist/index.js.map +1 -1
  89. package/dist/instructions.d.ts +26 -0
  90. package/dist/instructions.d.ts.map +1 -0
  91. package/dist/instructions.js +101 -0
  92. package/dist/instructions.js.map +1 -0
  93. package/dist/logger.d.ts +1 -1
  94. package/dist/logger.d.ts.map +1 -1
  95. package/dist/plugins/loader.d.ts +20 -0
  96. package/dist/plugins/loader.d.ts.map +1 -0
  97. package/dist/plugins/loader.js +162 -0
  98. package/dist/plugins/loader.js.map +1 -0
  99. package/dist/plugins/registry.d.ts +26 -0
  100. package/dist/plugins/registry.d.ts.map +1 -0
  101. package/dist/plugins/registry.js +68 -0
  102. package/dist/plugins/registry.js.map +1 -0
  103. package/dist/plugins/validate.d.ts +9 -0
  104. package/dist/plugins/validate.d.ts.map +1 -0
  105. package/dist/plugins/validate.js +70 -0
  106. package/dist/plugins/validate.js.map +1 -0
  107. package/dist/repl/commands/cache.d.ts +4 -0
  108. package/dist/repl/commands/cache.d.ts.map +1 -0
  109. package/dist/repl/commands/cache.js +44 -0
  110. package/dist/repl/commands/cache.js.map +1 -0
  111. package/dist/repl/commands/crawl.d.ts +7 -0
  112. package/dist/repl/commands/crawl.d.ts.map +1 -0
  113. package/dist/repl/commands/crawl.js +42 -0
  114. package/dist/repl/commands/crawl.js.map +1 -0
  115. package/dist/repl/commands/extract.d.ts +5 -0
  116. package/dist/repl/commands/extract.d.ts.map +1 -0
  117. package/dist/repl/commands/extract.js +37 -0
  118. package/dist/repl/commands/extract.js.map +1 -0
  119. package/dist/repl/commands/fetch.d.ts +5 -0
  120. package/dist/repl/commands/fetch.d.ts.map +1 -0
  121. package/dist/repl/commands/fetch.js +53 -0
  122. package/dist/repl/commands/fetch.js.map +1 -0
  123. package/dist/repl/commands/search.d.ts +5 -0
  124. package/dist/repl/commands/search.d.ts.map +1 -0
  125. package/dist/repl/commands/search.js +62 -0
  126. package/dist/repl/commands/search.js.map +1 -0
  127. package/dist/repl/commands/types.d.ts +9 -0
  128. package/dist/repl/commands/types.d.ts.map +1 -0
  129. package/dist/repl/commands/types.js +2 -0
  130. package/dist/repl/commands/types.js.map +1 -0
  131. package/dist/repl/formatters.d.ts +10 -0
  132. package/dist/repl/formatters.d.ts.map +1 -0
  133. package/dist/repl/formatters.js +209 -0
  134. package/dist/repl/formatters.js.map +1 -0
  135. package/dist/repl/parser.d.ts +9 -0
  136. package/dist/repl/parser.d.ts.map +1 -0
  137. package/dist/repl/parser.js +84 -0
  138. package/dist/repl/parser.js.map +1 -0
  139. package/dist/repl/shell.d.ts +8 -0
  140. package/dist/repl/shell.d.ts.map +1 -0
  141. package/dist/repl/shell.js +156 -0
  142. package/dist/repl/shell.js.map +1 -0
  143. package/dist/search/context-formatter.d.ts +3 -0
  144. package/dist/search/context-formatter.d.ts.map +1 -0
  145. package/dist/search/context-formatter.js +56 -0
  146. package/dist/search/context-formatter.js.map +1 -0
  147. package/dist/server.d.ts +17 -0
  148. package/dist/server.d.ts.map +1 -1
  149. package/dist/server.js +204 -104
  150. package/dist/server.js.map +1 -1
  151. package/dist/tools/cache.d.ts +2 -1
  152. package/dist/tools/cache.d.ts.map +1 -1
  153. package/dist/tools/cache.js +56 -1
  154. package/dist/tools/cache.js.map +1 -1
  155. package/dist/tools/fetch.d.ts.map +1 -1
  156. package/dist/tools/fetch.js +16 -1
  157. package/dist/tools/fetch.js.map +1 -1
  158. package/dist/tools/search.d.ts.map +1 -1
  159. package/dist/tools/search.js +10 -0
  160. package/dist/tools/search.js.map +1 -1
  161. package/dist/types.d.ts +48 -0
  162. package/dist/types.d.ts.map +1 -1
  163. package/package.json +36 -3
@@ -0,0 +1,56 @@
1
+ import { createLogger } from '../logger.js';
2
+ const log = createLogger('search');
3
+ export function formatSearchContext(results, maxTotalChars) {
4
+ if (results.length === 0 || maxTotalChars <= 0) {
5
+ return '';
6
+ }
7
+ const blocks = [];
8
+ let charsUsed = 0;
9
+ for (let i = 0; i < results.length; i++) {
10
+ const result = results[i];
11
+ const content = result.markdown_content || result.snippet || '';
12
+ const header = `Source: ${result.title} (${result.url})`;
13
+ const separator = '\n';
14
+ const blockSeparator = i > 0 ? '\n\n' : '';
15
+ const minBlockSize = blockSeparator.length + header.length + separator.length;
16
+ if (i > 0 && charsUsed + minBlockSize >= maxTotalChars) {
17
+ log.debug('context formatter stopping: next header exceeds budget', {
18
+ resultIndex: i,
19
+ charsUsed,
20
+ maxTotalChars,
21
+ });
22
+ break;
23
+ }
24
+ const remainingBudget = maxTotalChars - charsUsed - blockSeparator.length - header.length - separator.length;
25
+ let truncatedContent;
26
+ if (remainingBudget <= 0) {
27
+ const totalAvailable = maxTotalChars - charsUsed - blockSeparator.length;
28
+ if (totalAvailable <= 0 && i > 0)
29
+ break;
30
+ const headerTruncated = totalAvailable > 3 ? header.slice(0, totalAvailable - 3) + '...' : header.slice(0, Math.max(totalAvailable, 0));
31
+ blocks.push(blockSeparator + headerTruncated);
32
+ charsUsed += blockSeparator.length + headerTruncated.length;
33
+ break;
34
+ }
35
+ else if (content.length > remainingBudget) {
36
+ const truncLen = Math.max(remainingBudget - 3, 0);
37
+ truncatedContent = truncLen > 0 ? content.slice(0, truncLen) + '...' : '...';
38
+ log.debug('context formatter truncated result content', {
39
+ resultIndex: i,
40
+ originalLength: content.length,
41
+ truncatedTo: truncatedContent.length,
42
+ });
43
+ }
44
+ else {
45
+ truncatedContent = content;
46
+ }
47
+ const block = blockSeparator + header + separator + truncatedContent;
48
+ blocks.push(block);
49
+ charsUsed += block.length;
50
+ if (charsUsed >= maxTotalChars) {
51
+ break;
52
+ }
53
+ }
54
+ return blocks.join('').trimEnd();
55
+ }
56
+ //# sourceMappingURL=context-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-formatter.js","sourceRoot":"","sources":["../../src/search/context-formatter.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,2 +1,19 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { SmartRouter } from './fetch/router.js';
3
+ import { MultiBrowserPool } from './fetch/browser-pool.js';
4
+ import { BackendStatus } from './server/backend-status.js';
5
+ import { PluginRegistry } from './plugins/registry.js';
6
+ import type { SearchEngine } from './types.js';
7
+ export interface Subsystems {
8
+ searchEngines: SearchEngine[];
9
+ browserPool: MultiBrowserPool;
10
+ router: SmartRouter;
11
+ backendStatus: BackendStatus;
12
+ pluginRegistry: PluginRegistry;
13
+ shutdown: () => Promise<void>;
14
+ bootstrapSearxng: () => Promise<void>;
15
+ }
16
+ export declare function initSubsystems(): Promise<Subsystems>;
17
+ export declare function createMcpServer(subsystems: Subsystems): Server;
1
18
  export declare function startServer(): Promise<void>;
2
19
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAsMA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA8OjD"}
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;AAe3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAK3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAA2B,YAAY,EAAwC,MAAM,YAAY,CAAC;AAgO9G,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,CA8J1D;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAqG9D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBjD"}
package/dist/server.js CHANGED
@@ -5,7 +5,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
5
5
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
6
6
  import { ListToolsRequestSchema, CallToolRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
7
7
  import { SmartRouter } from './fetch/router.js';
8
- import { BrowserPool } from './fetch/browser-pool.js';
8
+ import { MultiBrowserPool } from './fetch/browser-pool.js';
9
9
  import { httpFetch } from './fetch/http-client.js';
10
10
  import { initDatabase, closeDatabase } from './cache/db.js';
11
11
  import { handleFetch } from './tools/fetch.js';
@@ -23,6 +23,10 @@ import { DockerSearxng } from './searxng/docker.js';
23
23
  import { BackendStatus } from './server/backend-status.js';
24
24
  import { getConfig } from './config.js';
25
25
  import { createLogger } from './logger.js';
26
+ import { WIGOLO_INSTRUCTIONS, TOOL_DESCRIPTIONS } from './instructions.js';
27
+ import { loadPlugins } from './plugins/loader.js';
28
+ import { PluginRegistry } from './plugins/registry.js';
29
+ import { registerExtractor } from './extraction/pipeline.js';
26
30
  const log = createLogger('server');
27
31
  function readPackageVersion() {
28
32
  try {
@@ -71,6 +75,47 @@ const FETCH_TOOL_SCHEMA = {
71
75
  description: 'Additional HTTP headers',
72
76
  additionalProperties: { type: 'string' },
73
77
  },
78
+ actions: {
79
+ type: 'array',
80
+ description: 'Sequential browser actions to perform before extracting content. ' +
81
+ 'When present, forces Playwright rendering (bypasses HTTP-first routing).',
82
+ items: {
83
+ type: 'object',
84
+ properties: {
85
+ type: {
86
+ type: 'string',
87
+ enum: ['click', 'type', 'wait', 'wait_for', 'scroll', 'screenshot'],
88
+ description: 'Action type',
89
+ },
90
+ selector: {
91
+ type: 'string',
92
+ description: 'CSS selector (required for click, type, wait_for)',
93
+ },
94
+ text: {
95
+ type: 'string',
96
+ description: 'Text to type (required for type action)',
97
+ },
98
+ ms: {
99
+ type: 'number',
100
+ description: 'Milliseconds to wait (required for wait action)',
101
+ },
102
+ timeout: {
103
+ type: 'number',
104
+ description: 'Timeout in ms for wait_for action (default: 5000)',
105
+ },
106
+ direction: {
107
+ type: 'string',
108
+ enum: ['down', 'up'],
109
+ description: 'Scroll direction (required for scroll action)',
110
+ },
111
+ amount: {
112
+ type: 'number',
113
+ description: 'Scroll amount in pixels (default: viewport height)',
114
+ },
115
+ },
116
+ required: ['type'],
117
+ },
118
+ },
74
119
  },
75
120
  required: ['url'],
76
121
  };
@@ -108,6 +153,11 @@ const SEARCH_TOOL_SCHEMA = {
108
153
  enum: ['general', 'news', 'code', 'docs', 'papers', 'images'],
109
154
  description: 'Category of search (general, news, code, docs, papers, images)',
110
155
  },
156
+ format: {
157
+ type: 'string',
158
+ enum: ['full', 'context'],
159
+ description: "Output format: 'full' returns structured results (default), 'context' returns a single token-budgeted string ready for LLM context injection",
160
+ },
111
161
  },
112
162
  required: ['query'],
113
163
  };
@@ -158,6 +208,12 @@ const CACHE_TOOL_SCHEMA = {
158
208
  type: 'boolean',
159
209
  description: 'Return cache statistics (total URLs, size, date range)',
160
210
  },
211
+ check_changes: {
212
+ type: 'boolean',
213
+ description: 'Re-fetch all matching cached URLs and report which ones have changed. ' +
214
+ 'Returns a list of URLs with changed/unchanged status and diff summaries. ' +
215
+ 'Use with query or url_pattern to scope which cached entries to check.',
216
+ },
161
217
  },
162
218
  };
163
219
  const EXTRACT_TOOL_SCHEMA = {
@@ -184,123 +240,55 @@ const EXTRACT_TOOL_SCHEMA = {
184
240
  },
185
241
  },
186
242
  };
187
- export async function startServer() {
243
+ export async function initSubsystems() {
188
244
  const config = getConfig();
189
245
  mkdirSync(config.dataDir, { recursive: true });
190
246
  initDatabase(join(config.dataDir, 'wigolo.db'));
191
247
  const httpClient = {
192
248
  fetch: (url, options) => httpFetch(url, options),
193
249
  };
194
- const browserPool = new BrowserPool();
250
+ const browserPool = new MultiBrowserPool({
251
+ browserTypes: config.browserTypes,
252
+ selectionStrategy: 'round-robin',
253
+ });
195
254
  const router = new SmartRouter(httpClient, browserPool);
196
255
  const backendStatus = new BackendStatus();
197
- // Direct scraping engines work without any bootstrap — always available so
198
- // search() succeeds immediately even before SearXNG finishes setup.
199
256
  const searchEngines = [
200
257
  new BingEngine(),
201
258
  new DuckDuckGoEngine(),
202
259
  new StartpageEngine(),
203
260
  ];
204
- let searxngProcess = null;
205
- let dockerSearxng = null;
206
- const server = new Server({ name: 'wigolo', version: SERVER_VERSION }, { capabilities: { tools: {} } });
207
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
208
- tools: [
209
- {
210
- name: 'fetch',
211
- description: 'Fetch a web page and return its content as clean markdown. ' +
212
- 'Supports JavaScript rendering, auth, section extraction, and caching.',
213
- inputSchema: FETCH_TOOL_SCHEMA,
214
- },
215
- {
216
- name: 'search',
217
- description: 'Search the web and return results with optional full content extraction. ' +
218
- 'One call: query in, clean markdown out.',
219
- inputSchema: SEARCH_TOOL_SCHEMA,
220
- },
221
- {
222
- name: 'crawl',
223
- description: 'Crawl a website starting from a seed URL. Supports BFS, DFS, and sitemap strategies ' +
224
- 'with depth/page limits, URL filtering, and cross-page content deduplication.',
225
- inputSchema: CRAWL_TOOL_SCHEMA,
226
- },
227
- {
228
- name: 'cache',
229
- description: 'Query the local knowledge base of previously fetched content. ' +
230
- 'Search cached pages by full-text query, URL pattern, or date. ' +
231
- 'Can also return cache statistics or clear entries.',
232
- inputSchema: CACHE_TOOL_SCHEMA,
233
- },
234
- {
235
- name: 'extract',
236
- description: 'Extract structured data from a web page. Supports CSS selector extraction, ' +
237
- 'table-to-JSON conversion, metadata extraction (title, author, date, JSON-LD), ' +
238
- 'and schema-based extraction (provide a JSON Schema to heuristically extract matching fields).',
239
- inputSchema: EXTRACT_TOOL_SCHEMA,
240
- },
241
- ],
242
- }));
243
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
244
- const { name, arguments: args } = request.params;
245
- if (name === 'fetch') {
246
- const input = (args ?? {});
247
- const result = await handleFetch(input, router);
248
- return {
249
- content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
250
- isError: !!result.error,
251
- };
252
- }
253
- if (name === 'search') {
254
- const input = (args ?? {});
255
- const result = await handleSearch(input, searchEngines, router, backendStatus);
256
- const blocks = [];
257
- if (result.warning) {
258
- blocks.push({ type: 'text', text: `[wigolo notice] ${result.warning}` });
259
- }
260
- blocks.push({ type: 'text', text: JSON.stringify(result, null, 2) });
261
- return {
262
- content: blocks,
263
- isError: !!result.error,
264
- };
261
+ // Load plugins from ~/.wigolo/plugins/
262
+ const pluginRegistry = new PluginRegistry();
263
+ try {
264
+ const pluginResult = await loadPlugins();
265
+ for (const ext of pluginResult.extractors) {
266
+ pluginRegistry.registerExtractor(ext, ext.name);
267
+ registerExtractor(ext);
265
268
  }
266
- if (name === 'crawl') {
267
- const input = (args ?? {});
268
- const result = await handleCrawl(input, router);
269
- return {
270
- content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
271
- isError: !!result.error,
272
- };
269
+ for (const eng of pluginResult.searchEngines) {
270
+ pluginRegistry.registerSearchEngine(eng, eng.name);
271
+ searchEngines.push(eng);
273
272
  }
274
- if (name === 'cache') {
275
- const input = (args ?? {});
276
- const result = handleCache(input);
277
- return {
278
- content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
279
- isError: !!result.error,
280
- };
273
+ if (pluginResult.errors.length > 0) {
274
+ log.warn('some plugins failed to load', {
275
+ errors: pluginResult.errors.map(e => `${e.pluginName}: ${e.message}`),
276
+ });
281
277
  }
282
- if (name === 'extract') {
283
- const input = (args ?? {});
284
- const result = await handleExtract(input, router);
285
- return {
286
- content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
287
- isError: !!result.error,
288
- };
278
+ if (pluginResult.loaded.length > 0) {
279
+ log.info('plugins loaded', {
280
+ count: pluginResult.loaded.length,
281
+ names: pluginResult.loaded.map(p => p.name),
282
+ });
289
283
  }
290
- return {
291
- content: [{ type: 'text', text: `Unknown tool: ${name}` }],
292
- isError: true,
293
- };
294
- });
295
- const transport = new StdioServerTransport();
296
- await server.connect(transport);
297
- log.info('MCP server started');
298
- // Bootstrap SearXNG in the background. The MCP server is already responding
299
- // to initialize/tools/list/tools/call. search() falls back to direct engines
300
- // until SearXNG becomes available, at which point it is unshifted to the
301
- // front of the engine list and used preferentially on subsequent calls.
284
+ }
285
+ catch (err) {
286
+ log.error('plugin loading failed', { error: String(err) });
287
+ }
288
+ let searxngProcess = null;
289
+ let dockerSearxng = null;
302
290
  let searxngBootstrap = null;
303
- searxngBootstrap = (async () => {
291
+ async function bootstrapSearxng() {
304
292
  try {
305
293
  const backend = await resolveSearchBackend();
306
294
  if (backend.type === 'external' && backend.url) {
@@ -379,12 +367,10 @@ export async function startServer() {
379
367
  log.warn('background backend setup failed', { error: String(err) });
380
368
  backendStatus.markUnhealthy(`backend setup failed: ${String(err)}`);
381
369
  }
382
- })();
383
- const shutdown = async () => {
370
+ }
371
+ async function shutdown() {
384
372
  log.info('Shutting down');
385
373
  if (searxngBootstrap) {
386
- // Let an in-flight bootstrap settle so we don't kill venv/pip mid-install
387
- // and corrupt ~/.wigolo/searxng. Bounded so we don't hang forever.
388
374
  await Promise.race([
389
375
  searxngBootstrap.catch(() => { }),
390
376
  new Promise((r) => setTimeout(r, 2000)),
@@ -396,6 +382,120 @@ export async function startServer() {
396
382
  await dockerSearxng.stop();
397
383
  await browserPool.shutdown();
398
384
  closeDatabase();
385
+ }
386
+ return {
387
+ searchEngines,
388
+ browserPool,
389
+ router,
390
+ backendStatus,
391
+ pluginRegistry,
392
+ shutdown,
393
+ bootstrapSearxng: () => {
394
+ searxngBootstrap = bootstrapSearxng();
395
+ return searxngBootstrap;
396
+ },
397
+ };
398
+ }
399
+ export function createMcpServer(subsystems) {
400
+ const { searchEngines, router, backendStatus } = subsystems;
401
+ const server = new Server({ name: 'wigolo', version: SERVER_VERSION }, {
402
+ capabilities: { tools: {} },
403
+ instructions: WIGOLO_INSTRUCTIONS,
404
+ });
405
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
406
+ tools: [
407
+ {
408
+ name: 'fetch',
409
+ description: TOOL_DESCRIPTIONS.fetch,
410
+ inputSchema: FETCH_TOOL_SCHEMA,
411
+ },
412
+ {
413
+ name: 'search',
414
+ description: TOOL_DESCRIPTIONS.search,
415
+ inputSchema: SEARCH_TOOL_SCHEMA,
416
+ },
417
+ {
418
+ name: 'crawl',
419
+ description: TOOL_DESCRIPTIONS.crawl,
420
+ inputSchema: CRAWL_TOOL_SCHEMA,
421
+ },
422
+ {
423
+ name: 'cache',
424
+ description: TOOL_DESCRIPTIONS.cache,
425
+ inputSchema: CACHE_TOOL_SCHEMA,
426
+ },
427
+ {
428
+ name: 'extract',
429
+ description: TOOL_DESCRIPTIONS.extract,
430
+ inputSchema: EXTRACT_TOOL_SCHEMA,
431
+ },
432
+ ],
433
+ }));
434
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
435
+ const { name, arguments: args } = request.params;
436
+ if (name === 'fetch') {
437
+ const input = (args ?? {});
438
+ const result = await handleFetch(input, router);
439
+ return {
440
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
441
+ isError: !!result.error,
442
+ };
443
+ }
444
+ if (name === 'search') {
445
+ const input = (args ?? {});
446
+ const result = await handleSearch(input, searchEngines, router, backendStatus);
447
+ const blocks = [];
448
+ if (result.warning) {
449
+ blocks.push({ type: 'text', text: `[wigolo notice] ${result.warning}` });
450
+ }
451
+ blocks.push({ type: 'text', text: JSON.stringify(result, null, 2) });
452
+ return {
453
+ content: blocks,
454
+ isError: !!result.error,
455
+ };
456
+ }
457
+ if (name === 'crawl') {
458
+ const input = (args ?? {});
459
+ const result = await handleCrawl(input, router);
460
+ return {
461
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
462
+ isError: !!result.error,
463
+ };
464
+ }
465
+ if (name === 'cache') {
466
+ const input = (args ?? {});
467
+ const result = await handleCache(input, router);
468
+ return {
469
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
470
+ isError: !!result.error,
471
+ };
472
+ }
473
+ if (name === 'extract') {
474
+ const input = (args ?? {});
475
+ const result = await handleExtract(input, router);
476
+ return {
477
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
478
+ isError: !!result.error,
479
+ };
480
+ }
481
+ return {
482
+ content: [{ type: 'text', text: `Unknown tool: ${name}` }],
483
+ isError: true,
484
+ };
485
+ });
486
+ return server;
487
+ }
488
+ export async function startServer() {
489
+ const subs = await initSubsystems();
490
+ const server = createMcpServer(subs);
491
+ const transport = new StdioServerTransport();
492
+ await server.connect(transport);
493
+ log.info('MCP server started');
494
+ subs.bootstrapSearxng().catch((err) => {
495
+ log.warn('SearXNG bootstrap failed', { error: String(err) });
496
+ });
497
+ const shutdown = async () => {
498
+ await subs.shutdown();
399
499
  await server.close();
400
500
  process.exit(0);
401
501
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  import type { CacheInput, CacheOutput } from '../types.js';
2
- export declare function handleCache(input: CacheInput): CacheOutput;
2
+ import type { SmartRouter } from '../fetch/router.js';
3
+ export declare function handleCache(input: CacheInput, router?: SmartRouter): Promise<CacheOutput>;
3
4
  //# sourceMappingURL=cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/tools/cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI3D,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CA+C1D"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/tools/cache.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,wBAAsB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAuG/F"}
@@ -1,8 +1,63 @@
1
1
  import { searchCacheFiltered, getCacheStats, clearCacheEntries } from '../cache/store.js';
2
+ import { detectChange } from '../cache/change-detector.js';
3
+ import { extractContent } from '../extraction/pipeline.js';
2
4
  import { createLogger } from '../logger.js';
3
5
  const log = createLogger('cache');
4
- export function handleCache(input) {
6
+ export async function handleCache(input, router) {
5
7
  try {
8
+ if (input.check_changes) {
9
+ log.info('Checking for content changes', {
10
+ query: input.query,
11
+ urlPattern: input.url_pattern,
12
+ since: input.since,
13
+ });
14
+ const entries = searchCacheFiltered({
15
+ query: input.query,
16
+ urlPattern: input.url_pattern,
17
+ since: input.since,
18
+ });
19
+ const changes = [];
20
+ for (const entry of entries) {
21
+ try {
22
+ if (!router) {
23
+ changes.push({
24
+ url: entry.url,
25
+ changed: false,
26
+ current_hash: entry.contentHash,
27
+ error: 'no router available for re-fetch',
28
+ });
29
+ continue;
30
+ }
31
+ const raw = await router.fetch(entry.url, { renderJs: 'auto' });
32
+ const extraction = await extractContent(raw.html, raw.finalUrl, {
33
+ contentType: raw.contentType,
34
+ });
35
+ const changeResult = detectChange(entry.url, extraction.markdown);
36
+ changes.push({
37
+ url: entry.url,
38
+ changed: changeResult.changed,
39
+ current_hash: entry.contentHash,
40
+ ...(changeResult.changed ? {
41
+ previous_hash: changeResult.previousHash,
42
+ diff_summary: changeResult.diffSummary,
43
+ } : {}),
44
+ });
45
+ }
46
+ catch (err) {
47
+ log.warn('change check failed for URL', {
48
+ url: entry.url,
49
+ error: err instanceof Error ? err.message : String(err),
50
+ });
51
+ changes.push({
52
+ url: entry.url,
53
+ changed: false,
54
+ current_hash: entry.contentHash,
55
+ error: err instanceof Error ? err.message : String(err),
56
+ });
57
+ }
58
+ }
59
+ return { changes };
60
+ }
6
61
  if (input.stats) {
7
62
  log.debug('Cache stats requested');
8
63
  return { stats: getCacheStats() };
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/tools/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAElC,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACvD,OAAO,EAAE,KAAK,EAAE,mEAAmE,EAAE,CAAC;YACxF,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBACjC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,UAAU,EAAE,KAAK,CAAC,WAAW;gBAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,iBAAiB,CAAC;gBAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,UAAU,EAAE,KAAK,CAAC,WAAW;gBAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU,EAAE,KAAK,CAAC,WAAW;YAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,mBAAmB,CAAC;YAClC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU,EAAE,KAAK,CAAC,WAAW;YAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,UAAU,EAAE,CAAC,CAAC,SAAS;aACxB,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtD,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACrE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/tools/cache.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/tools/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAoCtD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC,CAgDtB"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/tools/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAqCtD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC,CA8DtB"}