dsh-web-search-pro 0.1.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 (48) hide show
  1. package/LICENSE +21 -0
  2. package/LOGIN.md +67 -0
  3. package/README.md +123 -0
  4. package/cordis.patch.yml +21 -0
  5. package/lib/browser-service.d.ts +68 -0
  6. package/lib/browser-service.js +8 -0
  7. package/lib/browser-service.js.map +1 -0
  8. package/lib/config.d.ts +91 -0
  9. package/lib/config.js +72 -0
  10. package/lib/config.js.map +1 -0
  11. package/lib/deps.d.ts +34 -0
  12. package/lib/deps.js +90 -0
  13. package/lib/deps.js.map +1 -0
  14. package/lib/engines.d.ts +71 -0
  15. package/lib/engines.js +562 -0
  16. package/lib/engines.js.map +1 -0
  17. package/lib/extract.d.ts +40 -0
  18. package/lib/extract.js +243 -0
  19. package/lib/extract.js.map +1 -0
  20. package/lib/fetch.d.ts +42 -0
  21. package/lib/fetch.js +175 -0
  22. package/lib/fetch.js.map +1 -0
  23. package/lib/index.d.ts +23 -0
  24. package/lib/index.js +117 -0
  25. package/lib/index.js.map +1 -0
  26. package/lib/memory-cache.d.ts +18 -0
  27. package/lib/memory-cache.js +42 -0
  28. package/lib/memory-cache.js.map +1 -0
  29. package/lib/platform-search.d.ts +34 -0
  30. package/lib/platform-search.js +61 -0
  31. package/lib/platform-search.js.map +1 -0
  32. package/lib/playwright.d.ts +71 -0
  33. package/lib/playwright.js +165 -0
  34. package/lib/playwright.js.map +1 -0
  35. package/lib/router.d.ts +66 -0
  36. package/lib/router.js +332 -0
  37. package/lib/router.js.map +1 -0
  38. package/lib/store.d.ts +117 -0
  39. package/lib/store.js +223 -0
  40. package/lib/store.js.map +1 -0
  41. package/lib/tools.d.ts +28 -0
  42. package/lib/tools.js +542 -0
  43. package/lib/tools.js.map +1 -0
  44. package/lib/util.d.ts +73 -0
  45. package/lib/util.js +220 -0
  46. package/lib/util.js.map +1 -0
  47. package/package.json +59 -0
  48. package/scripts/save-login.mjs +77 -0
package/lib/tools.js ADDED
@@ -0,0 +1,542 @@
1
+ /**
2
+ * Tool definitions for web-search-pro: 8 model-facing tools over the router,
3
+ * fetch service, store, and playwright manager.
4
+ * @module web-search-pro/tools
5
+ */
6
+ import { defineTool } from '@deepseek-ai/dsh-tools';
7
+ import { mergedRules } from "./fetch.js";
8
+ import { SEARCH_ENGINE_IDS, PLATFORM_IDS } from "./engines.js";
9
+ import { detectDeps, installDep } from "./deps.js";
10
+ function sourceLine(s) {
11
+ const label = s.title && s.title.length ? s.title : safeHost(s.url);
12
+ const meta = [];
13
+ if (s.snippet)
14
+ meta.push(s.snippet);
15
+ if (s.publishedAt)
16
+ meta.push('(' + s.publishedAt + ')');
17
+ const suffix = meta.length ? ' — ' + meta.join(' ') : '';
18
+ return '- [' + label + '](' + s.url + ')' + suffix;
19
+ }
20
+ function safeHost(url) {
21
+ try {
22
+ return new URL(url).hostname;
23
+ }
24
+ catch {
25
+ return url;
26
+ }
27
+ }
28
+ export function formatSources(sources) {
29
+ if (!sources.length)
30
+ return 'No results found.';
31
+ return sources.map(sourceLine).join('\n');
32
+ }
33
+ export function registerTools(deps) {
34
+ const { ctx, config, dynamic, store, router, fetch: fetchSvc, browser } = deps;
35
+ ctx.tools.register(defineTool({
36
+ name: 'web_search_pro',
37
+ description: 'Enhanced persistent web search: multi-engine routing (DeepSeek/Exa/DuckDuckGo/Bing/Jina), automatic engine fallback, TTL-cached results stored in SQLite, and a query history. Use for current information, then web_fetch_pro for full page content.',
38
+ parameters: {
39
+ query: { type: 'string', required: true, description: 'The search query.' },
40
+ engines: { type: 'string', description: 'Comma-separated engine ids to try, in order. Options: ' + SEARCH_ENGINE_IDS.join(', ') + '. Defaults to the configured engine list.' },
41
+ count: { type: 'number', description: 'Max results (1-20). Defaults to ' + String(config.searchMaxResults) + '.' },
42
+ fresh: { type: 'boolean', description: 'Bypass the TTL cache and force a live search.' },
43
+ multi: { type: 'boolean', description: 'Query all requested engines in parallel and merge results (slower, broader).' },
44
+ },
45
+ output: {
46
+ schema: {
47
+ type: 'object',
48
+ additionalProperties: false,
49
+ properties: {
50
+ content: { type: 'string' },
51
+ sources: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: { url: { type: 'string', required: true }, title: { type: 'string' }, snippet: { type: 'string' }, publishedAt: { type: 'string' } } } },
52
+ engine: { type: 'string', required: true },
53
+ enginesTried: { type: 'array', required: true, items: { type: 'string' } },
54
+ fromCache: { type: 'boolean', required: true },
55
+ },
56
+ },
57
+ render: (_args, value) => {
58
+ const v = value;
59
+ const parts = [];
60
+ if (v.content)
61
+ parts.push(v.content);
62
+ parts.push(formatSources(v.sources));
63
+ parts.push('Engine: ' + v.engine + (v.fromCache ? ' (cached)' : '') + (v.enginesTried.length > 1 ? '; tried: ' + v.enginesTried.join(', ') : ''));
64
+ parts.push('Cite the relevant URLs above as markdown links in your answer.');
65
+ return [{ type: 'text', text: parts.join('\n\n') }];
66
+ },
67
+ },
68
+ timeoutMs: config.timeoutMs,
69
+ isConcurrencySafe: () => true,
70
+ presentCall: (args) => ({ card: 'generic', kind: 'search', title: args.query, rawInput: args.query }),
71
+ async execute(args, exec) {
72
+ const engines = args.engines ? args.engines.split(',').map(s => s.trim()).filter(Boolean) : undefined;
73
+ for (const id of engines ?? []) {
74
+ if (!SEARCH_ENGINE_IDS.includes(id))
75
+ throw new Error('unknown engine: ' + id);
76
+ }
77
+ const result = await router.search({
78
+ query: args.query,
79
+ ...engines ? { engines } : {},
80
+ count: args.count ?? dynamic().searchMaxResults,
81
+ fresh: args.fresh ?? false,
82
+ multi: args.multi ?? dynamic().parallelEngines,
83
+ signal: exec.signal,
84
+ });
85
+ return {
86
+ ...result.content ? { content: result.content } : {},
87
+ sources: result.sources,
88
+ engine: result.engine,
89
+ enginesTried: result.enginesTried,
90
+ fromCache: result.fromCache,
91
+ };
92
+ },
93
+ }));
94
+ ctx.tools.register(defineTool({
95
+ name: 'web_fetch_pro',
96
+ description: 'Enhanced persistent page fetch: Jina Reader → direct HTTP with per-site extraction rules (userscript-style, e.g. zhihu/bilibili/github) → Playwright rendering fallback. Snapshots are stored in SQLite and reused within the TTL.',
97
+ parameters: {
98
+ url: { type: 'string', required: true, description: 'The HTTP(S) URL to fetch.' },
99
+ mode: { type: 'string', description: 'Backend: auto (default), jina, http, or playwright.' },
100
+ maxChars: { type: 'number', description: 'Output cap in characters (1000-500000).' },
101
+ fresh: { type: 'boolean', description: 'Bypass the cached snapshot.' },
102
+ persist: { type: 'boolean', description: 'Save the snapshot to the persistent store (default true).' },
103
+ },
104
+ output: {
105
+ schema: {
106
+ type: 'object',
107
+ additionalProperties: false,
108
+ properties: {
109
+ url: { type: 'string', required: true },
110
+ title: { type: 'string' },
111
+ text: { type: 'string', required: true },
112
+ source: { type: 'string', required: true },
113
+ fromCache: { type: 'boolean', required: true },
114
+ statusCode: { type: 'number' },
115
+ },
116
+ },
117
+ render: (_args, value) => {
118
+ const v = value;
119
+ const parts = [];
120
+ if (v.title)
121
+ parts.push('Title: ' + v.title);
122
+ parts.push(v.text);
123
+ parts.push('— Source: ' + v.source + (v.fromCache ? ' (cached snapshot)' : '') + ' · ' + v.url);
124
+ return [{ type: 'text', text: parts.join('\n\n') }];
125
+ },
126
+ },
127
+ timeoutMs: config.timeoutMs + 30_000,
128
+ async execute(args, exec) {
129
+ const mode = (args.mode ?? 'auto');
130
+ if (!['auto', 'jina', 'http', 'playwright'].includes(mode))
131
+ throw new Error('mode must be auto, jina, http, or playwright');
132
+ return fetchSvc.fetchPage(args.url, {
133
+ mode,
134
+ signal: exec.signal,
135
+ maxChars: args.maxChars ?? 100_000,
136
+ fresh: args.fresh ?? false,
137
+ persist: args.persist ?? true,
138
+ });
139
+ },
140
+ }));
141
+ ctx.tools.register(defineTool({
142
+ name: 'web_platform_search',
143
+ description: 'Search a specific platform: ' + PLATFORM_IDS.join(', ') + '. Chinese communities (zhihu/weibo/douban/tieba/douyin/kuaishou) drive the logged-in browser search page via Playwright — they need the user to log in once (run scripts/save-login.mjs, or set the dsh-browser storageStatePath), and selectors are tunable via settings.yaml platformRules. Results are persisted to the search history.',
144
+ parameters: {
145
+ platform: { type: 'string', required: true, description: 'Platform: ' + PLATFORM_IDS.join(', ') + '.' },
146
+ query: { type: 'string', required: true, description: 'The search query (feed URL for rss).' },
147
+ url: { type: 'string', description: 'Feed URL when platform is rss.' },
148
+ count: { type: 'number', description: 'Max results (1-20).' },
149
+ },
150
+ output: {
151
+ schema: {
152
+ type: 'object',
153
+ additionalProperties: false,
154
+ properties: {
155
+ platform: { type: 'string', required: true },
156
+ sources: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: { url: { type: 'string', required: true }, title: { type: 'string' }, snippet: { type: 'string' }, publishedAt: { type: 'string' } } } },
157
+ engine: { type: 'string', required: true },
158
+ fromCache: { type: 'boolean', required: true },
159
+ },
160
+ },
161
+ render: (_args, value) => {
162
+ const v = value;
163
+ return [{ type: 'text', text: 'Platform: ' + v.platform + ' (via ' + v.engine + (v.fromCache ? ', cached' : '') + ')\n\n' + formatSources(v.sources) }];
164
+ },
165
+ },
166
+ timeoutMs: config.timeoutMs + 30_000,
167
+ isConcurrencySafe: () => true,
168
+ async execute(args, exec) {
169
+ if (!PLATFORM_IDS.includes(args.platform))
170
+ throw new Error('unsupported platform: ' + args.platform);
171
+ const result = await router.platformSearch(args.platform, args.query, args.url, args.count ?? 8, { signal: exec.signal });
172
+ return { platform: args.platform, sources: result.sources, engine: result.engine, fromCache: result.fromCache };
173
+ },
174
+ }));
175
+ ctx.tools.register(defineTool({
176
+ name: 'web_snapshot',
177
+ description: 'Render a page in a headless browser (Playwright, optional persisted login state), extract readable text with per-site rules, and save a full-page screenshot + HTML to disk. Returns file paths. Use for JS-heavy pages or when you need a visual capture.',
178
+ parameters: {
179
+ url: { type: 'string', required: true, description: 'The HTTP(S) URL to snapshot.' },
180
+ screenshot: { type: 'boolean', description: 'Save a full-page PNG screenshot (default true).' },
181
+ },
182
+ output: {
183
+ schema: {
184
+ type: 'object',
185
+ additionalProperties: false,
186
+ properties: {
187
+ url: { type: 'string', required: true },
188
+ title: { type: 'string' },
189
+ text: { type: 'string', required: true },
190
+ screenshotPath: { type: 'string' },
191
+ htmlPath: { type: 'string' },
192
+ },
193
+ },
194
+ render: (_args, value) => {
195
+ const v = value;
196
+ const parts = [];
197
+ if (v.title)
198
+ parts.push('Title: ' + v.title);
199
+ parts.push(v.text);
200
+ if (v.screenshotPath)
201
+ parts.push('Screenshot: ' + v.screenshotPath);
202
+ if (v.htmlPath)
203
+ parts.push('HTML: ' + v.htmlPath);
204
+ return [{ type: 'text', text: parts.join('\n\n') }];
205
+ },
206
+ },
207
+ timeoutMs: config.timeoutMs + 60_000,
208
+ async execute(args, exec) {
209
+ const rules = mergedRules(store);
210
+ const shot = await browser.snapshot(args.url, rules, {
211
+ signal: exec.signal,
212
+ outDir: config.playwright.snapshotDir,
213
+ });
214
+ const out = {
215
+ url: args.url,
216
+ ...shot.title ? { title: shot.title } : {},
217
+ text: shot.text,
218
+ htmlPath: shot.htmlPath,
219
+ };
220
+ if (args.screenshot !== false)
221
+ out.screenshotPath = shot.screenshotPath;
222
+ store.savePage({
223
+ url: args.url,
224
+ ...shot.title ? { title: shot.title } : {},
225
+ text: shot.text,
226
+ htmlPath: shot.htmlPath,
227
+ ...out.screenshotPath ? { screenshotPath: out.screenshotPath } : {},
228
+ source: 'playwright',
229
+ });
230
+ store.recordQuery({ kind: 'snapshot', url: args.url, query: shot.title ?? args.url, engine: 'playwright', status: 'ok', detail: JSON.stringify({ screenshotPath: out.screenshotPath, htmlPath: shot.htmlPath }) });
231
+ return out;
232
+ },
233
+ }));
234
+ ctx.tools.register(defineTool({
235
+ name: 'web_history',
236
+ description: 'Query the persistent search/fetch/snapshot history stored in SQLite (queries, engines, timestamps).',
237
+ parameters: {
238
+ kind: { type: 'string', description: 'Filter: search, fetch, platform, snapshot, or all.' },
239
+ query: { type: 'string', description: 'Substring filter on the query or URL.' },
240
+ engine: { type: 'string', description: 'Filter by engine id (e.g. ddg, github, multi(...)).' },
241
+ platform: { type: 'string', description: 'Filter by platform (e.g. github, zhihu, arxiv).' },
242
+ limit: { type: 'number', description: 'Max rows (1-200, default 20).' },
243
+ replay: { type: 'string', description: 'A query id from web_history records; returns that query saved result sources.' },
244
+ export: { type: 'boolean', description: 'Write the filtered history (with results) to a JSON file and return its path.' },
245
+ },
246
+ output: {
247
+ schema: {
248
+ type: 'object',
249
+ additionalProperties: false,
250
+ properties: {
251
+ records: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: { id: { type: 'string' }, kind: { type: 'string' }, query: { type: 'string' }, engine: { type: 'string' }, platform: { type: 'string' }, url: { type: 'string' }, status: { type: 'string' }, ts: { type: 'string' } } } },
252
+ replayedSources: { type: 'array', items: { type: 'object', additionalProperties: false, properties: { url: { type: 'string', required: true }, title: { type: 'string' }, snippet: { type: 'string' }, publishedAt: { type: 'string' } } } },
253
+ exportPath: { type: 'string' },
254
+ },
255
+ },
256
+ render: (_args, value) => {
257
+ const v = value;
258
+ const parts = [];
259
+ if (v.records.length) {
260
+ parts.push(v.records.map(r => {
261
+ const what = r.query ?? r.url ?? '';
262
+ const via = r.engine ?? r.platform ?? '';
263
+ return '- [' + r.kind + '] ' + r.ts + ' · ' + (r.status === 'ok' ? 'ok' : r.status) + ' · ' + what + (via ? ' (' + via + ')' : '') + (r.id ? ' · id=' + r.id : '');
264
+ }).join('\n'));
265
+ }
266
+ else {
267
+ parts.push('No history records found.');
268
+ }
269
+ if (v.replayedSources?.length)
270
+ parts.push('Replayed sources:\n' + v.replayedSources.map(s => '- [' + (s.title ?? s.url) + '](' + s.url + ')' + (s.snippet ? ' — ' + s.snippet : '')).join('\n'));
271
+ if (v.exportPath)
272
+ parts.push('Exported to: ' + v.exportPath);
273
+ return [{ type: 'text', text: parts.join('\n\n') }];
274
+ },
275
+ },
276
+ timeoutMs: 15_000,
277
+ isConcurrencySafe: () => true,
278
+ async execute(args) {
279
+ const kind = args.kind;
280
+ if (kind && !['search', 'fetch', 'platform', 'snapshot'].includes(kind))
281
+ throw new Error('kind must be search, fetch, platform, snapshot, or omitted');
282
+ const records = store.listQueries({
283
+ ...kind ? { kind } : {},
284
+ ...args.query ? { query: args.query } : {},
285
+ ...args.engine ? { engine: args.engine } : {},
286
+ ...args.platform ? { platform: args.platform } : {},
287
+ limit: args.limit ?? 20,
288
+ });
289
+ const mapped = records.map(r => ({
290
+ id: r.id,
291
+ kind: r.kind,
292
+ ...r.query ? { query: r.query } : {},
293
+ ...r.engine ? { engine: r.engine } : {},
294
+ ...r.platform ? { platform: r.platform } : {},
295
+ ...r.url ? { url: r.url } : {},
296
+ status: r.status,
297
+ ts: r.ts,
298
+ }));
299
+ const out = { records: mapped };
300
+ if (args.replay) {
301
+ const rows = store.resultsForQuery(args.replay);
302
+ if (!rows.length)
303
+ throw new Error('no saved results for query id ' + args.replay);
304
+ out.replayedSources = rows.map(r => ({ url: r.url, ...r.title ? { title: r.title } : {}, ...r.snippet ? { snippet: r.snippet } : {}, ...r.published ? { publishedAt: r.published } : {} }));
305
+ }
306
+ if (args.export) {
307
+ const { default: fs } = await import('node:fs');
308
+ const { default: path } = await import('node:path');
309
+ const outDir = path.dirname(config.dbPath);
310
+ fs.mkdirSync(outDir, { recursive: true });
311
+ const exportPath = path.join(outDir, 'history-export-' + Date.now() + '.json');
312
+ const payload = mapped.map(r => ({ ...r, results: store.resultsForQuery(r.id).map(s => ({ url: s.url, ...s.title ? { title: s.title } : {}, ...s.snippet ? { snippet: s.snippet } : {} })) }));
313
+ fs.writeFileSync(exportPath, JSON.stringify(payload, null, 2), 'utf8');
314
+ out.exportPath = exportPath;
315
+ }
316
+ return out;
317
+ },
318
+ }));
319
+ ctx.tools.register(defineTool({
320
+ name: 'web_cache_clear',
321
+ description: 'Purge persisted search results / page snapshots from the SQLite store (by age and/or engine), or delete one query by id. Returns removed counts.',
322
+ parameters: {
323
+ olderThanDays: { type: 'number', description: 'Only purge records older than N days; omit to purge everything.' },
324
+ engine: { type: 'string', description: 'Only purge records from this engine.' },
325
+ queryId: { type: 'string', description: 'Delete one query (and its saved results) by id from web_history.' },
326
+ },
327
+ output: {
328
+ schema: {
329
+ type: 'object',
330
+ additionalProperties: false,
331
+ properties: {
332
+ removedQueries: { type: 'number', required: true },
333
+ removedResults: { type: 'number', required: true },
334
+ removedPages: { type: 'number', required: true },
335
+ },
336
+ },
337
+ render: (_args, value) => [{ type: 'text', text: 'Removed ' + value.removedQueries + ' queries, ' + value.removedResults + ' result rows, ' + value.removedPages + ' page snapshots.' }],
338
+ },
339
+ timeoutMs: 20_000,
340
+ async execute(args) {
341
+ if (args.queryId) {
342
+ const deleted = store.deleteQuery(args.queryId);
343
+ if (!deleted)
344
+ throw new Error('query id not found: ' + args.queryId);
345
+ return { removedQueries: 1, removedResults: 1, removedPages: 0 };
346
+ }
347
+ const removed = store.clearCache({
348
+ ...args.olderThanDays != null ? { olderThanDays: args.olderThanDays } : {},
349
+ ...args.engine ? { engine: args.engine } : {},
350
+ });
351
+ return { removedQueries: removed.queries, removedResults: removed.results, removedPages: removed.pages };
352
+ },
353
+ }));
354
+ ctx.tools.register(defineTool({
355
+ name: 'web_rule',
356
+ description: 'Manage persistent per-site extraction rules (userscript-style): contentSelectors and removeSelectors applied when fetching/snapshotting pages from that hostname. Rules survive restarts in SQLite and override built-ins. Supports list/upsert/remove plus export/import as a JSON rule pack.',
357
+ parameters: {
358
+ action: { type: 'string', required: true, description: 'list, upsert, remove, export, or import.' },
359
+ hostname: { type: 'string', description: 'Site hostname, e.g. example.com (required for upsert/remove).' },
360
+ contentSelectors: { type: 'string', description: 'Comma-separated CSS selectors for the main content (upsert).' },
361
+ removeSelectors: { type: 'string', description: 'Comma-separated CSS selectors to remove before extraction (upsert).' },
362
+ rulesJson: { type: 'string', description: 'JSON array of {hostname, content, remove?} rules to import (action=import).' },
363
+ },
364
+ output: {
365
+ schema: {
366
+ type: 'object',
367
+ additionalProperties: false,
368
+ properties: {
369
+ message: { type: 'string' },
370
+ rules: { type: 'array', items: { type: 'object', additionalProperties: false, properties: { hostname: { type: 'string' }, content: { type: 'string' }, remove: { type: 'string' } } } },
371
+ },
372
+ },
373
+ render: (_args, value) => {
374
+ const v = value;
375
+ const parts = [];
376
+ if (v.message)
377
+ parts.push(v.message);
378
+ if (v.rules?.length) {
379
+ parts.push('Rules:');
380
+ for (const r of v.rules)
381
+ parts.push('- ' + r.hostname + ' → content: ' + r.content + (r.remove ? ' | remove: ' + r.remove : ''));
382
+ }
383
+ return [{ type: 'text', text: parts.join('\n') || 'No rules.' }];
384
+ },
385
+ },
386
+ timeoutMs: 10_000,
387
+ async execute(args) {
388
+ const action = args.action;
389
+ if (!['list', 'upsert', 'remove', 'export', 'import'].includes(action))
390
+ throw new Error('action must be list, upsert, remove, export, or import');
391
+ if (action === 'list' || action === 'export') {
392
+ return { rules: store.listRules().map(r => ({ hostname: r.hostname, content: r.content, ...r.remove ? { remove: r.remove } : {} })) };
393
+ }
394
+ if (action === 'import') {
395
+ if (!args.rulesJson)
396
+ throw new Error('rulesJson is required for import');
397
+ let parsed;
398
+ try {
399
+ parsed = JSON.parse(args.rulesJson);
400
+ }
401
+ catch {
402
+ throw new Error('rulesJson is not valid JSON');
403
+ }
404
+ if (!Array.isArray(parsed))
405
+ throw new Error('rulesJson must be a JSON array');
406
+ let count = 0;
407
+ for (const item of parsed) {
408
+ if (typeof item?.hostname !== 'string' || typeof item?.content !== 'string')
409
+ continue;
410
+ store.upsertRule(item.hostname, item.content, item.remove);
411
+ count++;
412
+ }
413
+ return { message: 'Imported ' + count + ' rules', rules: store.listRules().map(r => ({ hostname: r.hostname, content: r.content, ...r.remove ? { remove: r.remove } : {} })) };
414
+ }
415
+ if (!args.hostname)
416
+ throw new Error('hostname is required for ' + action);
417
+ if (action === 'upsert') {
418
+ if (!args.contentSelectors)
419
+ throw new Error('contentSelectors is required for upsert');
420
+ store.upsertRule(args.hostname, args.contentSelectors, args.removeSelectors);
421
+ return { message: 'Rule upserted for ' + args.hostname.toLowerCase() };
422
+ }
423
+ const removed = store.removeRule(args.hostname);
424
+ return { message: removed ? 'Rule removed for ' + args.hostname.toLowerCase() : 'No rule found for ' + args.hostname.toLowerCase() };
425
+ },
426
+ }));
427
+ ctx.tools.register(defineTool({
428
+ name: 'web_search_stats',
429
+ description: 'Report the persistent store state: database size, per-table counts, per-kind counts, top engines and queries, plus configured engines.',
430
+ parameters: {},
431
+ output: {
432
+ schema: {
433
+ type: 'object',
434
+ additionalProperties: false,
435
+ properties: {
436
+ dbPath: { type: 'string', required: true },
437
+ dbSizeBytes: { type: 'number', required: true },
438
+ queries: { type: 'number', required: true },
439
+ results: { type: 'number', required: true },
440
+ pages: { type: 'number', required: true },
441
+ rules: { type: 'number', required: true },
442
+ engines: { type: 'array', required: true, items: { type: 'string' } },
443
+ kindCounts: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: { kind: { type: 'string', required: true }, count: { type: 'number', required: true } } } },
444
+ topEngines: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: { engine: { type: 'string', required: true }, count: { type: 'number', required: true } } } },
445
+ topQueries: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: { query: { type: 'string', required: true }, count: { type: 'number', required: true } } } },
446
+ },
447
+ },
448
+ render: (_args, value) => {
449
+ const v = value;
450
+ const lines = [
451
+ 'Database: ' + v.dbPath,
452
+ 'Size: ' + (v.dbSizeBytes / 1024).toFixed(1) + ' KB',
453
+ 'Queries: ' + v.queries + ' · Result rows: ' + v.results + ' · Page snapshots: ' + v.pages + ' · Custom rules: ' + v.rules,
454
+ 'Engines: ' + v.engines.join(', '),
455
+ 'Per kind: ' + (v.kindCounts.map(k => k.kind + '=' + k.count).join(', ') || '-'),
456
+ 'Top engines: ' + (v.topEngines.map(e => e.engine + '(' + e.count + ')').join(', ') || '-'),
457
+ 'Top queries: ' + (v.topQueries.map(q => JSON.stringify(q.query) + '(' + q.count + ')').join(', ') || '-'),
458
+ ];
459
+ return [{ type: 'text', text: lines.join('\n') }];
460
+ },
461
+ },
462
+ timeoutMs: 10_000,
463
+ isConcurrencySafe: () => true,
464
+ async execute() {
465
+ const stats = store.stats();
466
+ return {
467
+ dbPath: config.dbPath,
468
+ ...stats,
469
+ engines: dynamic().engines,
470
+ kindCounts: store.kindCounts(),
471
+ topEngines: store.topEngines(),
472
+ topQueries: store.topQueries(),
473
+ };
474
+ },
475
+ }));
476
+ ctx.tools.register(defineTool({
477
+ name: 'web_deps',
478
+ description: 'Detect or install the external tools this plugin shells out to (gh, bili, yt-dlp, agent-reach, mcporter). Playwright/chromium and opencli are bundled in the dsh-browser plugin, not listed here. check reports which are present and how to install them; install runs the package-manager command for one backend. Prefer check first; install only when the user asks.',
479
+ parameters: {
480
+ action: { type: 'string', required: true, description: 'check (default) or install.' },
481
+ backend: { type: 'string', description: 'Dependency id to install (gh, bili, yt-dlp, agent-reach, mcporter).' },
482
+ installer: { type: 'string', description: 'Package manager: winget, choco, uv, pipx, pip, or npm.' },
483
+ },
484
+ output: {
485
+ schema: {
486
+ type: 'object',
487
+ additionalProperties: false,
488
+ properties: {
489
+ backends: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: { id: { type: 'string', required: true }, label: { type: 'string', required: true }, usedBy: { type: 'string', required: true }, available: { type: 'boolean', required: true }, path: { type: 'string' }, installs: { type: 'array', required: true, items: { type: 'object', additionalProperties: false, properties: { installer: { type: 'string', required: true }, command: { type: 'string', required: true } } } } } } },
490
+ message: { type: 'string' },
491
+ install: { type: 'object', additionalProperties: false, properties: { code: { type: 'number' }, stdout: { type: 'string' }, stderr: { type: 'string' }, timedOut: { type: 'boolean' } } },
492
+ },
493
+ },
494
+ render: (_args, value) => {
495
+ const v = value;
496
+ const parts = [];
497
+ if (v.message)
498
+ parts.push(v.message);
499
+ if (v.backends.length) {
500
+ for (const b of v.backends) {
501
+ parts.push((b.available ? '✅' : '❌') + ' ' + b.label + ' (' + b.id + ') — ' + b.usedBy + (b.available && b.path ? ' · ' + b.path : ''));
502
+ if (!b.available)
503
+ parts.push(' 安装: ' + b.installs.map(i => i.installer + ': ' + i.command).join(' | '));
504
+ }
505
+ }
506
+ if (v.install)
507
+ parts.push('安装结果 exit=' + v.install.code + (v.install.timedOut ? ' (超时)' : '') + '\n' + (v.install.stderr || v.install.stdout).slice(0, 2000));
508
+ return [{ type: 'text', text: parts.join('\n') }];
509
+ },
510
+ },
511
+ timeoutMs: config.timeoutMs + 180_000,
512
+ isConcurrencySafe: () => true,
513
+ async execute(args, exec) {
514
+ if (args.action === 'install') {
515
+ if (!args.backend)
516
+ throw new Error('backend is required for install');
517
+ const installer = args.installer ?? defaultInstallerFor(args.backend);
518
+ const result = await installDep(args.backend, installer);
519
+ return { backends: [], install: { ...result } };
520
+ }
521
+ if (args.action !== 'check' && args.action !== 'install')
522
+ throw new Error('action must be check or install');
523
+ const backends = await detectDeps();
524
+ const allOk = backends.every(b => b.available);
525
+ return {
526
+ backends: backends.map(b => ({ ...b, installs: b.installs })),
527
+ ...allOk ? { message: '所有外部依赖已就绪。' } : { message: '部分外部依赖缺失,可对缺失项运行 web_deps action=install(或手动执行列出的安装命令)。' },
528
+ };
529
+ },
530
+ }));
531
+ }
532
+ function defaultInstallerFor(backend) {
533
+ switch (backend) {
534
+ case 'gh': return 'winget';
535
+ case 'bili': return 'uv';
536
+ case 'yt-dlp': return 'uv';
537
+ case 'agent-reach': return 'uv';
538
+ case 'mcporter': return 'npm';
539
+ default: throw new Error('unknown backend: ' + backend);
540
+ }
541
+ }
542
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}