@noirhare/dsh-web-search-tavily 0.0.4 → 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 ADDED
@@ -0,0 +1,8 @@
1
+ The MIT License (MIT)
2
+ Copyright © 2026 NoirHare
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
5
+
6
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
7
+
8
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/cordis.patch.yml CHANGED
@@ -1,5 +1,3 @@
1
1
  - insert:
2
- - name: "@noirhare/dsh-web-search-tavily"
3
- config:
4
- apiKey: tvly-proxy-ebed5ea3-dacd-4f4b-acc4-d159f8b46270
5
- url: https://tavily-proxy.noirhare.workers.dev/search
2
+ - id: "@noirhare/dsh-web-search-tavily"
3
+ name: "@noirhare/dsh-web-search-tavily"
package/lib/host.js ADDED
@@ -0,0 +1,134 @@
1
+ // src/index.ts
2
+ import z from "@deepseek-ai/schemastery";
3
+ import { launchEnvironmentOf } from "@deepseek-ai/dsh-launch-environment";
4
+
5
+ // src/provider.ts
6
+ import { WebError } from "@deepseek-ai/dsh-web";
7
+ var TAILY_DEFAULT_URL = "https://api.tavily.com/search";
8
+ var isAbortError = (error) => {
9
+ return error instanceof DOMException && error.name === "AbortError";
10
+ };
11
+ var formatError = (error) => {
12
+ if (!(error instanceof Error)) return String(error);
13
+ let result = "";
14
+ const push = (e) => {
15
+ if (!e) return;
16
+ if (!(error instanceof Error)) {
17
+ result += String(error);
18
+ return;
19
+ }
20
+ if (error instanceof AggregateError) {
21
+ result += "[";
22
+ for (let i = 0; i < error.errors.length; i++) {
23
+ const e2 = error.errors[i];
24
+ push(e2);
25
+ if (i !== error.errors.length - 1) {
26
+ result += ` | `;
27
+ }
28
+ }
29
+ result += "]";
30
+ return;
31
+ }
32
+ result += `${error.name}: ${error.message}`;
33
+ if (error.cause) {
34
+ result += "[";
35
+ push(error.cause);
36
+ result += "]";
37
+ }
38
+ };
39
+ };
40
+ var TavilyWebSearchProvider = class {
41
+ constructor(settings) {
42
+ this.settings = settings;
43
+ }
44
+ settings;
45
+ id = name;
46
+ available() {
47
+ const config = this.settings.get();
48
+ if (!config.token) return false;
49
+ if (config.token.trim().length === 0) return false;
50
+ return true;
51
+ }
52
+ async search(request, signal) {
53
+ const config = this.settings.get();
54
+ let response;
55
+ try {
56
+ response = await fetch(config.url, {
57
+ method: "POST",
58
+ redirect: "follow",
59
+ headers: {
60
+ ...!config.keyless ? { authorization: `Bearer ${config.token}` } : { "X-Tavily-Access-Mode": "keyless" },
61
+ "content-type": "application/json",
62
+ accept: "application/json",
63
+ "user-agent": "deepseek-harness/0.0.1"
64
+ },
65
+ body: JSON.stringify({
66
+ query: request.query,
67
+ search_depth: config.searchDepth,
68
+ chunks_per_source: config.chunksPerSource,
69
+ max_results: request.maxResults,
70
+ include_answer: true
71
+ }),
72
+ ...signal !== void 0 ? { signal } : {}
73
+ });
74
+ } catch (error) {
75
+ if (isAbortError(error)) throw new WebError("Tavily search aborted", "WEB_ABORTED", { cause: error });
76
+ throw new WebError(`Tavily search request failed: ${formatError(error)}`, "WEB_PROVIDER_ERROR", { cause: error });
77
+ }
78
+ if (!response.ok) {
79
+ const status = response.status;
80
+ let message = `Tavily API error (HTTP ${status})`;
81
+ try {
82
+ const error = (await response.json())?.detail?.error;
83
+ if (error !== void 0 && error.length > 0) message = error;
84
+ } catch (error) {
85
+ if (isAbortError(error)) throw new WebError("Exa search aborted", "WEB_ABORTED", { cause: error });
86
+ }
87
+ throw new WebError(message, "WEB_PROVIDER_ERROR");
88
+ }
89
+ try {
90
+ const payload = await response.json();
91
+ return {
92
+ content: payload.answer,
93
+ sources: payload.results.map((r) => ({
94
+ url: r.url,
95
+ title: r.title,
96
+ snippet: r.content
97
+ })),
98
+ truncated: true
99
+ };
100
+ } catch (error) {
101
+ if (isAbortError(error)) throw new WebError("Taily search aborted", "WEB_ABORTED", { cause: error });
102
+ throw new WebError(`Taily returned an unprocessable response body: ${formatError(error)}`, "WEB_PROVIDER_ERROR", {
103
+ cause: error
104
+ });
105
+ }
106
+ }
107
+ };
108
+
109
+ // src/index.ts
110
+ var name = "@noirhare/dsh-web-search-tavily";
111
+ var inject = ["settings", "web"];
112
+ var Config = z.object({
113
+ url: z.string().default(TAILY_DEFAULT_URL),
114
+ token: z.string().min(2),
115
+ keyless: z.boolean().default(false),
116
+ searchDepth: z.union(["basic", "advanced", "fast", "ultra-fast"]),
117
+ chunksPerSource: z.number().min(1).max(3)
118
+ });
119
+ var apply = (ctx, config) => {
120
+ const settings = ctx.settings.register("noirhare-dsh-web-search-tavily", Config, {
121
+ base: {
122
+ ...config,
123
+ token: config.token ?? launchEnvironmentOf(ctx).get("TAVILY_API_KEY")?.value
124
+ }
125
+ });
126
+ ctx.web.registerSearchProvider(new TavilyWebSearchProvider(settings));
127
+ };
128
+ export {
129
+ Config,
130
+ apply,
131
+ inject,
132
+ name
133
+ };
134
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9wcm92aWRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBDb250ZXh0IH0gZnJvbSBcIkBkZWVwc2Vlay1haS9jb3JkaXNcIjtcclxuaW1wb3J0IHR5cGUge30gZnJvbSBcIkBkZWVwc2Vlay1haS9kc2gtc2V0dGluZ3NcIjtcclxuaW1wb3J0IHR5cGUge30gZnJvbSBcIkBkZWVwc2Vlay1haS9kc2gtd2ViXCI7XHJcblxyXG5pbXBvcnQgeiBmcm9tIFwiQGRlZXBzZWVrLWFpL3NjaGVtYXN0ZXJ5XCI7XHJcbmltcG9ydCB7IGxhdW5jaEVudmlyb25tZW50T2YgfSBmcm9tIFwiQGRlZXBzZWVrLWFpL2RzaC1sYXVuY2gtZW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHsgVEFJTFlfREVGQVVMVF9VUkwsIFRhdmlseVdlYlNlYXJjaFByb3ZpZGVyIH0gZnJvbSBcIi4vcHJvdmlkZXJcIjtcclxuXHJcbmV4cG9ydCB0eXBlIENvbmZpZyA9IHtcclxuICAgIHVybDogc3RyaW5nO1xyXG4gICAgdG9rZW4/OiBzdHJpbmc7XHJcbiAgICBrZXlsZXNzOiBib29sZWFuO1xyXG5cclxuICAgIHNlYXJjaERlcHRoPzogXCJiYXNpY1wiIHwgXCJhZHZhbmNlZFwiIHwgXCJmYXN0XCIgfCBcInVsdHJhLWZhc3RcIjtcclxuICAgIGNodW5rc1BlclNvdXJjZT86IG51bWJlcjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBuYW1lID0gXCJAbm9pcmhhcmUvZHNoLXdlYi1zZWFyY2gtdGF2aWx5XCI7XHJcblxyXG5leHBvcnQgY29uc3QgaW5qZWN0ID0gW1wic2V0dGluZ3NcIiwgXCJ3ZWJcIl07XHJcblxyXG5leHBvcnQgY29uc3QgQ29uZmlnOiB6PENvbmZpZz4gPSB6Lm9iamVjdCh7XHJcbiAgICB1cmw6IHouc3RyaW5nKCkuZGVmYXVsdChUQUlMWV9ERUZBVUxUX1VSTCksXHJcbiAgICB0b2tlbjogei5zdHJpbmcoKS5taW4oMiksXHJcbiAgICBrZXlsZXNzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcclxuXHJcbiAgICBzZWFyY2hEZXB0aDogei51bmlvbihbXCJiYXNpY1wiLCBcImFkdmFuY2VkXCIsIFwiZmFzdFwiLCBcInVsdHJhLWZhc3RcIl0gYXMgY29uc3QpLFxyXG4gICAgY2h1bmtzUGVyU291cmNlOiB6Lm51bWJlcigpLm1pbigxKS5tYXgoMyksXHJcbn0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFwcGx5ID0gKGN0eDogQ29udGV4dCwgY29uZmlnOiBDb25maWcpID0+IHtcclxuICAgIGNvbnN0IHNldHRpbmdzID0gY3R4LnNldHRpbmdzLnJlZ2lzdGVyKFwibm9pcmhhcmUtZHNoLXdlYi1zZWFyY2gtdGF2aWx5XCIsIENvbmZpZywge1xyXG4gICAgICAgIGJhc2U6IHtcclxuICAgICAgICAgICAgLi4uY29uZmlnLFxyXG4gICAgICAgICAgICB0b2tlbjogY29uZmlnLnRva2VuID8/IGxhdW5jaEVudmlyb25tZW50T2YoY3R4KS5nZXQoXCJUQVZJTFlfQVBJX0tFWVwiKT8udmFsdWUsXHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGN0eC53ZWIucmVnaXN0ZXJTZWFyY2hQcm92aWRlcihuZXcgVGF2aWx5V2ViU2VhcmNoUHJvdmlkZXIoc2V0dGluZ3MpKTtcclxufTtcclxuIiwgImltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSBcIi4vaW5kZXhcIjtcclxuXHJcbmltcG9ydCB7IFdlYkVycm9yLCBXZWJTZWFyY2hQcm92aWRlciwgV2ViU2VhcmNoUmVxdWVzdCwgV2ViU2VhcmNoUmVzdWx0IH0gZnJvbSBcIkBkZWVwc2Vlay1haS9kc2gtd2ViXCI7XHJcbmltcG9ydCB7IG5hbWUgfSBmcm9tIFwiLi9pbmRleFwiO1xyXG5cclxudHlwZSBUYWlseVNlYXJjaFJlc3BvbnNlID0ge1xyXG4gICAgYW5zd2VyOiBzdHJpbmc7XHJcbiAgICByZXN1bHRzOiB7XHJcbiAgICAgICAgdGl0bGU6IHN0cmluZztcclxuICAgICAgICB1cmw6IHN0cmluZztcclxuICAgICAgICBjb250ZW50OiBzdHJpbmc7XHJcbiAgICB9W107XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgVEFJTFlfREVGQVVMVF9VUkwgPSBcImh0dHBzOi8vYXBpLnRhdmlseS5jb20vc2VhcmNoXCI7XHJcblxyXG5jb25zdCBpc0Fib3J0RXJyb3IgPSAoZXJyb3I6IHVua25vd24pID0+IHtcclxuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiAmJiBlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIjtcclxufTtcclxuXHJcbmNvbnN0IGZvcm1hdEVycm9yID0gKGVycm9yOiB1bmtub3duKSA9PiB7XHJcbiAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkgcmV0dXJuIFN0cmluZyhlcnJvcik7XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICBjb25zdCBwdXNoID0gKGU6IHVua25vd24pID0+IHtcclxuICAgICAgICBpZiAoIWUpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZyhlcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZUVycm9yKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIltcIjtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlcnJvci5lcnJvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBlcnJvci5lcnJvcnNbaV07XHJcbiAgICAgICAgICAgICAgICBwdXNoKGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IGVycm9yLmVycm9ycy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAgfCBgO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIl1cIjtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzdWx0ICs9IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YDtcclxuICAgICAgICBpZiAoZXJyb3IuY2F1c2UpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IFwiW1wiO1xyXG4gICAgICAgICAgICBwdXNoKGVycm9yLmNhdXNlKTtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IFwiXVwiO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgVGF2aWx5V2ViU2VhcmNoUHJvdmlkZXIgaW1wbGVtZW50cyBXZWJTZWFyY2hQcm92aWRlciB7XHJcbiAgICBpZDogc3RyaW5nID0gbmFtZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBzZXR0aW5nczogeyBnZXQoKTogQ29uZmlnIH0pIHt9XHJcblxyXG4gICAgYXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuc2V0dGluZ3MuZ2V0KCk7XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLnRva2VuKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKGNvbmZpZy50b2tlbi50cmltKCkubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNlYXJjaChyZXF1ZXN0OiBXZWJTZWFyY2hSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8V2ViU2VhcmNoUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5zZXR0aW5ncy5nZXQoKTtcclxuXHJcbiAgICAgICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKGNvbmZpZy51cmwsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdDogXCJmb2xsb3dcIixcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi4oIWNvbmZpZy5rZXlsZXNzID8geyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7Y29uZmlnLnRva2VufWAgfSA6IHsgXCJYLVRhdmlseS1BY2Nlc3MtTW9kZVwiOiBcImtleWxlc3NcIiB9KSxcclxuICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidXNlci1hZ2VudFwiOiBcImRlZXBzZWVrLWhhcm5lc3MvMC4wLjFcIixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHJlcXVlc3QucXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX2RlcHRoOiBjb25maWcuc2VhcmNoRGVwdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtzX3Blcl9zb3VyY2U6IGNvbmZpZy5jaHVua3NQZXJTb3VyY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4X3Jlc3VsdHM6IHJlcXVlc3QubWF4UmVzdWx0cyxcclxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2Fuc3dlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgLi4uKHNpZ25hbCAhPT0gdW5kZWZpbmVkID8geyBzaWduYWwgfSA6IHt9KSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcclxuICAgICAgICAgICAgaWYgKGlzQWJvcnRFcnJvcihlcnJvcikpIHRocm93IG5ldyBXZWJFcnJvcihcIlRhdmlseSBzZWFyY2ggYWJvcnRlZFwiLCBcIldFQl9BQk9SVEVEXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgV2ViRXJyb3IoYFRhdmlseSBzZWFyY2ggcmVxdWVzdCBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3IoZXJyb3IpfWAsIFwiV0VCX1BST1ZJREVSX0VSUk9SXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XHJcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gYFRhdmlseSBBUEkgZXJyb3IgKEhUVFAgJHtzdGF0dXN9KWA7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9ICgoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGRldGFpbD86IHsgZXJyb3I/OiBzdHJpbmcgfSB9KT8uZGV0YWlsPy5lcnJvcjtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPT0gdW5kZWZpbmVkICYmIGVycm9yLmxlbmd0aCA+IDApIG1lc3NhZ2UgPSBlcnJvcjtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Fib3J0RXJyb3IoZXJyb3IpKSB0aHJvdyBuZXcgV2ViRXJyb3IoXCJFeGEgc2VhcmNoIGFib3J0ZWRcIiwgXCJXRUJfQUJPUlRFRFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgV2ViRXJyb3IobWVzc2FnZSwgXCJXRUJfUFJPVklERVJfRVJST1JcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgVGFpbHlTZWFyY2hSZXNwb25zZTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHBheWxvYWQuYW5zd2VyLFxyXG4gICAgICAgICAgICAgICAgc291cmNlczogcGF5bG9hZC5yZXN1bHRzLm1hcCgocikgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IHIudXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiByLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHIuY29udGVudCxcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICAgIHRydW5jYXRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xyXG4gICAgICAgICAgICBpZiAoaXNBYm9ydEVycm9yKGVycm9yKSkgdGhyb3cgbmV3IFdlYkVycm9yKFwiVGFpbHkgc2VhcmNoIGFib3J0ZWRcIiwgXCJXRUJfQUJPUlRFRFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFdlYkVycm9yKGBUYWlseSByZXR1cm5lZCBhbiB1bnByb2Nlc3NhYmxlIHJlc3BvbnNlIGJvZHk6ICR7Zm9ybWF0RXJyb3IoZXJyb3IpfWAsIFwiV0VCX1BST1ZJREVSX0VSUk9SXCIsIHtcclxuICAgICAgICAgICAgICAgIGNhdXNlOiBlcnJvcixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAg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
@@ -1,5 +1,5 @@
1
+ import type { Context } from "@deepseek-ai/cordis";
1
2
  import z from "@deepseek-ai/schemastery";
2
- import { Context } from "@deepseek-ai/cordis";
3
3
  export type Config = {
4
4
  url: string;
5
5
  token?: string;
@@ -7,7 +7,7 @@ export type Config = {
7
7
  searchDepth?: "basic" | "advanced" | "fast" | "ultra-fast";
8
8
  chunksPerSource?: number;
9
9
  };
10
- export declare const name = "@noirhare/web-search-tavily";
10
+ export declare const name = "@noirhare/dsh-web-search-tavily";
11
11
  export declare const inject: string[];
12
12
  export declare const Config: z<Config>;
13
13
  export declare const apply: (ctx: Context, config: Config) => void;
@@ -0,0 +1,14 @@
1
+ import type { Config } from "./index";
2
+ import { WebSearchProvider, WebSearchRequest, WebSearchResult } from "@deepseek-ai/dsh-web";
3
+ export declare const TAILY_DEFAULT_URL = "https://api.tavily.com/search";
4
+ export declare class TavilyWebSearchProvider implements WebSearchProvider {
5
+ readonly settings: {
6
+ get(): Config;
7
+ };
8
+ id: string;
9
+ constructor(settings: {
10
+ get(): Config;
11
+ });
12
+ available(): boolean;
13
+ search(request: WebSearchRequest, signal?: AbortSignal): Promise<WebSearchResult>;
14
+ }
package/package.json CHANGED
@@ -1,34 +1,36 @@
1
1
  {
2
2
  "name": "@noirhare/dsh-web-search-tavily",
3
- "version": "0.0.4",
3
+ "version": "0.1.0",
4
4
  "license": "MIT",
5
- "author": {
6
- "name": "NoirHare",
7
- "url": "https://github.com/NoirHare"
8
- },
5
+ "author": "NoirHare",
9
6
  "repository": {
10
7
  "type": "git",
11
- "url": "git+https://github.com/NoirHare/dsh-bundle.git",
12
- "directory": "packages/web-search-tavily"
8
+ "url": "git+https://github.com/NoirHare/dsh-bundle",
9
+ "directory": "plugin/web-search-tavily"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "exports": {
15
+ ".": {
16
+ "types": "./lib/types/index.d.ts",
17
+ "default": "./lib/host.js"
18
+ }
13
19
  },
14
20
  "files": [
15
21
  "lib",
16
22
  "cordis.patch.yml"
17
23
  ],
18
- "publishConfig": {
19
- "access": "public"
20
- },
21
24
  "type": "module",
22
- "exports": {
23
- ".": "./lib/host/index.js",
24
- "./package.json": "./package.json"
25
+ "devDependencies": {
26
+ "host-build-script": "^0.0.1"
25
27
  },
26
28
  "peerDependencies": {
27
29
  "@deepseek-ai/cordis": "^4.0.2",
28
30
  "@deepseek-ai/schemastery": "^3.18.2",
29
- "@deepseek-ai/dsh-launch-environment": "^0.1.2-rc.1",
30
- "@deepseek-ai/dsh-settings": "^0.1.2-rc.1",
31
- "@deepseek-ai/dsh-web": "^0.1.2-rc.1"
31
+ "@deepseek-ai/dsh-settings": "^0.1.5-rc.2",
32
+ "@deepseek-ai/dsh-launch-environment": "^0.1.5-rc.2",
33
+ "@deepseek-ai/dsh-web": "^0.1.5-rc.2"
32
34
  },
33
35
  "dsh": {
34
36
  "bundle": {
@@ -36,7 +38,6 @@
36
38
  }
37
39
  },
38
40
  "scripts": {
39
- "build": "pnpm exec tsc -b && node build.ts",
40
- "prepublish": "pnpm build"
41
+ "build": "pnpm exec tsc && pnpm exec host-build"
41
42
  }
42
43
  }
package/lib/host/index.js DELETED
@@ -1,103 +0,0 @@
1
- // src/host/index.ts
2
- import z from "@deepseek-ai/schemastery";
3
- import { launchEnvironmentOf } from "@deepseek-ai/dsh-launch-environment";
4
-
5
- // src/host/provider.ts
6
- import { WebError } from "@deepseek-ai/dsh-web";
7
- var TAILY_DEFAULT_URL = "https://api.tavily.com/search";
8
- var isAbortError = (error) => {
9
- return error instanceof DOMException && error.name === "AbortError";
10
- };
11
- var TailyWebSearchProvider = class {
12
- constructor(settings) {
13
- this.settings = settings;
14
- }
15
- settings;
16
- id = name;
17
- available() {
18
- const config = this.settings.get();
19
- if (!config.token) return false;
20
- if (config.token.trim().length === 0) return false;
21
- return true;
22
- }
23
- async search(request, signal) {
24
- const config = this.settings.get();
25
- let response;
26
- try {
27
- response = await fetch(config.url, {
28
- method: "POST",
29
- redirect: "follow",
30
- headers: {
31
- ...!config.keyless ? { authorization: `Bearer ${config.token}` } : { "X-Tavily-Access-Mode": "keyless" },
32
- "content-type": "application/json",
33
- "accept": "application/json",
34
- "user-agent": "deepseek-harness/0.0.1"
35
- },
36
- body: JSON.stringify({
37
- query: request.query,
38
- search_depth: config.searchDepth,
39
- chunks_per_source: config.chunksPerSource,
40
- max_results: request.maxResults,
41
- include_answer: true
42
- }),
43
- ...signal !== void 0 ? { signal } : {}
44
- });
45
- } catch (error) {
46
- if (isAbortError(error)) throw new WebError("Tavily search aborted", "WEB_ABORTED", { cause: error });
47
- throw new WebError(`Tavily search request failed: ${String(error)}`, "WEB_PROVIDER_ERROR", { cause: error });
48
- }
49
- if (!response.ok) {
50
- const status = response.status;
51
- let message = `Tavily API error (HTTP ${status})`;
52
- try {
53
- const error = (await response.json())?.detail?.error;
54
- if (error !== void 0 && error.length > 0) message = error;
55
- } catch (error) {
56
- if (isAbortError(error)) throw new WebError("Exa search aborted", "WEB_ABORTED", { cause: error });
57
- }
58
- throw new WebError(message, "WEB_PROVIDER_ERROR");
59
- }
60
- try {
61
- const payload = await response.json();
62
- return {
63
- content: payload.answer,
64
- sources: payload.results.map((r) => ({
65
- url: r.url,
66
- title: r.title,
67
- snippet: r.content
68
- })),
69
- truncated: true
70
- };
71
- } catch (error) {
72
- if (isAbortError(error)) throw new WebError("Taily search aborted", "WEB_ABORTED", { cause: error });
73
- throw new WebError(`Taily returned an unprocessable response body: ${String(error)}`, "WEB_PROVIDER_ERROR", { cause: error });
74
- }
75
- }
76
- };
77
-
78
- // src/host/index.ts
79
- var name = "@noirhare/web-search-tavily";
80
- var inject = ["settings", "web"];
81
- var Config2 = z.object({
82
- url: z.string().default(TAILY_DEFAULT_URL),
83
- token: z.string().min(2),
84
- keyless: z.boolean().default(false),
85
- searchDepth: z.union(["basic", "advanced", "fast", "ultra-fast"]),
86
- chunksPerSource: z.number().min(1).max(3)
87
- });
88
- var apply = (ctx, config) => {
89
- const settings = ctx.settings.register("noirhare-web-search-tavily", Config2, {
90
- base: {
91
- ...config,
92
- token: config.token ?? launchEnvironmentOf(ctx).get("TAVILY_API_KEY")?.value
93
- }
94
- });
95
- ctx.web.registerSearchProvider(new TailyWebSearchProvider(settings));
96
- };
97
- export {
98
- Config2 as Config,
99
- apply,
100
- inject,
101
- name
102
- };
103
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2hvc3QvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2hvc3QvcHJvdmlkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB6IGZyb20gXCJAZGVlcHNlZWstYWkvc2NoZW1hc3RlcnlcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJAZGVlcHNlZWstYWkvY29yZGlzXCI7XHJcbmltcG9ydCB7IGxhdW5jaEVudmlyb25tZW50T2YgfSBmcm9tIFwiQGRlZXBzZWVrLWFpL2RzaC1sYXVuY2gtZW52aXJvbm1lbnRcIjtcclxuXHJcbmltcG9ydCB7IFRBSUxZX0RFRkFVTFRfVVJMLCBUYWlseVdlYlNlYXJjaFByb3ZpZGVyIH0gZnJvbSBcIi4vcHJvdmlkZXJcIjtcclxuXHJcbmV4cG9ydCB0eXBlIENvbmZpZyA9IHtcclxuICAgIHVybDogc3RyaW5nO1xyXG4gICAgdG9rZW4/OiBzdHJpbmc7XHJcbiAgICBrZXlsZXNzOiBib29sZWFuO1xyXG5cclxuICAgIHNlYXJjaERlcHRoPzogXCJiYXNpY1wiIHwgXCJhZHZhbmNlZFwiIHwgXCJmYXN0XCIgfCBcInVsdHJhLWZhc3RcIjtcclxuICAgIGNodW5rc1BlclNvdXJjZT86IG51bWJlcjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBuYW1lID0gXCJAbm9pcmhhcmUvd2ViLXNlYXJjaC10YXZpbHlcIjtcclxuZXhwb3J0IGNvbnN0IGluamVjdCA9IFtcInNldHRpbmdzXCIsIFwid2ViXCJdO1xyXG5leHBvcnQgY29uc3QgQ29uZmlnOiB6PENvbmZpZz4gPSB6Lm9iamVjdCh7XHJcbiAgICB1cmw6IHouc3RyaW5nKCkuZGVmYXVsdChUQUlMWV9ERUZBVUxUX1VSTCksXHJcbiAgICB0b2tlbjogei5zdHJpbmcoKS5taW4oMiksXHJcbiAgICBrZXlsZXNzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcclxuXHJcbiAgICBzZWFyY2hEZXB0aDogei51bmlvbihbXCJiYXNpY1wiLCBcImFkdmFuY2VkXCIsIFwiZmFzdFwiLCBcInVsdHJhLWZhc3RcIl0gYXMgY29uc3QpLFxyXG4gICAgY2h1bmtzUGVyU291cmNlOiB6Lm51bWJlcigpLm1pbigxKS5tYXgoMyksXHJcbn0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFwcGx5ID0gKGN0eDogQ29udGV4dCwgY29uZmlnOiBDb25maWcpID0+IHtcclxuICAgIGNvbnN0IHNldHRpbmdzID0gY3R4LnNldHRpbmdzLnJlZ2lzdGVyKFwibm9pcmhhcmUtd2ViLXNlYXJjaC10YXZpbHlcIiwgQ29uZmlnLCB7XHJcbiAgICAgICAgYmFzZToge1xyXG4gICAgICAgICAgICAuLi5jb25maWcsXHJcbiAgICAgICAgICAgIHRva2VuOiBjb25maWcudG9rZW4gPz8gbGF1bmNoRW52aXJvbm1lbnRPZihjdHgpLmdldChcIlRBVklMWV9BUElfS0VZXCIpPy52YWx1ZSxcclxuICAgICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgY3R4LndlYi5yZWdpc3RlclNlYXJjaFByb3ZpZGVyKG5ldyBUYWlseVdlYlNlYXJjaFByb3ZpZGVyKHNldHRpbmdzKSk7XHJcbn07XHJcbiIsICJpbXBvcnQgeyBXZWJFcnJvciwgV2ViU2VhcmNoUHJvdmlkZXIsIFdlYlNlYXJjaFJlcXVlc3QsIFdlYlNlYXJjaFJlc3VsdCB9IGZyb20gXCJAZGVlcHNlZWstYWkvZHNoLXdlYlwiO1xyXG5pbXBvcnQgeyBDb25maWcsIG5hbWUgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBTZXR0aW5nc1Njb3BlIH0gZnJvbSBcIkBkZWVwc2Vlay1haS9kc2gtc2V0dGluZ3NcIjtcclxuXHJcbnR5cGUgVGFpbHlTZWFyY2hSZXNwb25zZSA9IHtcclxuICAgIGFuc3dlcjogc3RyaW5nXHJcbiAgICByZXN1bHRzOiB7XHJcbiAgICAgICAgdGl0bGU6IHN0cmluZ1xyXG4gICAgICAgIHVybDogc3RyaW5nXHJcbiAgICAgICAgY29udGVudDogc3RyaW5nXHJcbiAgICB9W11cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBUQUlMWV9ERUZBVUxUX1VSTCA9IFwiaHR0cHM6Ly9hcGkudGF2aWx5LmNvbS9zZWFyY2hcIjtcclxuXHJcbmNvbnN0IGlzQWJvcnRFcnJvciA9IChlcnJvcjogdW5rbm93bikgPT4ge1xyXG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uICYmIGVycm9yLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiO1xyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIFRhaWx5V2ViU2VhcmNoUHJvdmlkZXIgaW1wbGVtZW50cyBXZWJTZWFyY2hQcm92aWRlciB7XHJcbiAgICByZWFkb25seSBpZCA9IG5hbWU7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgc2V0dGluZ3M6IFNldHRpbmdzU2NvcGU8Q29uZmlnPikgeyB9XHJcblxyXG4gICAgYXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuc2V0dGluZ3MuZ2V0KCk7XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLnRva2VuKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKGNvbmZpZy50b2tlbi50cmltKCkubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNlYXJjaChyZXF1ZXN0OiBXZWJTZWFyY2hSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8V2ViU2VhcmNoUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5zZXR0aW5ncy5nZXQoKTtcclxuXHJcbiAgICAgICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKGNvbmZpZy51cmwsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdDogXCJmb2xsb3dcIixcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi4oIWNvbmZpZy5rZXlsZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8geyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7Y29uZmlnLnRva2VufWAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHsgXCJYLVRhdmlseS1BY2Nlc3MtTW9kZVwiOiBcImtleWxlc3NcIiB9KSxcclxuICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBcImFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBcInVzZXItYWdlbnRcIjogXCJkZWVwc2Vlay1oYXJuZXNzLzAuMC4xXCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiByZXF1ZXN0LnF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaF9kZXB0aDogY29uZmlnLnNlYXJjaERlcHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGNodW5rc19wZXJfc291cmNlOiBjb25maWcuY2h1bmtzUGVyU291cmNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heF9yZXN1bHRzOiByZXF1ZXN0Lm1heFJlc3VsdHMsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9hbnN3ZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIC4uLnNpZ25hbCAhPT0gdW5kZWZpbmVkID8geyBzaWduYWwgfSA6IHt9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xyXG4gICAgICAgICAgICBpZiAoaXNBYm9ydEVycm9yKGVycm9yKSkgdGhyb3cgbmV3IFdlYkVycm9yKFwiVGF2aWx5IHNlYXJjaCBhYm9ydGVkXCIsIFwiV0VCX0FCT1JURURcIiwgeyBjYXVzZTogZXJyb3IgfSk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBXZWJFcnJvcihgVGF2aWx5IHNlYXJjaCByZXF1ZXN0IGZhaWxlZDogJHtTdHJpbmcoZXJyb3IpfWAsIFwiV0VCX1BST1ZJREVSX0VSUk9SXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XHJcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gYFRhdmlseSBBUEkgZXJyb3IgKEhUVFAgJHtzdGF0dXN9KWA7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IChhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgeyBkZXRhaWw/OiB7IGVycm9yPzogc3RyaW5nIH0gfSk/LmRldGFpbD8uZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBlcnJvci5sZW5ndGggPiAwKSBtZXNzYWdlID0gZXJyb3I7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNBYm9ydEVycm9yKGVycm9yKSkgdGhyb3cgbmV3IFdlYkVycm9yKFwiRXhhIHNlYXJjaCBhYm9ydGVkXCIsIFwiV0VCX0FCT1JURURcIiwgeyBjYXVzZTogZXJyb3IgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgbmV3IFdlYkVycm9yKG1lc3NhZ2UsIFwiV0VCX1BST1ZJREVSX0VSUk9SXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBUYWlseVNlYXJjaFJlc3BvbnNlO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgY29udGVudDogcGF5bG9hZC5hbnN3ZXIsXHJcbiAgICAgICAgICAgICAgICBzb3VyY2VzOiBwYXlsb2FkLnJlc3VsdHMubWFwKChyKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogci51cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHIudGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgc25pcHBldDogci5jb250ZW50LFxyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICAgICAgdHJ1bmNhdGVkOiB0cnVlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Fib3J0RXJyb3IoZXJyb3IpKSB0aHJvdyBuZXcgV2ViRXJyb3IoXCJUYWlseSBzZWFyY2ggYWJvcnRlZFwiLCBcIldFQl9BQk9SVEVEXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgV2ViRXJyb3IoYFRhaWx5IHJldHVybmVkIGFuIHVucHJvY2Vzc2FibGUgcmVzcG9uc2UgYm9keTogJHtTdHJpbmcoZXJyb3IpfWAsIFwiV0VCX1BST1ZJREVSX0VSUk9SXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsT0FBTyxPQUFPO0FBRWQsU0FBUywyQkFBMkI7OztBQ0ZwQyxTQUFTLGdCQUFzRTtBQWF4RSxJQUFNLG9CQUFvQjtBQUVqQyxJQUFNLGVBQWUsQ0FBQyxVQUFtQjtBQUNyQyxTQUFPLGlCQUFp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
@@ -1,11 +0,0 @@
1
- import { WebSearchProvider, WebSearchRequest, WebSearchResult } from "@deepseek-ai/dsh-web";
2
- import { Config } from ".";
3
- import { SettingsScope } from "@deepseek-ai/dsh-settings";
4
- export declare const TAILY_DEFAULT_URL = "https://api.tavily.com/search";
5
- export declare class TailyWebSearchProvider implements WebSearchProvider {
6
- readonly settings: SettingsScope<Config>;
7
- readonly id = "@noirhare/web-search-tavily";
8
- constructor(settings: SettingsScope<Config>);
9
- available(): boolean;
10
- search(request: WebSearchRequest, signal?: AbortSignal): Promise<WebSearchResult>;
11
- }