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.
- package/LICENSE +21 -0
- package/LOGIN.md +67 -0
- package/README.md +123 -0
- package/cordis.patch.yml +21 -0
- package/lib/browser-service.d.ts +68 -0
- package/lib/browser-service.js +8 -0
- package/lib/browser-service.js.map +1 -0
- package/lib/config.d.ts +91 -0
- package/lib/config.js +72 -0
- package/lib/config.js.map +1 -0
- package/lib/deps.d.ts +34 -0
- package/lib/deps.js +90 -0
- package/lib/deps.js.map +1 -0
- package/lib/engines.d.ts +71 -0
- package/lib/engines.js +562 -0
- package/lib/engines.js.map +1 -0
- package/lib/extract.d.ts +40 -0
- package/lib/extract.js +243 -0
- package/lib/extract.js.map +1 -0
- package/lib/fetch.d.ts +42 -0
- package/lib/fetch.js +175 -0
- package/lib/fetch.js.map +1 -0
- package/lib/index.d.ts +23 -0
- package/lib/index.js +117 -0
- package/lib/index.js.map +1 -0
- package/lib/memory-cache.d.ts +18 -0
- package/lib/memory-cache.js +42 -0
- package/lib/memory-cache.js.map +1 -0
- package/lib/platform-search.d.ts +34 -0
- package/lib/platform-search.js +61 -0
- package/lib/platform-search.js.map +1 -0
- package/lib/playwright.d.ts +71 -0
- package/lib/playwright.js +165 -0
- package/lib/playwright.js.map +1 -0
- package/lib/router.d.ts +66 -0
- package/lib/router.js +332 -0
- package/lib/router.js.map +1 -0
- package/lib/store.d.ts +117 -0
- package/lib/store.js +223 -0
- package/lib/store.js.map +1 -0
- package/lib/tools.d.ts +28 -0
- package/lib/tools.js +542 -0
- package/lib/tools.js.map +1 -0
- package/lib/util.d.ts +73 -0
- package/lib/util.js +220 -0
- package/lib/util.js.map +1 -0
- package/package.json +59 -0
- 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
|
package/lib/tools.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|