@tianshu-ai/tianshu 0.4.21 → 0.4.23

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 (26) hide show
  1. package/package.json +1 -1
  2. package/packages/server/builtinConfig/plugins/web-search/manifest.json +5 -53
  3. package/packages/server/builtinConfig/plugins/web-search/skills/web-search-howto.md +4 -7
  4. package/packages/web/dist/assets/{bundle-web-hHh7gz2L.js → bundle-web-B7eyKI4Y.js} +1 -1
  5. package/packages/web/dist/assets/index-D97NmBlG.css +2 -0
  6. package/packages/web/dist/assets/{index-B6oq6ed_.js → index-GoKNQUL6.js} +4 -4
  7. package/packages/web/dist/index.html +2 -2
  8. package/plugins/web-search/dist/server.d.ts.map +1 -1
  9. package/plugins/web-search/dist/server.js +18 -56
  10. package/plugins/web-search/dist/server.js.map +1 -1
  11. package/plugins/web-search/dist/tools/index.d.ts +2 -2
  12. package/plugins/web-search/dist/tools/index.d.ts.map +1 -1
  13. package/plugins/web-search/dist/tools/index.js +1 -1
  14. package/plugins/web-search/dist/tools/index.js.map +1 -1
  15. package/plugins/web-search/dist/tools/providers.d.ts +15 -20
  16. package/plugins/web-search/dist/tools/providers.d.ts.map +1 -1
  17. package/plugins/web-search/dist/tools/providers.js +24 -248
  18. package/plugins/web-search/dist/tools/providers.js.map +1 -1
  19. package/plugins/web-search/dist/tools/web-search.d.ts +4 -25
  20. package/plugins/web-search/dist/tools/web-search.d.ts.map +1 -1
  21. package/plugins/web-search/dist/tools/web-search.js +48 -203
  22. package/plugins/web-search/dist/tools/web-search.js.map +1 -1
  23. package/plugins/web-search/manifest.json +5 -53
  24. package/plugins/web-search/package.json +1 -1
  25. package/plugins/web-search/skills/web-search-howto.md +4 -7
  26. package/packages/web/dist/assets/index-DWOCI_kD.css +0 -2
@@ -5,9 +5,9 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Tianshu — AI agent platform</title>
7
7
  <meta name="description" content="An open AI agent platform with a sidecar browser. Built in public." />
8
- <script type="module" crossorigin src="/assets/index-B6oq6ed_.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-GoKNQUL6.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-QTnfLwEv.js">
10
- <link rel="stylesheet" crossorigin href="/assets/index-DWOCI_kD.css">
10
+ <link rel="stylesheet" crossorigin href="/assets/index-D97NmBlG.css">
11
11
  </head>
12
12
  <body class="bg-slate-950 text-slate-100">
13
13
  <div id="root"></div>
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAGV,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAUhC,QAAA,MAAM,MAAM,EAAE,kBAsFb,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAGV,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAQhC,QAAA,MAAM,MAAM,EAAE,kBA6Cb,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -1,41 +1,21 @@
1
1
  // Server side of the `web-search` plugin.
2
2
  //
3
- // One agent tool (`web_search`), backed by Tavily / Brave Search
4
- // JSON APIs. The plugin's `activate()` reads its API keys from
5
- // `ctx.pluginConfig` (cleartext at this layer; the host has
6
- // already merged secrets/ into pluginConfig before calling us)
7
- // and bakes them into a closure handed to the tool builder.
3
+ // Two agent tools:
4
+ // - web_search — key-free hosted MCP search (Exa or Parallel;
5
+ // the operator picks the backend in config)
6
+ // - web_fetch — dependency-free single-page fetch markdown
8
7
  //
9
- // The plugin also keeps a `ProviderHealth` cache shared by every
10
- // invocation in this activation, so a worker that searches ten
11
- // times in a row pays the round-trip on a known-bad key only
12
- // once. The cache is cleared automatically when the plugin
13
- // re-activates (any config change does this) and via the
14
- // `POST /health/reset` admin route below.
15
- import { buildWebSearchTool, buildWebFetchTool, readWebSearchConfig, effectiveScheme, isConfigured, } from "./tools/index.js";
8
+ // The plugin's `activate()` reads its config from
9
+ // `ctx.pluginConfig` and bakes it into the tool builders. A shared
10
+ // `ProviderHealth` cache is cleared on re-activation (any config
11
+ // change) and via `POST /health/reset`.
12
+ import { buildWebSearchTool, buildWebFetchTool, readWebSearchConfig, } from "./tools/index.js";
16
13
  import { ProviderHealth } from "./tools/health.js";
17
14
  const plugin = {
18
15
  activate(ctx) {
19
16
  const cfg = readWebSearchConfig(ctx.pluginConfig);
20
- const scheme = effectiveScheme(cfg);
21
- if (!isConfigured(cfg)) {
22
- ctx.log.warn(`web-search: scheme "${scheme}" is selected but not fully ` +
23
- `configured. Open Settings → Plugins → Web Search ` +
24
- `(searxng needs a base URL; tavily/brave need a key). ` +
25
- `web_fetch still works without any config.`);
26
- }
27
- else {
28
- const detail = scheme === "hosted"
29
- ? `hosted (${cfg.hostedBackend ?? "exa"}${(cfg.hostedBackend === "parallel"
30
- ? cfg.parallelApiKey
31
- : cfg.exaApiKey)
32
- ? ", keyed"
33
- : ", key-free"})`
34
- : scheme === "searxng"
35
- ? `searxng (${cfg.searxngBaseUrl})`
36
- : scheme;
37
- ctx.log.info(`web-search: enabled — scheme ${detail}; web_fetch on`);
38
- }
17
+ const backend = cfg.backend ?? "exa";
18
+ ctx.log.info(`web-search: enabled — key-free hosted search via ${backend}; web_fetch on`);
39
19
  const health = new ProviderHealth();
40
20
  return {
41
21
  tools: {
@@ -47,36 +27,19 @@ const plugin = {
47
27
  getHealth: (_req, res) => {
48
28
  res.json({
49
29
  ok: true,
50
- scheme,
51
- configured: isConfigured(cfg),
52
- providers: {
53
- hosted: {
54
- configured: true,
55
- backend: cfg.hostedBackend ?? "exa",
56
- keyed: Boolean((cfg.hostedBackend === "parallel"
57
- ? cfg.parallelApiKey
58
- : cfg.exaApiKey)),
59
- },
60
- searxng: { configured: Boolean(cfg.searxngBaseUrl) },
61
- tavily: { configured: Boolean(cfg.tavilyApiKey) },
62
- brave: { configured: Boolean(cfg.braveApiKey) },
63
- },
30
+ backend,
64
31
  timeoutMs: cfg.timeoutMs ?? 8000,
65
32
  dead: health.snapshot(),
66
33
  });
67
34
  },
68
35
  // POST /api/p/web-search/health/reset
69
- // Body is optional: { provider?: "tavily" | "brave" }.
70
- // Without `provider` the whole cache clears.
36
+ // Body optional: { provider?: "hosted" }. Without it the
37
+ // whole cache clears.
71
38
  resetHealth: (req, res) => {
72
39
  const body = req.body;
73
- const target = body?.provider;
74
- if (target === "tavily" ||
75
- target === "brave" ||
76
- target === "hosted" ||
77
- target === "searxng") {
78
- health.resetOne(target);
79
- res.json({ ok: true, cleared: [target] });
40
+ if (body?.provider === "hosted") {
41
+ health.resetOne("hosted");
42
+ res.json({ ok: true, cleared: ["hosted"] });
80
43
  return;
81
44
  }
82
45
  const before = health.snapshot().map((e) => e.provider);
@@ -87,8 +50,7 @@ const plugin = {
87
50
  };
88
51
  },
89
52
  async deactivate() {
90
- // ProviderHealth is per-activation; the GC takes care of it
91
- // when activate() is called again (registry invalidate cycle).
53
+ // ProviderHealth is per-activation; GC handles it on re-activate.
92
54
  },
93
55
  };
94
56
  export default plugin;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,mBAAmB;AACnB,iEAAiE;AACjE,+DAA+D;AAC/D,iEAAiE;AACjE,EAAE;AACF,kDAAkD;AAClD,mEAAmE;AACnE,iEAAiE;AACjE,wCAAwC;AAQxC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,MAAM,GAAuB;IACjC,QAAQ,CAAC,GAAkB;QACzB,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC;QACrC,GAAG,CAAC,GAAG,CAAC,IAAI,CACV,oDAAoD,OAAO,gBAAgB,CAC5E,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QAEpC,OAAO;YACL,KAAK,EAAE;gBACL,aAAa,EAAE,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC;gBAC9C,YAAY,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;aAC9D;YACD,MAAM,EAAE;gBACN,+BAA+B;gBAC/B,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;oBAC1C,GAAG,CAAC,IAAI,CAAC;wBACP,EAAE,EAAE,IAAI;wBACR,OAAO;wBACP,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;wBAChC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;qBACxB,CAAC,CAAC;gBACL,CAAC;gBACD,sCAAsC;gBACtC,yDAAyD;gBACzD,sBAAsB;gBACtB,WAAW,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;oBAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,IAA0C,CAAC;oBAC5D,IAAI,IAAI,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;wBAChC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBAC1B,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;wBAC5C,OAAO;oBACT,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBACxD,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC1C,CAAC;aACF;SACF,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,UAAU;QACd,kEAAkE;IACpE,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -1,4 +1,4 @@
1
- export { buildWebSearchTool, readWebSearchConfig, effectiveScheme, isConfigured, type WebSearchPluginConfig, type SearchScheme, } from "./web-search.js";
1
+ export { buildWebSearchTool, readWebSearchConfig, type WebSearchPluginConfig, } from "./web-search.js";
2
2
  export { buildWebFetchTool, type WebFetchConfig } from "./web-fetch.js";
3
- export { type SearchResult, type SearchOpts, type SearchProvider, type ProviderName, } from "./providers.js";
3
+ export { type SearchResult, type SearchOpts, type SearchProvider, type ProviderName, type HostedBackend, } from "./providers.js";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,qBAAqB,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC"}
@@ -1,3 +1,3 @@
1
- export { buildWebSearchTool, readWebSearchConfig, effectiveScheme, isConfigured, } from "./web-search.js";
1
+ export { buildWebSearchTool, readWebSearchConfig, } from "./web-search.js";
2
2
  export { buildWebFetchTool } from "./web-fetch.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,YAAY,GAGb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAuB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAuB,MAAM,gBAAgB,CAAC"}
@@ -1,24 +1,22 @@
1
1
  export interface SearchResult {
2
2
  title: string;
3
3
  url: string;
4
- /** 1-3 sentence snippet. Empty when the provider didn't supply
5
- * one (Tavily always supplies, Brave usually does). */
4
+ /** 1-3 sentence snippet. */
6
5
  content: string;
7
- /** ISO-8601 string from the provider, when available. Useful for
8
- * recency filtering downstream; agents reading the JSON should
9
- * treat this as best-effort and not parse strictly. */
6
+ /** ISO-8601 / free-form date string from the provider when
7
+ * available; best-effort, agents shouldn't parse strictly. */
10
8
  publishedDate?: string | null;
11
9
  }
12
10
  export interface SearchOpts {
13
- /** 1-20. Tavily max 20, Brave max 20. The tool clamps. */
11
+ /** 1-20. The provider clamps. */
14
12
  count: number;
15
- /** Free-text language hint, passed through where the provider
16
- * supports it. e.g. `"zh-CN"`, `"en"`. */
13
+ /** Free-text language hint (unused by the hosted endpoints today,
14
+ * kept for tool-schema compatibility). */
17
15
  language?: string;
18
- /** Recency window. Maps to provider-specific values; absence
19
- * means "no recency filter". */
16
+ /** Recency window (unused by the hosted endpoints today, kept for
17
+ * tool-schema compatibility). */
20
18
  freshness?: "day" | "week" | "month" | "year";
21
- /** Network timeout per fetch (ms). 8000 is the tool's default. */
19
+ /** Network timeout per fetch (ms). */
22
20
  timeoutMs: number;
23
21
  }
24
22
  export interface ProviderError {
@@ -27,24 +25,21 @@ export interface ProviderError {
27
25
  status: number;
28
26
  message: string;
29
27
  }
30
- export type ProviderName = "tavily" | "brave" | "hosted" | "searxng";
31
- /** Each provider implements this. `key` is the credential from
32
- * `pluginConfig` (an API key for tavily/brave, an endpoint URL
33
- * for searxng, or the empty string for the key-free hosted MCP
34
- * provider); the surrounding tool decides which provider(s) to
35
- * call based on which are configured. */
28
+ /** The only backend name today. Kept as a type so the health cache
29
+ * and error trail stay generic. */
30
+ export type ProviderName = "hosted";
31
+ /** Which hosted MCP endpoint to query. */
32
+ export type HostedBackend = "exa" | "parallel";
36
33
  export interface SearchProvider {
37
34
  readonly name: ProviderName;
35
+ /** `key` carries the backend name ("exa" | "parallel"). */
38
36
  search(query: string, key: string, opts: SearchOpts): Promise<{
39
37
  results: SearchResult[];
40
38
  } | {
41
39
  error: ProviderError;
42
40
  }>;
43
41
  }
44
- export declare const tavilyProvider: SearchProvider;
45
- export declare const braveProvider: SearchProvider;
46
42
  export declare const PARALLEL_MCP_URL = "https://search.parallel.ai/mcp";
47
43
  export declare const EXA_MCP_URL = "https://mcp.exa.ai/mcp";
48
44
  export declare const hostedProvider: SearchProvider;
49
- export declare const searxngProvider: SearchProvider;
50
45
  //# sourceMappingURL=providers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/tools/providers.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ;4DACwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB;;4DAEwD;IACxD,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd;+CAC2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;qCACiC;IACjC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC9C,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,SAAS,CAAC;AAEd;;;;0CAI0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,YAAY,EAAE,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,eAAO,MAAM,cAAc,EAAE,cA6D5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,cAwE3B,CAAC;AAeF,eAAO,MAAM,gBAAgB,mCAAmC,CAAC;AACjE,eAAO,MAAM,WAAW,2BAA2B,CAAC;AAmBpD,eAAO,MAAM,cAAc,EAAE,cAgG5B,CAAC;AA0GF,eAAO,MAAM,eAAe,EAAE,cAkE7B,CAAC"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/tools/providers.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB;mEAC+D;IAC/D,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd;+CAC2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;sCACkC;IAClC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC9C,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;oCACoC;AACpC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;AAEpC,0CAA0C;AAC1C,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,UAAU,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,2DAA2D;IAC3D,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,YAAY,EAAE,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,eAAO,MAAM,gBAAgB,mCAAmC,CAAC;AACjE,eAAO,MAAM,WAAW,2BAA2B,CAAC;AAMpD,eAAO,MAAM,cAAc,EAAE,cAkF5B,CAAC"}
@@ -1,185 +1,36 @@
1
- // Two adapters with the same shape so the surrounding tool can
2
- // fall back from one to the other without branching on provider
3
- // names. Both providers serve a JSON API; the only async is one
4
- // fetch + json parse per call.
1
+ // Web search backend: hosted MCP only.
5
2
  //
6
- // Why the contract is `(query, opts) => SearchResult[]` and not
7
- // the provider's native shape:
8
- // - the agent shouldn't have to know which provider answered
9
- // - errors are uniform (one place that throws, one error log)
10
- // - if we add Exa / Serper / a self-hosted SearXNG later it
11
- // drops in here without touching the tool
12
- export const tavilyProvider = {
13
- name: "tavily",
14
- async search(query, key, opts) {
15
- // Tavily's "advanced" mode summarises content; "basic" returns
16
- // bare snippets. We pick basic — the agent will fetch the page
17
- // when it needs the body, and basic is faster + cheaper.
18
- const body = {
19
- api_key: key,
20
- query,
21
- search_depth: "basic",
22
- include_answer: false,
23
- include_raw_content: false,
24
- include_images: false,
25
- max_results: clamp(opts.count, 1, 20),
26
- };
27
- if (opts.freshness) {
28
- body.time_range = opts.freshness;
29
- }
30
- try {
31
- const ctl = new AbortController();
32
- const timer = setTimeout(() => ctl.abort(), opts.timeoutMs);
33
- const res = await fetch("https://api.tavily.com/search", {
34
- method: "POST",
35
- headers: { "content-type": "application/json" },
36
- body: JSON.stringify(body),
37
- signal: ctl.signal,
38
- }).finally(() => clearTimeout(timer));
39
- if (!res.ok) {
40
- return {
41
- error: {
42
- provider: "tavily",
43
- status: res.status,
44
- message: await safeText(res),
45
- },
46
- };
47
- }
48
- const json = (await res.json());
49
- const results = (json.results ?? []).map((r) => ({
50
- title: typeof r.title === "string" ? r.title : "",
51
- url: typeof r.url === "string" ? r.url : "",
52
- content: typeof r.content === "string" ? r.content : "",
53
- publishedDate: r.published_date ?? null,
54
- }));
55
- return { results };
56
- }
57
- catch (err) {
58
- return {
59
- error: {
60
- provider: "tavily",
61
- status: 0,
62
- message: err instanceof Error ? err.message : String(err),
63
- },
64
- };
65
- }
66
- },
67
- };
68
- export const braveProvider = {
69
- name: "brave",
70
- async search(query, key, opts) {
71
- // Brave's web search returns up to 20 in `web.results`; news /
72
- // images live in sibling sections we ignore for now.
73
- const params = new URLSearchParams({
74
- q: query,
75
- count: String(clamp(opts.count, 1, 20)),
76
- safesearch: "off",
77
- // Brave understands ISO 639-1 + locale; we only forward the
78
- // first 5 chars to keep the param valid (`zh-CN` → `zh-CN`,
79
- // `en` → `en`).
80
- ...(opts.language ? { search_lang: opts.language.slice(0, 5) } : {}),
81
- // Recency: Brave uses pd / pw / pm / py.
82
- ...(opts.freshness
83
- ? {
84
- freshness: { day: "pd", week: "pw", month: "pm", year: "py" }[opts.freshness],
85
- }
86
- : {}),
87
- });
88
- try {
89
- const ctl = new AbortController();
90
- const timer = setTimeout(() => ctl.abort(), opts.timeoutMs);
91
- const res = await fetch(`https://api.search.brave.com/res/v1/web/search?${params.toString()}`, {
92
- headers: {
93
- "x-subscription-token": key,
94
- accept: "application/json",
95
- "accept-encoding": "gzip",
96
- },
97
- signal: ctl.signal,
98
- }).finally(() => clearTimeout(timer));
99
- if (!res.ok) {
100
- return {
101
- error: {
102
- provider: "brave",
103
- status: res.status,
104
- message: await safeText(res),
105
- },
106
- };
107
- }
108
- const json = (await res.json());
109
- const results = (json.web?.results ?? []).map((r) => ({
110
- title: typeof r.title === "string" ? r.title : "",
111
- url: typeof r.url === "string" ? r.url : "",
112
- content: typeof r.description === "string" ? r.description : "",
113
- publishedDate: r.page_age ?? null,
114
- }));
115
- return { results };
116
- }
117
- catch (err) {
118
- return {
119
- error: {
120
- provider: "brave",
121
- status: 0,
122
- message: err instanceof Error ? err.message : String(err),
123
- },
124
- };
125
- }
126
- },
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.
3
+ // The plugin used to ship four schemes (Tavily / Brave / hosted
4
+ // MCP / SearXNG). Per Yu it's now just the key-free hosted MCP
5
+ // path you only choose which anonymous endpoint to hit: Exa or
6
+ // Parallel. Both expose a hosted MCP endpoint answering anonymous
7
+ // JSON-RPC `tools/call` requests on a free tier (the same approach
8
+ // OpenCode uses). No API key, no account, no self-hosting.
135
9
  //
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.
10
+ // The `SearchProvider` shape is kept so web_search's plumbing
11
+ // (health cache, error trail) doesn't have to special-case a
12
+ // single provider; `key` here is just the backend name
13
+ // ("exa" | "parallel"), not a credential.
140
14
  export const PARALLEL_MCP_URL = "https://search.parallel.ai/mcp";
141
15
  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
- }
16
+ function normBackend(key) {
17
+ return key === "parallel" ? "parallel" : "exa";
153
18
  }
154
19
  export const hostedProvider = {
155
20
  name: "hosted",
156
21
  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;
22
+ const backend = normBackend(key);
23
+ const url = backend === "parallel" ? PARALLEL_MCP_URL : EXA_MCP_URL;
163
24
  // MCP tool + args differ per backend.
164
25
  const toolName = backend === "parallel" ? "web_search" : "web_search_exa";
165
26
  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
- };
27
+ ? { objective: query, search_queries: [query] }
28
+ : { query, numResults: clamp(opts.count, 1, 20), type: "auto" };
175
29
  const headers = {
176
30
  "content-type": "application/json",
177
31
  accept: "application/json, text/event-stream",
178
- "user-agent": "tianshu-web-search/0.2",
32
+ "user-agent": "tianshu-web-search/0.3",
179
33
  };
180
- if (backend === "parallel" && apiKey) {
181
- headers.authorization = `Bearer ${apiKey}`;
182
- }
183
34
  const rpc = {
184
35
  jsonrpc: "2.0",
185
36
  id: 1,
@@ -220,9 +71,9 @@ export const hostedProvider = {
220
71
  // JSON (array or {results:[...]}). Parse per backend, with a
221
72
  // cross-fallback so a format change on either side degrades
222
73
  // gracefully instead of returning nothing.
223
- const results = (backend === "exa" ? parseExaText(text) : parseHostedResults(text));
224
- const final = (results.length > 0
225
- ? results
74
+ const primary = backend === "exa" ? parseExaText(text) : parseHostedResults(text);
75
+ const final = (primary.length > 0
76
+ ? primary
226
77
  : backend === "exa"
227
78
  ? parseHostedResults(text)
228
79
  : parseExaText(text)).slice(0, clamp(opts.count, 1, 20));
@@ -268,18 +119,13 @@ function extractMcpText(body) {
268
119
  }
269
120
  return null;
270
121
  }
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. */
122
+ /** Parallel-style payload: JSON, either an array or `{results:[...]}`. */
275
123
  function parseHostedResults(text) {
276
124
  let data;
277
125
  try {
278
126
  data = JSON.parse(text);
279
127
  }
280
128
  catch {
281
- // Non-JSON payload: hand it back as a single synthetic result
282
- // so the agent at least sees the content.
283
129
  const t = text.trim();
284
130
  return t ? [{ title: "result", url: "", content: t.slice(0, 2000) }] : [];
285
131
  }
@@ -305,9 +151,8 @@ function parseHostedResults(text) {
305
151
  };
306
152
  });
307
153
  }
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. */
154
+ /** Exa's plain-text MCP payload: blocks split by a `---` line, each
155
+ * carrying `Title:` / `URL:` / `Published:` / `Highlights:`. */
311
156
  function parseExaText(text) {
312
157
  const blocks = text
313
158
  .split(/\n\s*---\s*\n/)
@@ -318,7 +163,6 @@ function parseExaText(text) {
318
163
  const title = block.match(/^\s*Title:\s*(.+)$/im)?.[1]?.trim() ?? "";
319
164
  const url = block.match(/^\s*URL:\s*(\S+)/im)?.[1]?.trim() ?? "";
320
165
  const published = block.match(/^\s*Published:\s*(.+)$/im)?.[1]?.trim();
321
- // Highlights are everything after the `Highlights:` label.
322
166
  const hi = block.split(/^\s*Highlights:\s*$/im)[1] ?? "";
323
167
  const content = hi
324
168
  .replace(/\n\.\.\.\n/g, " ")
@@ -336,74 +180,6 @@ function parseExaText(text) {
336
180
  }
337
181
  return out;
338
182
  }
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
- };
407
183
  function clamp(n, lo, hi) {
408
184
  return Math.max(lo, Math.min(hi, Math.floor(n)));
409
185
  }
@@ -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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"}