webpeel 0.12.3 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +330 -261
- package/dist/core/search-provider.d.ts +6 -0
- package/dist/core/search-provider.d.ts.map +1 -1
- package/dist/core/search-provider.js +77 -1
- package/dist/core/search-provider.js.map +1 -1
- package/dist/server/routes/mcp.d.ts.map +1 -1
- package/dist/server/routes/mcp.js +370 -13
- package/dist/server/routes/mcp.js.map +1 -1
- package/dist/server/routes/search.d.ts.map +1 -1
- package/dist/server/routes/search.js +14 -1
- package/dist/server/routes/search.js.map +1 -1
- package/llms.txt +2 -2
- package/package.json +1 -1
|
@@ -40,6 +40,12 @@ export declare class DuckDuckGoProvider implements SearchProvider {
|
|
|
40
40
|
* works when the main HTML endpoint is temporarily blocked on datacenter IPs.
|
|
41
41
|
*/
|
|
42
42
|
private searchLite;
|
|
43
|
+
/**
|
|
44
|
+
* Last-resort fallback: use headless browser to render DDG search results.
|
|
45
|
+
* This bypasses datacenter IP blocking since the browser executes JavaScript
|
|
46
|
+
* and appears as a real user. Slower (~3-5s) but reliable from any IP.
|
|
47
|
+
*/
|
|
48
|
+
private searchRendered;
|
|
43
49
|
searchWeb(query: string, options: WebSearchOptions): Promise<WebSearchResult[]>;
|
|
44
50
|
}
|
|
45
51
|
export declare class BraveSearchProvider implements SearchProvider {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-provider.d.ts","sourceRoot":"","sources":["../../src/core/search-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IAEjC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CACjF;AAwED,qBAAa,kBAAmB,YAAW,cAAc;IACvD,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAgB;IAC7C,QAAQ,CAAC,cAAc,SAAS;IAEhC,OAAO,CAAC,kBAAkB;IA8C1B,OAAO,CAAC,cAAc;YAoBR,UAAU;IAuFxB;;;OAGG;YACW,UAAU;
|
|
1
|
+
{"version":3,"file":"search-provider.d.ts","sourceRoot":"","sources":["../../src/core/search-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IAEjC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CACjF;AAwED,qBAAa,kBAAmB,YAAW,cAAc;IACvD,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAgB;IAC7C,QAAQ,CAAC,cAAc,SAAS;IAEhC,OAAO,CAAC,kBAAkB;IA8C1B,OAAO,CAAC,cAAc;YAoBR,UAAU;IAuFxB;;;OAGG;YACW,UAAU;IAiExB;;;;OAIG;YACW,cAAc;IA8DtB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CA8BtF;AAED,qBAAa,mBAAoB,YAAW,cAAc;IACxD,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAW;IACxC,QAAQ,CAAC,cAAc,QAAQ;IAEzB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CA8DtF;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,GAAG,SAAS,GAAG,cAAc,CAMlF"}
|
|
@@ -271,6 +271,70 @@ export class DuckDuckGoProvider {
|
|
|
271
271
|
});
|
|
272
272
|
return results;
|
|
273
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
* Last-resort fallback: use headless browser to render DDG search results.
|
|
276
|
+
* This bypasses datacenter IP blocking since the browser executes JavaScript
|
|
277
|
+
* and appears as a real user. Slower (~3-5s) but reliable from any IP.
|
|
278
|
+
*/
|
|
279
|
+
async searchRendered(query, options) {
|
|
280
|
+
const { count } = options;
|
|
281
|
+
try {
|
|
282
|
+
// Dynamic import to avoid loading peel in search-only contexts
|
|
283
|
+
const { peel } = await import('../index.js');
|
|
284
|
+
const searchUrl = this.buildSearchUrl(query, options);
|
|
285
|
+
const result = await peel(searchUrl, {
|
|
286
|
+
render: true,
|
|
287
|
+
format: 'html',
|
|
288
|
+
wait: 2000, // DDG needs time to render results
|
|
289
|
+
});
|
|
290
|
+
const html = result.content || '';
|
|
291
|
+
if (!html)
|
|
292
|
+
return [];
|
|
293
|
+
const { load: cheerioLoad } = await import('cheerio');
|
|
294
|
+
const $ = cheerioLoad(html);
|
|
295
|
+
const results = [];
|
|
296
|
+
const seen = new Set();
|
|
297
|
+
// Same parsing as searchOnce — DDG HTML structure
|
|
298
|
+
$('.result').each((_i, elem) => {
|
|
299
|
+
if (results.length >= count)
|
|
300
|
+
return;
|
|
301
|
+
const $result = $(elem);
|
|
302
|
+
const titleRaw = $result.find('.result__title').text() || $result.find('.result__a').text();
|
|
303
|
+
const rawUrl = $result.find('.result__a').attr('href') || '';
|
|
304
|
+
const snippetRaw = $result.find('.result__snippet').text();
|
|
305
|
+
let title = cleanText(titleRaw, { maxLen: 200 });
|
|
306
|
+
let snippet = cleanText(snippetRaw, { maxLen: 500, stripEllipsisPadding: true });
|
|
307
|
+
if (!title || !rawUrl)
|
|
308
|
+
return;
|
|
309
|
+
let url = rawUrl;
|
|
310
|
+
try {
|
|
311
|
+
const ddgUrl = new URL(rawUrl, 'https://duckduckgo.com');
|
|
312
|
+
const uddg = ddgUrl.searchParams.get('uddg');
|
|
313
|
+
if (uddg)
|
|
314
|
+
url = decodeURIComponent(uddg);
|
|
315
|
+
}
|
|
316
|
+
catch { /* use raw */ }
|
|
317
|
+
try {
|
|
318
|
+
const parsed = new URL(url);
|
|
319
|
+
if (!['http:', 'https:'].includes(parsed.protocol))
|
|
320
|
+
return;
|
|
321
|
+
url = parsed.href;
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const dedupeKey = normalizeUrlForDedupe(url);
|
|
327
|
+
if (seen.has(dedupeKey))
|
|
328
|
+
return;
|
|
329
|
+
seen.add(dedupeKey);
|
|
330
|
+
results.push({ title, url, snippet });
|
|
331
|
+
});
|
|
332
|
+
return results;
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
return [];
|
|
336
|
+
}
|
|
337
|
+
}
|
|
274
338
|
async searchWeb(query, options) {
|
|
275
339
|
const attempts = this.buildQueryAttempts(query);
|
|
276
340
|
// Retry only when DDG returns 0 results.
|
|
@@ -286,7 +350,19 @@ export class DuckDuckGoProvider {
|
|
|
286
350
|
return liteResults;
|
|
287
351
|
}
|
|
288
352
|
catch {
|
|
289
|
-
// Lite also failed —
|
|
353
|
+
// Lite also failed — try rendered fallback
|
|
354
|
+
}
|
|
355
|
+
// Last resort: browser-rendered search (works from datacenter IPs)
|
|
356
|
+
// Only use this on the server (has Chromium), not in CLI (too slow for interactive)
|
|
357
|
+
if (typeof process !== 'undefined' && process.env.NODE_ENV === 'production') {
|
|
358
|
+
try {
|
|
359
|
+
const renderedResults = await this.searchRendered(query, options);
|
|
360
|
+
if (renderedResults.length > 0)
|
|
361
|
+
return renderedResults;
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
// Rendered also failed
|
|
365
|
+
}
|
|
290
366
|
}
|
|
291
367
|
return [];
|
|
292
368
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-provider.js","sourceRoot":"","sources":["../../src/core/search-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAgC/B,SAAS,kBAAkB,CAAC,KAAa;IACvC,4EAA4E;IAC5E,wEAAwE;IACxE,OAAO,KAAK;SACT,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;QACxC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;SACD,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;QAChC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,SAAS,CAChB,KAAa,EACb,IAGC;IAED,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAElC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,6DAA6D;QAC7D,CAAC,GAAG,CAAC;aACF,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;aACjC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;aACjC,IAAI,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc;IAC3C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC;QAC7B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjC,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM;aACV,IAAI,EAAE;aACN,WAAW,EAAE;aACb,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;aAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;aACtB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,OAAO,kBAAkB;IACpB,EAAE,GAAqB,YAAY,CAAC;IACpC,cAAc,GAAG,KAAK,CAAC;IAExB,kBAAkB,CAAC,aAAqB;QAC9C,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAElB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,iCAAiC;QACjC,oBAAoB;QACpB,kBAAkB;QAClB,kBAAkB;QAClB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE7B,2EAA2E;QAC3E,2EAA2E;QAC3E,wEAAwE;QACxE,qCAAqC;QACrC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEnE,IAAI,YAAY,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1C,yDAAyD;YACzD,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;YAED,iEAAiE;YACjE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;QAED,sCAAsC;QACtC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,OAAO,QAAQ;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACZ,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,cAAc,CAAC,KAAa,EAAE,OAAyB;QAC7D,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAE3C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAEvB,mDAAmD;QACnD,IAAI,GAAG,EAAE,CAAC;YACR,oDAAoD;YACpD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,CAAC,OAAO,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACzD,IAAI,MAAM;gBAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,qCAAqC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IAClE,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,OAAyB;QAC/D,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAElC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEtD,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE;YAC5C,OAAO,EAAE;gBACP,YAAY,EAAE,uHAAuH;gBACrI,QAAQ,EAAE,kGAAkG;gBAC5G,iBAAiB,EAAE,gBAAgB;gBACnC,iBAAiB,EAAE,mBAAmB;gBACtC,eAAe,EAAE,UAAU;gBAC3B,gBAAgB,EAAE,UAAU;gBAC5B,gBAAgB,EAAE,UAAU;gBAC5B,gBAAgB,EAAE,MAAM;gBACxB,gBAAgB,EAAE,IAAI;gBACtB,2BAA2B,EAAE,GAAG;gBAChC,SAAS,EAAE,yBAAyB;aACrC;YACD,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAErB,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;gBAAE,OAAO;YAEpC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAExB,uEAAuE;YACvE,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5F,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC;YAE3D,IAAI,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACjD,IAAI,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;YAEjF,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;gBAAE,OAAO;YAE9B,8CAA8C;YAC9C,IAAI,GAAG,GAAG,MAAM,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;gBACzD,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7C,IAAI,IAAI;oBAAE,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;YAED,uEAAuE;YACvE,IAAI,CAAC;gBACH,IAAI,MAAW,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACP,gEAAgE;oBAChE,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;gBAClD,CAAC;gBACD,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnD,OAAO;gBACT,CAAC;gBACD,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;YACpB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;YAED,0EAA0E;YAC1E,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,OAAO;YAChC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEpB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,OAAyB;QAC/D,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAElC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAEvB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,qCAAqC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE;YAC3F,OAAO,EAAE;gBACP,YAAY,EAAE,uHAAuH;gBACrI,QAAQ,EAAE,iEAAiE;gBAC3E,iBAAiB,EAAE,gBAAgB;gBACnC,SAAS,EAAE,8BAA8B;aAC1C;YACD,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QAE5B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAErB,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,wEAAwE;QACxE,0CAA0C;QAC1C,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YACnC,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;gBAAE,OAAO;YAEpC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACpD,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAEhC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG;gBAAE,OAAO;YAE3B,uCAAuC;YACvC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,6BAA6B,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7C,IAAI,IAAI;oBAAE,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;YAEzB,eAAe;YACf,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;oBAAE,OAAO;gBAC3D,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;YACpB,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO;YAAC,CAAC;YAEnB,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,OAAO;YAChC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEpB,+DAA+D;YAC/D,MAAM,OAAO,GAAG,SAAS,CACvB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAC1D,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC5C,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,OAAyB;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAEhD,yCAAyC;QACzC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAClD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC;QACzC,CAAC;QAED,8EAA8E;QAC9E,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC1D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,WAAW,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED,MAAM,OAAO,mBAAmB;IACrB,EAAE,GAAqB,OAAO,CAAC;IAC/B,cAAc,GAAG,IAAI,CAAC;IAE/B,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,OAAyB;QACtD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAE1C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gDAAgD,CAAC,CAAC;QACtE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YACjD,OAAO,EAAE;gBACP,QAAQ,EAAE,kBAAkB;gBAC5B,sBAAsB,EAAE,MAAM;aAC/B;YACD,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAC1C,MAAM,YAAY,GAAU,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC;QAE/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAsB,EAAE,CAAC;QAEtC,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;gBAAE,MAAM;YACnC,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,KAAK,QAAQ;gBAChD,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE;gBACtB,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ;oBAC9B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE;oBAClB,CAAC,CAAC,EAAE,CAAC;YAET,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEhC,kCAAkC;YAClC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC/B,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;oBAAE,SAAS;YAC/D,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YAED,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBAC1B,GAAG,EAAE,MAAM;gBACX,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAgC;IAChE,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,YAAY;QAAE,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAChE,IAAI,EAAE,KAAK,OAAO;QAAE,OAAO,IAAI,mBAAmB,EAAE,CAAC;IAErD,4DAA4D;IAC5D,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC"}
|
|
1
|
+
{"version":3,"file":"search-provider.js","sourceRoot":"","sources":["../../src/core/search-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/server/routes/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/server/routes/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAmzBlD,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAqE7D"}
|
|
@@ -18,6 +18,7 @@ import { peel, peelBatch } from '../../index.js';
|
|
|
18
18
|
import { normalizeActions } from '../../core/actions.js';
|
|
19
19
|
import { runAgent } from '../../core/agent.js';
|
|
20
20
|
import { extractInlineJson } from '../../core/extract-inline.js';
|
|
21
|
+
import { answerQuestion } from '../../core/answer.js';
|
|
21
22
|
import { readFileSync } from 'fs';
|
|
22
23
|
import { join, dirname } from 'path';
|
|
23
24
|
import { fileURLToPath } from 'url';
|
|
@@ -30,6 +31,27 @@ try {
|
|
|
30
31
|
}
|
|
31
32
|
catch { /* fallback */ }
|
|
32
33
|
// ---------------------------------------------------------------------------
|
|
34
|
+
// Helper functions for brand extraction
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
function extractColorsFromContent(content) {
|
|
37
|
+
const colors = [];
|
|
38
|
+
const hexRegex = /#[0-9A-Fa-f]{6}|#[0-9A-Fa-f]{3}/g;
|
|
39
|
+
const matches = content.match(hexRegex);
|
|
40
|
+
if (matches) {
|
|
41
|
+
colors.push(...[...new Set(matches)].slice(0, 10));
|
|
42
|
+
}
|
|
43
|
+
return colors;
|
|
44
|
+
}
|
|
45
|
+
function extractFontsFromContent(content) {
|
|
46
|
+
const fonts = [];
|
|
47
|
+
const fontRegex = /font-family:\s*([^;}"'\n]+)/gi;
|
|
48
|
+
let match;
|
|
49
|
+
while ((match = fontRegex.exec(content)) !== null) {
|
|
50
|
+
fonts.push(match[1].trim());
|
|
51
|
+
}
|
|
52
|
+
return [...new Set(fonts)].slice(0, 5);
|
|
53
|
+
}
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
33
55
|
// Tool definitions (subset of the full MCP server tools, used for hosted mode)
|
|
34
56
|
// ---------------------------------------------------------------------------
|
|
35
57
|
function getTools() {
|
|
@@ -155,21 +177,117 @@ function getTools() {
|
|
|
155
177
|
},
|
|
156
178
|
},
|
|
157
179
|
{
|
|
158
|
-
name: '
|
|
159
|
-
description: '
|
|
160
|
-
annotations: { title: '
|
|
180
|
+
name: 'webpeel_research',
|
|
181
|
+
description: 'Conduct autonomous multi-step web research on a topic. Searches the web, fetches top sources, extracts relevant content, and synthesizes a comprehensive report with citations. Returns a markdown report and structured source list. Requires LLM API key for synthesis; without one it returns raw extracted source content.',
|
|
182
|
+
annotations: { title: 'Deep Research Agent', readOnlyHint: true, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
183
|
+
inputSchema: {
|
|
184
|
+
type: 'object',
|
|
185
|
+
properties: {
|
|
186
|
+
query: { type: 'string', description: 'Research question or topic to investigate' },
|
|
187
|
+
maxSources: { type: 'number', description: 'Maximum number of sources to consult (default: 5)', default: 5, minimum: 1, maximum: 20 },
|
|
188
|
+
maxDepth: { type: 'number', description: 'Link-following depth: 1 = search results only, 2+ = follow links within top sources (default: 1)', default: 1, minimum: 1, maximum: 3 },
|
|
189
|
+
llmApiKey: { type: 'string', description: 'LLM API key for synthesis (falls back to OPENAI_API_KEY env var)' },
|
|
190
|
+
llmModel: { type: 'string', description: 'LLM model to use for synthesis (default: gpt-4o-mini)' },
|
|
191
|
+
llmBaseUrl: { type: 'string', description: 'LLM API base URL (default: https://api.openai.com/v1)' },
|
|
192
|
+
outputFormat: { type: 'string', enum: ['report', 'sources'], description: 'Output format: "report" = synthesized markdown report (needs LLM key), "sources" = raw extracted source content', default: 'report' },
|
|
193
|
+
timeout: { type: 'number', description: 'Maximum research time in milliseconds (default: 60000)', default: 60000 },
|
|
194
|
+
},
|
|
195
|
+
required: ['query'],
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: 'webpeel_screenshot',
|
|
200
|
+
description: 'Take a screenshot of a URL and return a base64-encoded image. Supports full page or viewport capture, custom dimensions, PNG/JPEG format, and page actions before capture.',
|
|
201
|
+
annotations: { title: 'Take Screenshot', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
202
|
+
inputSchema: {
|
|
203
|
+
type: 'object',
|
|
204
|
+
properties: {
|
|
205
|
+
url: { type: 'string', description: 'The URL to screenshot' },
|
|
206
|
+
fullPage: { type: 'boolean', description: 'Capture the full scrollable page (default: viewport only)', default: false },
|
|
207
|
+
width: { type: 'number', description: 'Viewport width in pixels (default: 1280)', default: 1280, minimum: 100, maximum: 5000 },
|
|
208
|
+
height: { type: 'number', description: 'Viewport height in pixels (default: 720)', default: 720, minimum: 100, maximum: 5000 },
|
|
209
|
+
format: { type: 'string', enum: ['png', 'jpeg'], description: 'Image format (default: png)', default: 'png' },
|
|
210
|
+
quality: { type: 'number', description: 'JPEG quality 1-100 (ignored for PNG)', minimum: 1, maximum: 100 },
|
|
211
|
+
waitFor: { type: 'number', description: 'Milliseconds to wait after page load before screenshot', default: 0 },
|
|
212
|
+
stealth: { type: 'boolean', description: 'Use stealth mode to bypass bot detection', default: false },
|
|
213
|
+
actions: { type: 'array', items: { type: 'object' }, description: 'Page actions to execute before screenshot' },
|
|
214
|
+
},
|
|
215
|
+
required: ['url'],
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
name: 'webpeel_summarize',
|
|
220
|
+
description: 'Generate an AI-powered summary of a webpage using an LLM. Requires an OpenAI-compatible API key.',
|
|
221
|
+
annotations: { title: 'Summarize Page', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
222
|
+
inputSchema: {
|
|
223
|
+
type: 'object',
|
|
224
|
+
properties: {
|
|
225
|
+
url: { type: 'string', description: 'URL to summarize' },
|
|
226
|
+
llmApiKey: { type: 'string', description: 'API key for LLM (OpenAI-compatible)' },
|
|
227
|
+
prompt: { type: 'string', description: 'Custom summary prompt (default: "Summarize this webpage in 2-3 sentences.")', default: 'Summarize this webpage in 2-3 sentences.' },
|
|
228
|
+
llmModel: { type: 'string', description: 'LLM model to use (default: gpt-4o-mini)', default: 'gpt-4o-mini' },
|
|
229
|
+
llmBaseUrl: { type: 'string', description: 'LLM API base URL (default: https://api.openai.com/v1)', default: 'https://api.openai.com/v1' },
|
|
230
|
+
render: { type: 'boolean', description: 'Use browser rendering', default: false },
|
|
231
|
+
},
|
|
232
|
+
required: ['url', 'llmApiKey'],
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
name: 'webpeel_answer',
|
|
237
|
+
description: 'Ask a question, search the web, fetch top results, and generate a cited answer using an LLM (BYOK). Returns an answer with [1], [2] source citations. Supports OpenAI, Anthropic, and Google LLMs.',
|
|
238
|
+
annotations: { title: 'Answer a Question', readOnlyHint: true, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
239
|
+
inputSchema: {
|
|
240
|
+
type: 'object',
|
|
241
|
+
properties: {
|
|
242
|
+
question: { type: 'string', description: 'The question to answer' },
|
|
243
|
+
searchProvider: { type: 'string', enum: ['duckduckgo', 'brave'], description: 'Search provider (default: duckduckgo)', default: 'duckduckgo' },
|
|
244
|
+
searchApiKey: { type: 'string', description: 'API key for Brave Search (required when searchProvider is "brave")' },
|
|
245
|
+
llmProvider: { type: 'string', enum: ['openai', 'anthropic', 'google'], description: 'LLM provider to use for answer generation' },
|
|
246
|
+
llmApiKey: { type: 'string', description: 'API key for the LLM provider (BYOK)' },
|
|
247
|
+
llmModel: { type: 'string', description: 'LLM model name (optional, uses provider default)' },
|
|
248
|
+
maxSources: { type: 'number', description: 'Maximum number of sources to fetch (1-10, default 5)', default: 5, minimum: 1, maximum: 10 },
|
|
249
|
+
},
|
|
250
|
+
required: ['question', 'llmProvider', 'llmApiKey'],
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
name: 'webpeel_brand',
|
|
255
|
+
description: 'Extract branding and design system from a URL. Returns colors, fonts, typography, and visual identity elements.',
|
|
256
|
+
annotations: { title: 'Extract Branding', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
161
257
|
inputSchema: {
|
|
162
258
|
type: 'object',
|
|
163
259
|
properties: {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
llmModel: { type: 'string', description: 'LLM model (default: gpt-4o-mini)' },
|
|
167
|
-
depth: { type: 'string', enum: ['basic', 'thorough'], default: 'basic' },
|
|
168
|
-
topic: { type: 'string', enum: ['general', 'news', 'technical', 'academic'], default: 'general' },
|
|
169
|
-
maxSources: { type: 'number', description: 'Max sources (1-20)', default: 5 },
|
|
170
|
-
outputSchema: { type: 'object', description: 'JSON Schema for structured output' },
|
|
260
|
+
url: { type: 'string', description: 'URL to extract branding from' },
|
|
261
|
+
render: { type: 'boolean', description: 'Use browser rendering', default: false },
|
|
171
262
|
},
|
|
172
|
-
required: ['
|
|
263
|
+
required: ['url'],
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
name: 'webpeel_change_track',
|
|
268
|
+
description: 'Track changes on a URL by generating a content fingerprint. Use this to detect when a page has been updated.',
|
|
269
|
+
annotations: { title: 'Track Page Changes', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
270
|
+
inputSchema: {
|
|
271
|
+
type: 'object',
|
|
272
|
+
properties: {
|
|
273
|
+
url: { type: 'string', description: 'URL to track for changes' },
|
|
274
|
+
render: { type: 'boolean', description: 'Use browser rendering', default: false },
|
|
275
|
+
},
|
|
276
|
+
required: ['url'],
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: 'webpeel_deep_fetch',
|
|
281
|
+
description: 'Search for a query and fetch the top N results in parallel, merging all content into one combined document with source attribution. No LLM API key required — pure web fetching + merging. Ideal for AI agents that need comprehensive research content on a topic.',
|
|
282
|
+
annotations: { title: 'Deep Fetch Research', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
283
|
+
inputSchema: {
|
|
284
|
+
type: 'object',
|
|
285
|
+
properties: {
|
|
286
|
+
query: { type: 'string', description: 'Search query to research' },
|
|
287
|
+
count: { type: 'number', description: 'Number of top results to fetch (default: 5, max: 10)', default: 5, minimum: 1, maximum: 10 },
|
|
288
|
+
format: { type: 'string', enum: ['markdown', 'text'], description: 'Content format for fetched pages (default: markdown)', default: 'markdown' },
|
|
289
|
+
},
|
|
290
|
+
required: ['query'],
|
|
173
291
|
},
|
|
174
292
|
},
|
|
175
293
|
];
|
|
@@ -240,10 +358,19 @@ async function handleToolCall(name, args) {
|
|
|
240
358
|
const { getSearchProvider } = await import('../../core/search-provider.js');
|
|
241
359
|
const provider = getSearchProvider('duckduckgo');
|
|
242
360
|
const count = Math.min(Math.max(args.count || 5, 1), 10);
|
|
243
|
-
|
|
361
|
+
let results = await Promise.race([
|
|
244
362
|
provider.searchWeb(query, { count }),
|
|
245
363
|
timeout(30000, 'Search timed out'),
|
|
246
364
|
]);
|
|
365
|
+
// Fallback: if DDG returned 0 results (datacenter IP blocked) and Brave key exists
|
|
366
|
+
const braveKey = process.env.BRAVE_SEARCH_KEY || process.env.BRAVE_API_KEY;
|
|
367
|
+
if (results.length === 0 && braveKey) {
|
|
368
|
+
const braveProvider = getSearchProvider('brave');
|
|
369
|
+
results = await Promise.race([
|
|
370
|
+
braveProvider.searchWeb(query, { count, apiKey: braveKey }),
|
|
371
|
+
timeout(15000, 'Brave search timed out'),
|
|
372
|
+
]);
|
|
373
|
+
}
|
|
247
374
|
return ok(safeStringify(results));
|
|
248
375
|
}
|
|
249
376
|
// webpeel_crawl
|
|
@@ -310,7 +437,27 @@ async function handleToolCall(name, args) {
|
|
|
310
437
|
]);
|
|
311
438
|
return ok(safeStringify(results));
|
|
312
439
|
}
|
|
313
|
-
// webpeel_agent
|
|
440
|
+
// webpeel_research (and legacy alias webpeel_agent)
|
|
441
|
+
if (name === 'webpeel_research') {
|
|
442
|
+
const query = args.query;
|
|
443
|
+
if (!query || typeof query !== 'string')
|
|
444
|
+
throw new Error('Invalid query');
|
|
445
|
+
const { research } = await import('../../core/research.js');
|
|
446
|
+
const result = await Promise.race([
|
|
447
|
+
research({
|
|
448
|
+
query,
|
|
449
|
+
maxSources: args.maxSources ?? 5,
|
|
450
|
+
maxDepth: args.maxDepth ?? 1,
|
|
451
|
+
apiKey: args.llmApiKey,
|
|
452
|
+
model: args.llmModel,
|
|
453
|
+
baseUrl: args.llmBaseUrl,
|
|
454
|
+
outputFormat: args.outputFormat ?? 'report',
|
|
455
|
+
timeout: args.timeout ?? 60000,
|
|
456
|
+
}),
|
|
457
|
+
timeout(180000, 'Research timed out'),
|
|
458
|
+
]);
|
|
459
|
+
return ok(safeStringify(result));
|
|
460
|
+
}
|
|
314
461
|
if (name === 'webpeel_agent') {
|
|
315
462
|
const prompt = args.prompt;
|
|
316
463
|
const llmApiKey = args.llmApiKey;
|
|
@@ -332,6 +479,216 @@ async function handleToolCall(name, args) {
|
|
|
332
479
|
]);
|
|
333
480
|
return ok(safeStringify(result));
|
|
334
481
|
}
|
|
482
|
+
// webpeel_screenshot
|
|
483
|
+
if (name === 'webpeel_screenshot') {
|
|
484
|
+
const url = args.url;
|
|
485
|
+
if (!url || typeof url !== 'string')
|
|
486
|
+
throw new Error('Invalid URL');
|
|
487
|
+
if (url.length > 2048)
|
|
488
|
+
throw new Error('URL too long');
|
|
489
|
+
const width = args.width;
|
|
490
|
+
const height = args.height;
|
|
491
|
+
const format = args.format || 'png';
|
|
492
|
+
const quality = args.quality;
|
|
493
|
+
const waitFor = args.waitFor || 0;
|
|
494
|
+
const stealth = args.stealth || false;
|
|
495
|
+
const fullPage = args.fullPage || false;
|
|
496
|
+
if (width !== undefined && (width < 100 || width > 5000))
|
|
497
|
+
throw new Error('Invalid width: must be 100–5000');
|
|
498
|
+
if (height !== undefined && (height < 100 || height > 5000))
|
|
499
|
+
throw new Error('Invalid height: must be 100–5000');
|
|
500
|
+
if (!['png', 'jpeg'].includes(format))
|
|
501
|
+
throw new Error('Invalid format');
|
|
502
|
+
if (quality !== undefined && (quality < 1 || quality > 100))
|
|
503
|
+
throw new Error('Invalid quality: must be 1–100');
|
|
504
|
+
if (waitFor < 0 || waitFor > 60000)
|
|
505
|
+
throw new Error('Invalid waitFor: must be 0–60000');
|
|
506
|
+
const { takeScreenshot } = await import('../../core/screenshot.js');
|
|
507
|
+
const result = await Promise.race([
|
|
508
|
+
takeScreenshot(url, {
|
|
509
|
+
fullPage,
|
|
510
|
+
width,
|
|
511
|
+
height,
|
|
512
|
+
format,
|
|
513
|
+
quality,
|
|
514
|
+
waitFor,
|
|
515
|
+
stealth,
|
|
516
|
+
actions: args.actions,
|
|
517
|
+
}),
|
|
518
|
+
timeout(60000, 'Screenshot timed out'),
|
|
519
|
+
]);
|
|
520
|
+
return ok(safeStringify({
|
|
521
|
+
url: result.url,
|
|
522
|
+
format: result.format,
|
|
523
|
+
contentType: result.contentType,
|
|
524
|
+
screenshot: result.screenshot,
|
|
525
|
+
}));
|
|
526
|
+
}
|
|
527
|
+
// webpeel_summarize
|
|
528
|
+
if (name === 'webpeel_summarize') {
|
|
529
|
+
const url = args.url;
|
|
530
|
+
const llmApiKey = args.llmApiKey;
|
|
531
|
+
if (!url || typeof url !== 'string')
|
|
532
|
+
throw new Error('Invalid URL');
|
|
533
|
+
if (url.length > 2048)
|
|
534
|
+
throw new Error('URL too long');
|
|
535
|
+
if (!llmApiKey || typeof llmApiKey !== 'string')
|
|
536
|
+
throw new Error('Invalid llmApiKey');
|
|
537
|
+
const options = {
|
|
538
|
+
render: args.render || false,
|
|
539
|
+
extract: {
|
|
540
|
+
prompt: args.prompt || 'Summarize this webpage in 2-3 sentences.',
|
|
541
|
+
llmApiKey,
|
|
542
|
+
llmModel: args.llmModel || 'gpt-4o-mini',
|
|
543
|
+
llmBaseUrl: args.llmBaseUrl || 'https://api.openai.com/v1',
|
|
544
|
+
},
|
|
545
|
+
};
|
|
546
|
+
const result = await Promise.race([
|
|
547
|
+
peel(url, options),
|
|
548
|
+
timeout(60000, 'Summarize timed out'),
|
|
549
|
+
]);
|
|
550
|
+
return ok(safeStringify({
|
|
551
|
+
url: result.url,
|
|
552
|
+
title: result.title,
|
|
553
|
+
summary: result.extracted,
|
|
554
|
+
}));
|
|
555
|
+
}
|
|
556
|
+
// webpeel_answer
|
|
557
|
+
if (name === 'webpeel_answer') {
|
|
558
|
+
const question = args.question;
|
|
559
|
+
const llmProvider = args.llmProvider;
|
|
560
|
+
const llmApiKey = args.llmApiKey;
|
|
561
|
+
if (!question || typeof question !== 'string')
|
|
562
|
+
throw new Error('Invalid question');
|
|
563
|
+
if (question.length > 2000)
|
|
564
|
+
throw new Error('Question too long (max 2000 characters)');
|
|
565
|
+
const validLlmProviders = ['openai', 'anthropic', 'google'];
|
|
566
|
+
if (!llmProvider || !validLlmProviders.includes(llmProvider)) {
|
|
567
|
+
throw new Error('Invalid llmProvider: must be openai, anthropic, or google');
|
|
568
|
+
}
|
|
569
|
+
if (!llmApiKey || typeof llmApiKey !== 'string')
|
|
570
|
+
throw new Error('Invalid llmApiKey');
|
|
571
|
+
const spId = args.searchProvider === 'brave' ? 'brave' : 'duckduckgo';
|
|
572
|
+
const maxSources = typeof args.maxSources === 'number' ? Math.min(Math.max(args.maxSources, 1), 10) : 5;
|
|
573
|
+
const result = await Promise.race([
|
|
574
|
+
answerQuestion({
|
|
575
|
+
question,
|
|
576
|
+
searchProvider: spId,
|
|
577
|
+
searchApiKey: args.searchApiKey,
|
|
578
|
+
llmProvider: llmProvider,
|
|
579
|
+
llmApiKey,
|
|
580
|
+
llmModel: args.llmModel,
|
|
581
|
+
maxSources,
|
|
582
|
+
stream: false,
|
|
583
|
+
}),
|
|
584
|
+
timeout(180000, 'Answer timed out'),
|
|
585
|
+
]);
|
|
586
|
+
return ok(safeStringify(result));
|
|
587
|
+
}
|
|
588
|
+
// webpeel_brand
|
|
589
|
+
if (name === 'webpeel_brand') {
|
|
590
|
+
const url = args.url;
|
|
591
|
+
if (!url || typeof url !== 'string')
|
|
592
|
+
throw new Error('Invalid URL');
|
|
593
|
+
if (url.length > 2048)
|
|
594
|
+
throw new Error('URL too long');
|
|
595
|
+
const options = {
|
|
596
|
+
render: args.render || false,
|
|
597
|
+
extract: {
|
|
598
|
+
selectors: {
|
|
599
|
+
primaryColor: 'meta[name="theme-color"]',
|
|
600
|
+
title: 'title',
|
|
601
|
+
logo: 'img[class*="logo"], img[alt*="logo"]',
|
|
602
|
+
},
|
|
603
|
+
},
|
|
604
|
+
};
|
|
605
|
+
const result = await Promise.race([
|
|
606
|
+
peel(url, options),
|
|
607
|
+
timeout(60000, 'Brand extraction timed out'),
|
|
608
|
+
]);
|
|
609
|
+
return ok(safeStringify({
|
|
610
|
+
url: result.url,
|
|
611
|
+
title: result.title,
|
|
612
|
+
extracted: result.extracted,
|
|
613
|
+
metadata: result.metadata,
|
|
614
|
+
colors: extractColorsFromContent(result.content || ''),
|
|
615
|
+
fonts: extractFontsFromContent(result.content || ''),
|
|
616
|
+
}));
|
|
617
|
+
}
|
|
618
|
+
// webpeel_change_track
|
|
619
|
+
if (name === 'webpeel_change_track') {
|
|
620
|
+
const url = args.url;
|
|
621
|
+
if (!url || typeof url !== 'string')
|
|
622
|
+
throw new Error('Invalid URL');
|
|
623
|
+
if (url.length > 2048)
|
|
624
|
+
throw new Error('URL too long');
|
|
625
|
+
const options = {
|
|
626
|
+
render: args.render || false,
|
|
627
|
+
};
|
|
628
|
+
const result = await Promise.race([
|
|
629
|
+
peel(url, options),
|
|
630
|
+
timeout(60000, 'Change tracking timed out'),
|
|
631
|
+
]);
|
|
632
|
+
return ok(safeStringify({
|
|
633
|
+
url: result.url,
|
|
634
|
+
title: result.title,
|
|
635
|
+
fingerprint: result.fingerprint,
|
|
636
|
+
tokens: result.tokens,
|
|
637
|
+
contentType: result.contentType,
|
|
638
|
+
lastChecked: new Date().toISOString(),
|
|
639
|
+
}));
|
|
640
|
+
}
|
|
641
|
+
// webpeel_deep_fetch
|
|
642
|
+
if (name === 'webpeel_deep_fetch') {
|
|
643
|
+
const query = args.query;
|
|
644
|
+
if (!query || typeof query !== 'string')
|
|
645
|
+
throw new Error('Invalid query');
|
|
646
|
+
const count = Math.min(Math.max(args.count || 5, 1), 10);
|
|
647
|
+
const format = args.format || 'markdown';
|
|
648
|
+
// Step 1: Search for the query
|
|
649
|
+
const { getSearchProvider } = await import('../../core/search-provider.js');
|
|
650
|
+
const provider = getSearchProvider('duckduckgo');
|
|
651
|
+
const searchResults = await Promise.race([
|
|
652
|
+
provider.searchWeb(query, { count }),
|
|
653
|
+
timeout(30000, 'Search timed out'),
|
|
654
|
+
]);
|
|
655
|
+
const results = searchResults?.results ?? searchResults ?? [];
|
|
656
|
+
const topResults = Array.isArray(results) ? results.slice(0, count) : [];
|
|
657
|
+
if (topResults.length === 0) {
|
|
658
|
+
return ok(safeStringify({ query, sources: [], content: '', totalTokens: 0 }));
|
|
659
|
+
}
|
|
660
|
+
// Step 2: Fetch all URLs in parallel
|
|
661
|
+
const urls = topResults.map((r) => r.url).filter(Boolean);
|
|
662
|
+
const pages = await Promise.race([
|
|
663
|
+
peelBatch(urls, { concurrency: 5, format }),
|
|
664
|
+
timeout(120000, 'Batch fetch timed out'),
|
|
665
|
+
]);
|
|
666
|
+
// Step 3: Merge content with source attribution
|
|
667
|
+
const sources = [];
|
|
668
|
+
const contentParts = [];
|
|
669
|
+
let totalTokens = 0;
|
|
670
|
+
for (let i = 0; i < pages.length; i++) {
|
|
671
|
+
const page = pages[i];
|
|
672
|
+
const searchResult = topResults[i];
|
|
673
|
+
const url = urls[i];
|
|
674
|
+
const title = page?.title || searchResult?.title || url;
|
|
675
|
+
sources.push({ url, title });
|
|
676
|
+
if (page?.content) {
|
|
677
|
+
contentParts.push(`## Source ${i + 1}: ${title}\n**URL:** ${url}\n\n${page.content}\n\n---\n`);
|
|
678
|
+
totalTokens += page.tokens || 0;
|
|
679
|
+
}
|
|
680
|
+
else if (page?.error) {
|
|
681
|
+
contentParts.push(`## Source ${i + 1}: ${title}\n**URL:** ${url}\n\n*(Failed to fetch: ${page.error})*\n\n---\n`);
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
const mergedContent = contentParts.join('\n');
|
|
685
|
+
return ok(safeStringify({
|
|
686
|
+
query,
|
|
687
|
+
sources,
|
|
688
|
+
content: mergedContent,
|
|
689
|
+
totalTokens,
|
|
690
|
+
}));
|
|
691
|
+
}
|
|
335
692
|
throw new Error(`Unknown tool: ${name}`);
|
|
336
693
|
}
|
|
337
694
|
catch (error) {
|