@tianshu-ai/tianshu 0.4.19 → 0.4.21
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/package.json +1 -1
- package/packages/server/builtinConfig/plugins/web-search/manifest.json +52 -17
- package/packages/server/builtinConfig/plugins/web-search/skills/web-search-howto.md +36 -15
- package/packages/web/dist/assets/{bundle-web-CL_xD3_1.js → bundle-web-hHh7gz2L.js} +1 -1
- package/packages/web/dist/assets/{index-CmlY5kSR.js → index-B6oq6ed_.js} +4 -4
- package/packages/web/dist/assets/index-DWOCI_kD.css +2 -0
- package/packages/web/dist/index.html +2 -2
- package/plugins/web-search/dist/server.d.ts.map +1 -1
- package/plugins/web-search/dist/server.js +34 -12
- package/plugins/web-search/dist/server.js.map +1 -1
- package/plugins/web-search/dist/tools/health.d.ts +2 -1
- package/plugins/web-search/dist/tools/health.d.ts.map +1 -1
- package/plugins/web-search/dist/tools/health.js.map +1 -1
- package/plugins/web-search/dist/tools/index.d.ts +3 -2
- package/plugins/web-search/dist/tools/index.d.ts.map +1 -1
- package/plugins/web-search/dist/tools/index.js +2 -1
- package/plugins/web-search/dist/tools/index.js.map +1 -1
- package/plugins/web-search/dist/tools/providers.d.ts +11 -4
- package/plugins/web-search/dist/tools/providers.d.ts.map +1 -1
- package/plugins/web-search/dist/tools/providers.js +279 -0
- package/plugins/web-search/dist/tools/providers.js.map +1 -1
- package/plugins/web-search/dist/tools/web-fetch.d.ts +9 -0
- package/plugins/web-search/dist/tools/web-fetch.d.ts.map +1 -0
- package/plugins/web-search/dist/tools/web-fetch.js +258 -0
- package/plugins/web-search/dist/tools/web-fetch.js.map +1 -0
- package/plugins/web-search/dist/tools/web-search.d.ts +20 -1
- package/plugins/web-search/dist/tools/web-search.d.ts.map +1 -1
- package/plugins/web-search/dist/tools/web-search.js +92 -39
- package/plugins/web-search/dist/tools/web-search.js.map +1 -1
- package/plugins/web-search/manifest.json +52 -17
- package/plugins/web-search/package.json +2 -2
- package/plugins/web-search/skills/web-search-howto.md +36 -15
- package/plugins/workboard/dist/client.js +2 -2
- package/plugins/workboard/dist/client.js.map +1 -1
- package/packages/web/dist/assets/index-CsPw69WQ.css +0 -2
|
@@ -125,6 +125,285 @@ export const braveProvider = {
|
|
|
125
125
|
}
|
|
126
126
|
},
|
|
127
127
|
};
|
|
128
|
+
// ─── hosted MCP provider (Parallel / Exa free endpoints) ───────
|
|
129
|
+
//
|
|
130
|
+
// Key-free web search. Both Parallel and Exa expose a hosted MCP
|
|
131
|
+
// endpoint that answers anonymous JSON-RPC `tools/call` requests
|
|
132
|
+
// (a free tier). If the operator supplies an EXA/PARALLEL key we
|
|
133
|
+
// attach it, but the whole point of this provider is that it
|
|
134
|
+
// works with none. Same approach OpenCode uses.
|
|
135
|
+
//
|
|
136
|
+
// `key` here is NOT an API key — it's a JSON blob the tool packs
|
|
137
|
+
// with the chosen backend + optional key: {"backend":"exa"|
|
|
138
|
+
// "parallel", "apiKey":"..."}. The tool builds it; callers never
|
|
139
|
+
// see it.
|
|
140
|
+
export const PARALLEL_MCP_URL = "https://search.parallel.ai/mcp";
|
|
141
|
+
export const EXA_MCP_URL = "https://mcp.exa.ai/mcp";
|
|
142
|
+
function parseHostedKey(key) {
|
|
143
|
+
try {
|
|
144
|
+
const j = JSON.parse(key);
|
|
145
|
+
return {
|
|
146
|
+
backend: j.backend === "parallel" ? "parallel" : "exa",
|
|
147
|
+
apiKey: typeof j.apiKey === "string" && j.apiKey ? j.apiKey : undefined,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return { backend: "exa" };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export const hostedProvider = {
|
|
155
|
+
name: "hosted",
|
|
156
|
+
async search(query, key, opts) {
|
|
157
|
+
const { backend, apiKey } = parseHostedKey(key);
|
|
158
|
+
const url = backend === "parallel"
|
|
159
|
+
? PARALLEL_MCP_URL
|
|
160
|
+
: apiKey
|
|
161
|
+
? `${EXA_MCP_URL}?exaApiKey=${encodeURIComponent(apiKey)}`
|
|
162
|
+
: EXA_MCP_URL;
|
|
163
|
+
// MCP tool + args differ per backend.
|
|
164
|
+
const toolName = backend === "parallel" ? "web_search" : "web_search_exa";
|
|
165
|
+
const toolArgs = backend === "parallel"
|
|
166
|
+
? {
|
|
167
|
+
objective: query,
|
|
168
|
+
search_queries: [query],
|
|
169
|
+
}
|
|
170
|
+
: {
|
|
171
|
+
query,
|
|
172
|
+
numResults: clamp(opts.count, 1, 20),
|
|
173
|
+
type: "auto",
|
|
174
|
+
};
|
|
175
|
+
const headers = {
|
|
176
|
+
"content-type": "application/json",
|
|
177
|
+
accept: "application/json, text/event-stream",
|
|
178
|
+
"user-agent": "tianshu-web-search/0.2",
|
|
179
|
+
};
|
|
180
|
+
if (backend === "parallel" && apiKey) {
|
|
181
|
+
headers.authorization = `Bearer ${apiKey}`;
|
|
182
|
+
}
|
|
183
|
+
const rpc = {
|
|
184
|
+
jsonrpc: "2.0",
|
|
185
|
+
id: 1,
|
|
186
|
+
method: "tools/call",
|
|
187
|
+
params: { name: toolName, arguments: toolArgs },
|
|
188
|
+
};
|
|
189
|
+
try {
|
|
190
|
+
const ctl = new AbortController();
|
|
191
|
+
const timer = setTimeout(() => ctl.abort(), opts.timeoutMs);
|
|
192
|
+
const res = await fetch(url, {
|
|
193
|
+
method: "POST",
|
|
194
|
+
headers,
|
|
195
|
+
body: JSON.stringify(rpc),
|
|
196
|
+
signal: ctl.signal,
|
|
197
|
+
}).finally(() => clearTimeout(timer));
|
|
198
|
+
if (!res.ok) {
|
|
199
|
+
return {
|
|
200
|
+
error: {
|
|
201
|
+
provider: "hosted",
|
|
202
|
+
status: res.status,
|
|
203
|
+
message: `${backend}: ${await safeText(res)}`,
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
const raw = await res.text();
|
|
208
|
+
const text = extractMcpText(raw);
|
|
209
|
+
if (text === null) {
|
|
210
|
+
return {
|
|
211
|
+
error: {
|
|
212
|
+
provider: "hosted",
|
|
213
|
+
status: 0,
|
|
214
|
+
message: `${backend}: could not parse MCP response`,
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// Exa returns a plain-text block (Title:/URL:/Published:/
|
|
219
|
+
// Highlights:, results split by `---`). Parallel returns
|
|
220
|
+
// JSON (array or {results:[...]}). Parse per backend, with a
|
|
221
|
+
// cross-fallback so a format change on either side degrades
|
|
222
|
+
// gracefully instead of returning nothing.
|
|
223
|
+
const results = (backend === "exa" ? parseExaText(text) : parseHostedResults(text));
|
|
224
|
+
const final = (results.length > 0
|
|
225
|
+
? results
|
|
226
|
+
: backend === "exa"
|
|
227
|
+
? parseHostedResults(text)
|
|
228
|
+
: parseExaText(text)).slice(0, clamp(opts.count, 1, 20));
|
|
229
|
+
return { results: final };
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
return {
|
|
233
|
+
error: {
|
|
234
|
+
provider: "hosted",
|
|
235
|
+
status: 0,
|
|
236
|
+
message: `${backend}: ${err instanceof Error ? err.message : String(err)}`,
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
/** MCP endpoints answer either as plain JSON or as an SSE stream
|
|
243
|
+
* (`data: {...}` lines). Pull the inner `result.content[].text`
|
|
244
|
+
* payload out of whichever we got. Returns null if nothing
|
|
245
|
+
* usable is found. */
|
|
246
|
+
function extractMcpText(body) {
|
|
247
|
+
const tryOne = (s) => {
|
|
248
|
+
try {
|
|
249
|
+
const j = JSON.parse(s);
|
|
250
|
+
const item = j.result?.content?.find((c) => typeof c.text === "string");
|
|
251
|
+
return item?.text ?? null;
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
const trimmed = body.trim();
|
|
258
|
+
const direct = trimmed ? tryOne(trimmed) : null;
|
|
259
|
+
if (direct !== null)
|
|
260
|
+
return direct;
|
|
261
|
+
// SSE: scan `data:` lines.
|
|
262
|
+
for (const line of trimmed.split(/\r?\n/)) {
|
|
263
|
+
if (line.startsWith("data:")) {
|
|
264
|
+
const got = tryOne(line.slice(5).trim());
|
|
265
|
+
if (got !== null)
|
|
266
|
+
return got;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
/** The MCP `text` payload is itself JSON (or JSON-ish) describing
|
|
272
|
+
* results. Both Exa and Parallel return an array of
|
|
273
|
+
* `{title,url,text/snippet,publishedDate}`-ish objects, sometimes
|
|
274
|
+
* wrapped in `{ results: [...] }`. Be liberal. */
|
|
275
|
+
function parseHostedResults(text) {
|
|
276
|
+
let data;
|
|
277
|
+
try {
|
|
278
|
+
data = JSON.parse(text);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// Non-JSON payload: hand it back as a single synthetic result
|
|
282
|
+
// so the agent at least sees the content.
|
|
283
|
+
const t = text.trim();
|
|
284
|
+
return t ? [{ title: "result", url: "", content: t.slice(0, 2000) }] : [];
|
|
285
|
+
}
|
|
286
|
+
const arr = Array.isArray(data)
|
|
287
|
+
? data
|
|
288
|
+
: Array.isArray(data?.results)
|
|
289
|
+
? data.results
|
|
290
|
+
: [];
|
|
291
|
+
return arr.map((raw) => {
|
|
292
|
+
const r = (raw ?? {});
|
|
293
|
+
const str = (...keys) => {
|
|
294
|
+
for (const k of keys) {
|
|
295
|
+
if (typeof r[k] === "string" && r[k])
|
|
296
|
+
return r[k];
|
|
297
|
+
}
|
|
298
|
+
return "";
|
|
299
|
+
};
|
|
300
|
+
return {
|
|
301
|
+
title: str("title", "name"),
|
|
302
|
+
url: str("url", "link"),
|
|
303
|
+
content: str("text", "snippet", "content", "summary").slice(0, 1000),
|
|
304
|
+
publishedDate: str("publishedDate", "published_date", "date") || null,
|
|
305
|
+
};
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
/** Parse Exa's plain-text MCP payload into results. Each block is
|
|
309
|
+
* separated by a line containing only `---`, and carries
|
|
310
|
+
* `Title:`, `URL:`, `Published:`, and `Highlights:` labels. */
|
|
311
|
+
function parseExaText(text) {
|
|
312
|
+
const blocks = text
|
|
313
|
+
.split(/\n\s*---\s*\n/)
|
|
314
|
+
.map((b) => b.trim())
|
|
315
|
+
.filter(Boolean);
|
|
316
|
+
const out = [];
|
|
317
|
+
for (const block of blocks) {
|
|
318
|
+
const title = block.match(/^\s*Title:\s*(.+)$/im)?.[1]?.trim() ?? "";
|
|
319
|
+
const url = block.match(/^\s*URL:\s*(\S+)/im)?.[1]?.trim() ?? "";
|
|
320
|
+
const published = block.match(/^\s*Published:\s*(.+)$/im)?.[1]?.trim();
|
|
321
|
+
// Highlights are everything after the `Highlights:` label.
|
|
322
|
+
const hi = block.split(/^\s*Highlights:\s*$/im)[1] ?? "";
|
|
323
|
+
const content = hi
|
|
324
|
+
.replace(/\n\.\.\.\n/g, " ")
|
|
325
|
+
.replace(/\s+/g, " ")
|
|
326
|
+
.trim()
|
|
327
|
+
.slice(0, 1000);
|
|
328
|
+
if (!title && !url)
|
|
329
|
+
continue;
|
|
330
|
+
out.push({
|
|
331
|
+
title: title || url,
|
|
332
|
+
url,
|
|
333
|
+
content,
|
|
334
|
+
publishedDate: published && published !== "N/A" ? published : null,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
return out;
|
|
338
|
+
}
|
|
339
|
+
// ─── SearXNG provider (self-hosted meta-search) ────────────────
|
|
340
|
+
//
|
|
341
|
+
// `key` is the operator's SearXNG base URL (e.g.
|
|
342
|
+
// "http://localhost:8080" or "https://searx.example.com"). We hit
|
|
343
|
+
// its JSON API (`/search?format=json`). No API key; the endpoint
|
|
344
|
+
// is the credential.
|
|
345
|
+
export const searxngProvider = {
|
|
346
|
+
name: "searxng",
|
|
347
|
+
async search(query, key, opts) {
|
|
348
|
+
const base = key.replace(/\/+$/, "");
|
|
349
|
+
if (!base) {
|
|
350
|
+
return {
|
|
351
|
+
error: {
|
|
352
|
+
provider: "searxng",
|
|
353
|
+
status: 0,
|
|
354
|
+
message: "no SearXNG base URL configured",
|
|
355
|
+
},
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
const params = new URLSearchParams({
|
|
359
|
+
q: query,
|
|
360
|
+
format: "json",
|
|
361
|
+
safesearch: "0",
|
|
362
|
+
});
|
|
363
|
+
if (opts.language)
|
|
364
|
+
params.set("language", opts.language.slice(0, 5));
|
|
365
|
+
if (opts.freshness) {
|
|
366
|
+
// SearXNG time_range accepts day/week/month/year directly.
|
|
367
|
+
params.set("time_range", opts.freshness);
|
|
368
|
+
}
|
|
369
|
+
try {
|
|
370
|
+
const ctl = new AbortController();
|
|
371
|
+
const timer = setTimeout(() => ctl.abort(), opts.timeoutMs);
|
|
372
|
+
const res = await fetch(`${base}/search?${params.toString()}`, {
|
|
373
|
+
headers: { accept: "application/json" },
|
|
374
|
+
signal: ctl.signal,
|
|
375
|
+
}).finally(() => clearTimeout(timer));
|
|
376
|
+
if (!res.ok) {
|
|
377
|
+
return {
|
|
378
|
+
error: {
|
|
379
|
+
provider: "searxng",
|
|
380
|
+
status: res.status,
|
|
381
|
+
message: await safeText(res),
|
|
382
|
+
},
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
const json = (await res.json());
|
|
386
|
+
const results = (json.results ?? [])
|
|
387
|
+
.slice(0, clamp(opts.count, 1, 20))
|
|
388
|
+
.map((r) => ({
|
|
389
|
+
title: typeof r.title === "string" ? r.title : "",
|
|
390
|
+
url: typeof r.url === "string" ? r.url : "",
|
|
391
|
+
content: typeof r.content === "string" ? r.content : "",
|
|
392
|
+
publishedDate: r.publishedDate ?? null,
|
|
393
|
+
}));
|
|
394
|
+
return { results };
|
|
395
|
+
}
|
|
396
|
+
catch (err) {
|
|
397
|
+
return {
|
|
398
|
+
error: {
|
|
399
|
+
provider: "searxng",
|
|
400
|
+
status: 0,
|
|
401
|
+
message: err instanceof Error ? err.message : String(err),
|
|
402
|
+
},
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
};
|
|
128
407
|
function clamp(n, lo, hi) {
|
|
129
408
|
return Math.max(lo, Math.min(hi, Math.floor(n)));
|
|
130
409
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/tools/providers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/tools/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AgentTool } from "@tianshu-ai/plugin-sdk";
|
|
2
|
+
export interface WebFetchConfig {
|
|
3
|
+
/** Per-request timeout (ms). Falls back to 8000. */
|
|
4
|
+
timeoutMs?: number;
|
|
5
|
+
/** Hard cap on returned characters. Falls back to 20000. */
|
|
6
|
+
maxCharsDefault?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildWebFetchTool(cfg: WebFetchConfig): AgentTool;
|
|
9
|
+
//# sourceMappingURL=web-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,wBAAwB,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,SAAS,CAiIhE"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
// `web_fetch(url, extractMode?, maxChars?)`.
|
|
2
|
+
//
|
|
3
|
+
// A plain HTTP GET that extracts readable content and returns it
|
|
4
|
+
// as markdown or text. No JavaScript execution, no API key, no
|
|
5
|
+
// external service — this is the "grab a single page" capability
|
|
6
|
+
// that pairs with web_search. For JS-heavy or login-gated pages
|
|
7
|
+
// the agent should use the browser tool instead.
|
|
8
|
+
//
|
|
9
|
+
// Dependency-free on purpose: the plugin ships without turndown /
|
|
10
|
+
// readability so it stays a tiny self-contained builtin. The
|
|
11
|
+
// extractor below is a pragmatic tag-stripper, not a full DOM
|
|
12
|
+
// parser — good enough for article bodies, docs, and JSON/text
|
|
13
|
+
// endpoints.
|
|
14
|
+
//
|
|
15
|
+
// SSRF: we block private / loopback / link-local / metadata hosts
|
|
16
|
+
// before fetching AND re-check after redirects, so an agent can't
|
|
17
|
+
// be steered into probing the internal network.
|
|
18
|
+
import { Type } from "typebox";
|
|
19
|
+
export function buildWebFetchTool(cfg) {
|
|
20
|
+
const timeoutMs = cfg.timeoutMs ?? 8000;
|
|
21
|
+
const maxCharsDefault = cfg.maxCharsDefault ?? 20000;
|
|
22
|
+
return {
|
|
23
|
+
schema: {
|
|
24
|
+
name: "web_fetch",
|
|
25
|
+
description: "Fetch a single URL over HTTP(S) and return its readable " +
|
|
26
|
+
"content as markdown or text. No JavaScript is executed, so " +
|
|
27
|
+
"for JS-heavy or login-gated pages use the browser tool " +
|
|
28
|
+
"instead. Blocks private/internal hosts. Use this to read a " +
|
|
29
|
+
"specific page you already have the URL for (e.g. a search " +
|
|
30
|
+
"result). Returns extracted body text, not raw HTML.",
|
|
31
|
+
parameters: Type.Object({
|
|
32
|
+
url: Type.String({
|
|
33
|
+
description: "The http(s) URL to fetch.",
|
|
34
|
+
}),
|
|
35
|
+
extractMode: Type.Optional(Type.Union([Type.Literal("markdown"), Type.Literal("text")], {
|
|
36
|
+
description: "Output format after content extraction. Default \"markdown\".",
|
|
37
|
+
})),
|
|
38
|
+
maxChars: Type.Optional(Type.Number({
|
|
39
|
+
description: "Truncate output to this many characters. Default 20000.",
|
|
40
|
+
minimum: 100,
|
|
41
|
+
maximum: 200000,
|
|
42
|
+
})),
|
|
43
|
+
}),
|
|
44
|
+
},
|
|
45
|
+
async execute(rawArgs, _ctx) {
|
|
46
|
+
const args = rawArgs;
|
|
47
|
+
const url = typeof args.url === "string" ? args.url.trim() : "";
|
|
48
|
+
if (!url)
|
|
49
|
+
return { ok: false, text: "url is required" };
|
|
50
|
+
if (!/^https?:\/\//i.test(url)) {
|
|
51
|
+
return { ok: false, text: "url must start with http:// or https://" };
|
|
52
|
+
}
|
|
53
|
+
const guard = await blockedHost(url);
|
|
54
|
+
if (guard) {
|
|
55
|
+
return { ok: false, text: `blocked: ${guard}` };
|
|
56
|
+
}
|
|
57
|
+
const cap = typeof args.maxChars === "number" ? args.maxChars : maxCharsDefault;
|
|
58
|
+
const mode = args.extractMode === "text" ? "text" : "markdown";
|
|
59
|
+
try {
|
|
60
|
+
const ctl = new AbortController();
|
|
61
|
+
const timer = setTimeout(() => ctl.abort(), timeoutMs);
|
|
62
|
+
const res = await fetch(url, {
|
|
63
|
+
redirect: "manual",
|
|
64
|
+
headers: {
|
|
65
|
+
// Chrome-like UA + language so sites don't serve a
|
|
66
|
+
// bot-blocked or empty variant.
|
|
67
|
+
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) " +
|
|
68
|
+
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36",
|
|
69
|
+
"accept-language": "en,zh-CN;q=0.8",
|
|
70
|
+
accept: "text/html,application/xhtml+xml,application/json;q=0.9,*/*;q=0.8",
|
|
71
|
+
},
|
|
72
|
+
signal: ctl.signal,
|
|
73
|
+
}).finally(() => clearTimeout(timer));
|
|
74
|
+
// Follow one redirect manually so we can re-run the SSRF
|
|
75
|
+
// guard on the target (auto-follow would skip the check).
|
|
76
|
+
if (res.status >= 300 && res.status < 400) {
|
|
77
|
+
const loc = res.headers.get("location");
|
|
78
|
+
if (!loc) {
|
|
79
|
+
return { ok: false, text: `redirect with no Location (${res.status})` };
|
|
80
|
+
}
|
|
81
|
+
const next = new URL(loc, url).toString();
|
|
82
|
+
const g2 = await blockedHost(next);
|
|
83
|
+
if (g2)
|
|
84
|
+
return { ok: false, text: `blocked after redirect: ${g2}` };
|
|
85
|
+
return await this.execute({ url: next, extractMode: mode, maxChars: cap }, _ctx);
|
|
86
|
+
}
|
|
87
|
+
if (!res.ok) {
|
|
88
|
+
return {
|
|
89
|
+
ok: false,
|
|
90
|
+
text: `HTTP ${res.status} fetching ${url}`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const ctype = res.headers.get("content-type") ?? "";
|
|
94
|
+
const body = await res.text();
|
|
95
|
+
let out;
|
|
96
|
+
if (ctype.includes("application/json")) {
|
|
97
|
+
out = body;
|
|
98
|
+
}
|
|
99
|
+
else if (ctype.includes("text/html") || /<html[\s>]/i.test(body)) {
|
|
100
|
+
out = mode === "text" ? htmlToText(body) : htmlToMarkdown(body);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// Plain text, markdown, csv, etc. — return as-is.
|
|
104
|
+
out = body;
|
|
105
|
+
}
|
|
106
|
+
const truncated = out.length > cap;
|
|
107
|
+
const text = truncated ? out.slice(0, cap) : out;
|
|
108
|
+
return {
|
|
109
|
+
ok: true,
|
|
110
|
+
text,
|
|
111
|
+
data: {
|
|
112
|
+
url,
|
|
113
|
+
contentType: ctype,
|
|
114
|
+
chars: text.length,
|
|
115
|
+
truncated,
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
return {
|
|
121
|
+
ok: false,
|
|
122
|
+
text: `fetch failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// ─── SSRF guard ────────────────────────────────────────────────
|
|
129
|
+
/** Returns a reason string when the URL's host is disallowed, or
|
|
130
|
+
* null when it's safe to fetch. Blocks loopback, private, CGN,
|
|
131
|
+
* link-local, ULA, and cloud metadata addresses by literal match;
|
|
132
|
+
* we don't resolve DNS here (the host's guarded fetch layer does
|
|
133
|
+
* deeper checks), this is a cheap first line of defence. */
|
|
134
|
+
async function blockedHost(rawUrl) {
|
|
135
|
+
let host;
|
|
136
|
+
try {
|
|
137
|
+
host = new URL(rawUrl).hostname.toLowerCase();
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return "invalid URL";
|
|
141
|
+
}
|
|
142
|
+
if (host === "localhost" || host.endsWith(".localhost")) {
|
|
143
|
+
return "localhost is not allowed";
|
|
144
|
+
}
|
|
145
|
+
// IPv6 literal in brackets is stripped by URL().hostname already.
|
|
146
|
+
if (host === "::1" || host === "0.0.0.0")
|
|
147
|
+
return "loopback is not allowed";
|
|
148
|
+
// Cloud metadata.
|
|
149
|
+
if (host === "169.254.169.254" || host === "metadata.google.internal") {
|
|
150
|
+
return "metadata endpoint is not allowed";
|
|
151
|
+
}
|
|
152
|
+
// IPv4 literal → range check.
|
|
153
|
+
const m = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
|
|
154
|
+
if (m) {
|
|
155
|
+
const [a, b] = [Number(m[1]), Number(m[2])];
|
|
156
|
+
if (a === 127)
|
|
157
|
+
return "loopback range is not allowed";
|
|
158
|
+
if (a === 10)
|
|
159
|
+
return "private range 10/8 is not allowed";
|
|
160
|
+
if (a === 172 && b >= 16 && b <= 31)
|
|
161
|
+
return "private range 172.16/12 is not allowed";
|
|
162
|
+
if (a === 192 && b === 168)
|
|
163
|
+
return "private range 192.168/16 is not allowed";
|
|
164
|
+
if (a === 169 && b === 254)
|
|
165
|
+
return "link-local range is not allowed";
|
|
166
|
+
if (a === 100 && b >= 64 && b <= 127)
|
|
167
|
+
return "carrier-grade NAT range is not allowed";
|
|
168
|
+
if (a === 0)
|
|
169
|
+
return "reserved range is not allowed";
|
|
170
|
+
}
|
|
171
|
+
// IPv6 private / link-local literals.
|
|
172
|
+
if (host.startsWith("fe80:") || host.startsWith("fc") || host.startsWith("fd")) {
|
|
173
|
+
return "IPv6 private/link-local range is not allowed";
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
// ─── HTML extraction (dependency-free) ─────────────────────────
|
|
178
|
+
/** Strip an HTML document down to its main textual content and
|
|
179
|
+
* convert the structural tags we care about to markdown. This is
|
|
180
|
+
* deliberately simple: remove noise elements, unwrap the rest,
|
|
181
|
+
* map headings/links/lists/code to markdown, collapse whitespace. */
|
|
182
|
+
function htmlToMarkdown(html) {
|
|
183
|
+
let s = stripNoise(html);
|
|
184
|
+
// Headings.
|
|
185
|
+
s = s.replace(/<h([1-6])[^>]*>([\s\S]*?)<\/h\1>/gi, (_m, lvl, inner) => {
|
|
186
|
+
const hashes = "#".repeat(Number(lvl));
|
|
187
|
+
return `\n\n${hashes} ${collapse(stripTags(inner))}\n\n`;
|
|
188
|
+
});
|
|
189
|
+
// Links → [text](href).
|
|
190
|
+
s = s.replace(/<a\b[^>]*href=["']([^"']+)["'][^>]*>([\s\S]*?)<\/a>/gi, (_m, href, inner) => {
|
|
191
|
+
const text = collapse(stripTags(inner));
|
|
192
|
+
return text ? `[${text}](${href})` : href;
|
|
193
|
+
});
|
|
194
|
+
// Bold / strong, italic / em.
|
|
195
|
+
s = s.replace(/<(strong|b)\b[^>]*>([\s\S]*?)<\/\1>/gi, (_m, _t, i) => `**${collapse(stripTags(i))}**`);
|
|
196
|
+
s = s.replace(/<(em|i)\b[^>]*>([\s\S]*?)<\/\1>/gi, (_m, _t, i) => `*${collapse(stripTags(i))}*`);
|
|
197
|
+
// Inline code + code blocks.
|
|
198
|
+
s = s.replace(/<pre\b[^>]*>([\s\S]*?)<\/pre>/gi, (_m, inner) => `\n\n\`\`\`\n${decode(stripTags(inner))}\n\`\`\`\n\n`);
|
|
199
|
+
s = s.replace(/<code\b[^>]*>([\s\S]*?)<\/code>/gi, (_m, inner) => `\`${collapse(stripTags(inner))}\``);
|
|
200
|
+
// List items.
|
|
201
|
+
s = s.replace(/<li\b[^>]*>([\s\S]*?)<\/li>/gi, (_m, inner) => `\n- ${collapse(stripTags(inner))}`);
|
|
202
|
+
// Paragraphs / breaks / block boundaries.
|
|
203
|
+
s = s.replace(/<\/(p|div|section|article|ul|ol|table|tr|h[1-6])>/gi, "\n\n");
|
|
204
|
+
s = s.replace(/<br\s*\/?>(\s*)/gi, "\n");
|
|
205
|
+
// Everything else: drop tags, decode entities, tidy whitespace.
|
|
206
|
+
s = stripTags(s);
|
|
207
|
+
s = decode(s);
|
|
208
|
+
return tidy(s);
|
|
209
|
+
}
|
|
210
|
+
function htmlToText(html) {
|
|
211
|
+
const s = decode(stripTags(stripNoise(html)));
|
|
212
|
+
return tidy(s);
|
|
213
|
+
}
|
|
214
|
+
/** Remove script/style/nav/header/footer/svg/noscript blocks and
|
|
215
|
+
* HTML comments outright — they're noise for text extraction. */
|
|
216
|
+
function stripNoise(html) {
|
|
217
|
+
return html
|
|
218
|
+
.replace(/<!--[\s\S]*?-->/g, "")
|
|
219
|
+
.replace(/<(script|style|noscript|svg|template)\b[^>]*>[\s\S]*?<\/\1>/gi, "")
|
|
220
|
+
.replace(/<(nav|header|footer|aside)\b[^>]*>[\s\S]*?<\/\1>/gi, "");
|
|
221
|
+
}
|
|
222
|
+
function stripTags(s) {
|
|
223
|
+
return s.replace(/<[^>]+>/g, "");
|
|
224
|
+
}
|
|
225
|
+
/** Decode the handful of HTML entities that actually show up in
|
|
226
|
+
* body text. Numeric entities handled generically. */
|
|
227
|
+
function decode(s) {
|
|
228
|
+
return s
|
|
229
|
+
.replace(/ /g, " ")
|
|
230
|
+
.replace(/&/g, "&")
|
|
231
|
+
.replace(/</g, "<")
|
|
232
|
+
.replace(/>/g, ">")
|
|
233
|
+
.replace(/"/g, '"')
|
|
234
|
+
.replace(/'|'/g, "'")
|
|
235
|
+
.replace(/&#(\d+);/g, (_m, n) => {
|
|
236
|
+
const code = Number(n);
|
|
237
|
+
return Number.isFinite(code) ? String.fromCodePoint(code) : _m;
|
|
238
|
+
})
|
|
239
|
+
.replace(/&#x([0-9a-f]+);/gi, (_m, h) => {
|
|
240
|
+
const code = parseInt(h, 16);
|
|
241
|
+
return Number.isFinite(code) ? String.fromCodePoint(code) : _m;
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
/** Collapse internal whitespace in an inline fragment. */
|
|
245
|
+
function collapse(s) {
|
|
246
|
+
return s.replace(/\s+/g, " ").trim();
|
|
247
|
+
}
|
|
248
|
+
/** Final document tidy: trim lines, collapse >2 blank lines. */
|
|
249
|
+
function tidy(s) {
|
|
250
|
+
return s
|
|
251
|
+
.split(/\r?\n/)
|
|
252
|
+
.map((l) => l.replace(/[ \t]+$/g, "").replace(/^[ \t]+/g, (m) => m))
|
|
253
|
+
.join("\n")
|
|
254
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
255
|
+
.replace(/[ \t]{2,}/g, " ")
|
|
256
|
+
.trim();
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=web-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
import type { AgentTool } from "@tianshu-ai/plugin-sdk";
|
|
2
2
|
import { ProviderHealth } from "./health.js";
|
|
3
|
+
/** Which search scheme the operator picked. The plugin supports
|
|
4
|
+
* two key-free schemes (hosted MCP + self-hosted SearXNG) and two
|
|
5
|
+
* key-based ones (Tavily + Brave) kept from the original plugin. */
|
|
6
|
+
export type SearchScheme = "hosted" | "searxng" | "tavily" | "brave";
|
|
3
7
|
export interface WebSearchPluginConfig {
|
|
8
|
+
/** Operator's chosen scheme. Defaults to "hosted" (key-free). */
|
|
9
|
+
scheme?: SearchScheme;
|
|
10
|
+
/** Backend for the hosted MCP scheme. */
|
|
11
|
+
hostedBackend?: "exa" | "parallel";
|
|
12
|
+
/** Optional key for the hosted backend (higher limits; not
|
|
13
|
+
* required — the free tier works anonymously). */
|
|
14
|
+
exaApiKey?: string;
|
|
15
|
+
parallelApiKey?: string;
|
|
16
|
+
/** Base URL of a self-hosted SearXNG instance. */
|
|
17
|
+
searxngBaseUrl?: string;
|
|
4
18
|
tavilyApiKey?: string;
|
|
5
19
|
braveApiKey?: string;
|
|
6
|
-
preferredProvider?: "tavily" | "brave";
|
|
7
20
|
/** Optional default timeout override (ms). 8000 if unset. */
|
|
8
21
|
timeoutMs?: number;
|
|
9
22
|
}
|
|
@@ -12,4 +25,10 @@ export declare function buildWebSearchTool(cfg: WebSearchPluginConfig, health: P
|
|
|
12
25
|
* shape this plugin actually uses. Plugin's `activate()` calls
|
|
13
26
|
* this once at startup. */
|
|
14
27
|
export declare function readWebSearchConfig(raw: unknown): WebSearchPluginConfig;
|
|
28
|
+
/** Resolve the effective scheme. Explicit `scheme` wins; otherwise
|
|
29
|
+
* infer from what's configured, preferring the key-free hosted
|
|
30
|
+
* scheme so a fresh install works out of the box. */
|
|
31
|
+
export declare function effectiveScheme(cfg: WebSearchPluginConfig): SearchScheme;
|
|
32
|
+
/** True when the effective scheme has everything it needs to run. */
|
|
33
|
+
export declare function isConfigured(cfg: WebSearchPluginConfig): boolean;
|
|
15
34
|
//# sourceMappingURL=web-search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../src/tools/web-search.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../src/tools/web-search.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,wBAAwB,CAAC;AAW1E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C;;qEAEqE;AACrE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,yCAAyC;IACzC,aAAa,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC;IACnC;uDACmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,qBAAqB,EAC1B,MAAM,EAAE,cAAc,GACrB,SAAS,CAqLX;AAED;;4BAE4B;AAC5B,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,CA4BvE;AAED;;sDAEsD;AACtD,wBAAgB,eAAe,CAAC,GAAG,EAAE,qBAAqB,GAAG,YAAY,CAMxE;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAWhE"}
|