@noirhare/dsh-web-search-tavily 0.0.3 → 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 +8 -0
- package/cordis.patch.yml +2 -4
- package/lib/host.js +134 -0
- package/lib/{host → types}/index.d.ts +2 -2
- package/lib/types/provider.d.ts +14 -0
- package/package.json +21 -20
- package/lib/host/index.js +0 -104
- package/lib/host/provider.d.ts +0 -11
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
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+IDApIG1lc3NhZ2UgPSBlcnJvcjtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Fib3J0RXJyb3IoZXJyb3IpKSB0aHJvdyBuZXcgV2ViRXJyb3IoXCJFeGEgc2VhcmNoIGFib3J0ZWRcIiwgXCJXRUJfQUJPUlRFRFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgV2ViRXJyb3IobWVzc2FnZSwgXCJXRUJfUFJPVklERVJfRVJST1JcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgVGFpbHlTZWFyY2hSZXNwb25zZTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHBheWxvYWQuYW5zd2VyLFxyXG4gICAgICAgICAgICAgICAgc291cmNlczogcGF5bG9hZC5yZXN1bHRzLm1hcCgocikgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IHIudXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiByLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHIuY29udGVudCxcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICAgIHRydW5jYXRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xyXG4gICAgICAgICAgICBpZiAoaXNBYm9ydEVycm9yKGVycm9yKSkgdGhyb3cgbmV3IFdlYkVycm9yKFwiVGFpbHkgc2VhcmNoIGFib3J0ZWRcIiwgXCJXRUJfQUJPUlRFRFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFdlYkVycm9yKGBUYWlseSByZXR1cm5lZCBhbiB1bnByb2Nlc3NhYmxlIHJlc3BvbnNlIGJvZHk6ICR7Zm9ybWF0RXJyb3IoZXJyb3IpfWAsIFwiV0VCX1BST1ZJREVSX0VSUk9SXCIsIHtcclxuICAgICAgICAgICAgICAgIGNhdXNlOiBlcnJvcixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFJQSxPQUFPLE9BQU87QUFDZCxTQUFTLDJCQUEyQjs7O0FDSHBDLFNBQVMsZ0JBQXNFO0FBWXhFLElBQU0sb0JBQW9CO0FBRWpDLElBQU0sZUFBZSxDQUFDLFVBQW1CO0FBQ3JDLFNBQU8saUJBQWlCLGdCQUFnQixNQUFNLFNBQVM7QUFDM0Q7QUFFQSxJQUFNLGNBQWMsQ0FBQyxVQUFtQjtBQUNwQyxNQUFJLEVBQUUsaUJBQWlCLE9BQVEsUUFBTyxPQUFPLEtBQUs7QUFFbEQsTUFBSSxTQUFTO0FBQ2IsUUFBTSxPQUFPLENBQUMsTUFBZTtBQUN6QixRQUFJLENBQUMsRUFBRztBQUVSLFFBQUksRUFBRSxpQkFBaUIsUUFBUTtBQUMzQixnQkFBVSxPQUFPLEtBQUs7QUFDdEI7QUFBQSxJQUNKO0FBRUEsUUFBSSxpQkFBaUIsZ0JBQWdCO0FBQ2pDLGdCQUFVO0FBQ1YsZUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLE9BQU8sUUFBUSxLQUFLO0FBQzFDLGNBQU1BLEtBQUksTUFBTSxPQUFPLENBQUM7QUFDeEIsYUFBS0EsRUFBQztBQUNOLFlBQUksTUFBTSxNQUFNLE9BQU8sU0FBUyxHQUFHO0FBQy9CLG9CQUFVO0FBQUEsUUFDZDtBQUFBLE1BQ0o7QUFDQSxnQkFBVTtBQUNWO0FBQUEsSUFDSjtBQUVBLGNBQVUsR0FBRyxNQUFNLElBQUksS0FBSyxNQUFNLE9BQU87QUFDekMsUUFBSSxNQUFNLE9BQU87QUFDYixnQkFBVTtBQUNWLFdBQUssTUFBTSxLQUFLO0FBQ2hCLGdCQUFVO0FBQUEsSUFDZDtBQUFBLEVBQ0o7QUFDSjtBQUVPLElBQU0sMEJBQU4sTUFBMkQ7QUFBQSxFQUc5RCxZQUFxQixVQUE2QjtBQUE3QjtBQUFBLEVBQThCO0FBQUEsRUFBOUI7QUFBQSxFQUZyQixLQUFhO0FBQUEsRUFJYixZQUFxQjtBQUNqQixVQUFNLFNBQVMsS0FBSyxTQUFTLElBQUk7QUFFakMsUUFBSSxDQUFDLE9BQU8sTUFBTyxRQUFPO0FBQzFCLFFBQUksT0FBTyxNQUFNLEtBQUssRUFBRSxXQUFXLEVBQUcsUUFBTztBQUU3QyxXQUFPO0FBQUEsRUFDWDtBQUFBLEVBRUEsTUFBTSxPQUFPLFNBQTJCLFFBQWdEO0FBQ3BGLFVBQU0sU0FBUyxLQUFLLFNBQVMsSUFBSTtBQUVqQyxRQUFJO0FBQ0osUUFBSTtBQUNBLGlCQUFXLE1BQU0sTUFBTSxPQUFPLEtBQUs7QUFBQSxRQUMvQixRQUFRO0FBQUEsUUFDUixVQUFVO0FBQUEsUUFDVixTQUFTO0FBQUEsVUFDTCxHQUFJLENBQUMsT0FBTyxVQUFVLEVBQUUsZUFBZSxVQUFVLE9BQU8sS0FBSyxHQUFHLElBQUksRUFBRSx3QkFBd0IsVUFBVTtBQUFBLFVBQ3hHLGdCQUFnQjtBQUFBLFVBQ2hCLFFBQVE7QUFBQSxVQUNSLGNBQWM7QUFBQSxRQUNsQjtBQUFBLFFBQ0EsTUFBTSxLQUFLLFVBQVU7QUFBQSxVQUNqQixPQUFPLFFBQVE7QUFBQSxVQUNmLGNBQWMsT0FBTztBQUFBLFVBQ3JCLG1CQUFtQixPQUFPO0FBQUEsVUFDMUIsYUFBYSxRQUFRO0FBQUEsVUFDckIsZ0JBQWdCO0FBQUEsUUFDcEIsQ0FBQztBQUFBLFFBQ0QsR0FBSSxXQUFXLFNBQVksRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLE1BQzdDLENBQUM7QUFBQSxJQUNMLFNBQVMsT0FBZ0I7QUFDckIsVUFBSSxhQUFhLEtBQUssRUFBRyxPQUFNLElBQUksU0FBUyx5QkFBeUIsZUFBZSxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQ3BHLFlBQU0sSUFBSSxTQUFTLGlDQUFpQyxZQUFZLEtBQUssQ0FBQyxJQUFJLHNCQUFzQixFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQUEsSUFDcEg7QUFFQSxRQUFJLENBQUMsU0FBUyxJQUFJO0FBQ2QsWUFBTSxTQUFTLFNBQVM7QUFDeEIsVUFBSSxVQUFVLDBCQUEwQixNQUFNO0FBQzlDLFVBQUk7QUFDQSxjQUFNLFNBQVUsTUFBTSxTQUFTLEtBQUssSUFBd0MsUUFBUTtBQUNwRixZQUFJLFVBQVUsVUFBYSxNQUFNLFNBQVMsRUFBRyxXQUFVO0FBQUEsTUFDM0QsU0FBUyxPQUFnQjtBQUNyQixZQUFJLGFBQWEsS0FBSyxFQUFHLE9BQU0sSUFBSSxTQUFTLHNCQUFzQixlQUFlLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFBQSxNQUNyRztBQUNBLFlBQU0sSUFBSSxTQUFTLFNBQVMsb0JBQW9CO0FBQUEsSUFDcEQ7QUFFQSxRQUFJO0FBQ0EsWUFBTSxVQUFXLE1BQU0sU0FBUyxLQUFLO0FBQ3JDLGFBQU87QUFBQSxRQUNILFNBQVMsUUFBUTtBQUFBLFFBQ2pCLFNBQVMsUUFBUSxRQUFRLElBQUksQ0FBQyxPQUFPO0FBQUEsVUFDakMsS0FBSyxFQUFFO0FBQUEsVUFDUCxPQUFPLEVBQUU7QUFBQSxVQUNULFNBQVMsRUFBRTtBQUFBLFFBQ2YsRUFBRTtBQUFBLFFBQ0YsV0FBVztBQUFBLE1BQ2Y7QUFBQSxJQUNKLFNBQVMsT0FBZ0I7QUFDckIsVUFBSSxhQUFhLEtBQUssRUFBRyxPQUFNLElBQUksU0FBUyx3QkFBd0IsZUFBZSxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQ25HLFlBQU0sSUFBSSxTQUFTLGtEQUFrRCxZQUFZLEtBQUssQ0FBQyxJQUFJLHNCQUFzQjtBQUFBLFFBQzdHLE9BQU87QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNMO0FBQUEsRUFDSjtBQUNKOzs7QUQ3R08sSUFBTSxPQUFPO0FBRWIsSUFBTSxTQUFTLENBQUMsWUFBWSxLQUFLO0FBRWpDLElBQU0sU0FBb0IsRUFBRSxPQUFPO0FBQUEsRUFDdEMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLGlCQUFpQjtBQUFBLEVBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDO0FBQUEsRUFDdkIsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEtBQUs7QUFBQSxFQUVsQyxhQUFhLEVBQUUsTUFBTSxDQUFDLFNBQVMsWUFBWSxRQUFRLFlBQVksQ0FBVTtBQUFBLEVBQ3pFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDNUMsQ0FBQztBQUVNLElBQU0sUUFBUSxDQUFDLEtBQWMsV0FBbUI7QUFDbkQsUUFBTSxXQUFXLElBQUksU0FBUyxTQUFTLGtDQUFrQyxRQUFRO0FBQUEsSUFDN0UsTUFBTTtBQUFBLE1BQ0YsR0FBRztBQUFBLE1BQ0gsT0FBTyxPQUFPLFNBQVMsb0JBQW9CLEdBQUcsRUFBRSxJQUFJLGdCQUFnQixHQUFHO0FBQUEsSUFDM0U7QUFBQSxFQUNKLENBQUM7QUFFRCxNQUFJLElBQUksdUJBQXVCLElBQUksd0JBQXdCLFFBQVEsQ0FBQztBQUN4RTsiLAogICJuYW1lcyI6IFsiZSJdCn0K
|
|
@@ -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
|
|
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
|
|
12
|
-
"directory": "
|
|
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
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"./package.json": "./package.json"
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"host-build-script": "^0.0.1"
|
|
25
27
|
},
|
|
26
28
|
"peerDependencies": {
|
|
27
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
28
|
-
"@deepseek-ai/schemastery": "^3.18.
|
|
29
|
-
"@deepseek-ai/dsh-
|
|
30
|
-
"@deepseek-ai/dsh-
|
|
31
|
-
"@deepseek-ai/dsh-web": "^0.1.
|
|
29
|
+
"@deepseek-ai/cordis": "^4.0.2",
|
|
30
|
+
"@deepseek-ai/schemastery": "^3.18.2",
|
|
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": "tsc
|
|
40
|
-
"prepublish": "pnpm build"
|
|
41
|
+
"build": "pnpm exec tsc && pnpm exec host-build"
|
|
41
42
|
}
|
|
42
43
|
}
|
package/lib/host/index.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
// src/host/index.ts
|
|
2
|
-
import z from "@deepseek-ai/schemastery";
|
|
3
|
-
import { launchEnvironmentOf } from "@deepseek-ai/dsh-launch-environment";
|
|
4
|
-
import { settingsNamespace } from "@deepseek-ai/dsh-settings";
|
|
5
|
-
|
|
6
|
-
// src/host/provider.ts
|
|
7
|
-
import { WebError } from "@deepseek-ai/dsh-web";
|
|
8
|
-
var TAILY_DEFAULT_URL = "https://api.tavily.com/search";
|
|
9
|
-
var isAbortError = (error) => {
|
|
10
|
-
return error instanceof DOMException && error.name === "AbortError";
|
|
11
|
-
};
|
|
12
|
-
var TailyWebSearchProvider = class {
|
|
13
|
-
constructor(settings) {
|
|
14
|
-
this.settings = settings;
|
|
15
|
-
}
|
|
16
|
-
settings;
|
|
17
|
-
id = name;
|
|
18
|
-
available() {
|
|
19
|
-
const config = this.settings.get();
|
|
20
|
-
if (!config.token) return false;
|
|
21
|
-
if (config.token.trim().length === 0) return false;
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
async search(request, signal) {
|
|
25
|
-
const config = this.settings.get();
|
|
26
|
-
let response;
|
|
27
|
-
try {
|
|
28
|
-
response = await fetch(config.url, {
|
|
29
|
-
method: "POST",
|
|
30
|
-
redirect: "follow",
|
|
31
|
-
headers: {
|
|
32
|
-
...!config.keyless ? { authorization: `Bearer ${config.token}` } : { "X-Tavily-Access-Mode": "keyless" },
|
|
33
|
-
"content-type": "application/json",
|
|
34
|
-
"accept": "application/json",
|
|
35
|
-
"user-agent": "deepseek-harness/0.0.1"
|
|
36
|
-
},
|
|
37
|
-
body: JSON.stringify({
|
|
38
|
-
query: request.query,
|
|
39
|
-
search_depth: config.searchDepth,
|
|
40
|
-
chunks_per_source: config.chunksPerSource,
|
|
41
|
-
max_results: request.maxResults,
|
|
42
|
-
include_answer: true
|
|
43
|
-
}),
|
|
44
|
-
...signal !== void 0 ? { signal } : {}
|
|
45
|
-
});
|
|
46
|
-
} catch (error) {
|
|
47
|
-
if (isAbortError(error)) throw new WebError("Tavily search aborted", "WEB_ABORTED", { cause: error });
|
|
48
|
-
throw new WebError(`Tavily search request failed: ${String(error)}`, "WEB_PROVIDER_ERROR", { cause: error });
|
|
49
|
-
}
|
|
50
|
-
if (!response.ok) {
|
|
51
|
-
const status = response.status;
|
|
52
|
-
let message = `Tavily API error (HTTP ${status})`;
|
|
53
|
-
try {
|
|
54
|
-
const error = (await response.json())?.detail?.error;
|
|
55
|
-
if (error !== void 0 && error.length > 0) message = error;
|
|
56
|
-
} catch (error) {
|
|
57
|
-
if (isAbortError(error)) throw new WebError("Exa search aborted", "WEB_ABORTED", { cause: error });
|
|
58
|
-
}
|
|
59
|
-
throw new WebError(message, "WEB_PROVIDER_ERROR");
|
|
60
|
-
}
|
|
61
|
-
try {
|
|
62
|
-
const payload = await response.json();
|
|
63
|
-
return {
|
|
64
|
-
content: payload.answer,
|
|
65
|
-
sources: payload.results.map((r) => ({
|
|
66
|
-
url: r.url,
|
|
67
|
-
title: r.title,
|
|
68
|
-
snippet: r.content
|
|
69
|
-
})),
|
|
70
|
-
truncated: true
|
|
71
|
-
};
|
|
72
|
-
} catch (error) {
|
|
73
|
-
if (isAbortError(error)) throw new WebError("Taily search aborted", "WEB_ABORTED", { cause: error });
|
|
74
|
-
throw new WebError(`Taily returned an unprocessable response body: ${String(error)}`, "WEB_PROVIDER_ERROR", { cause: error });
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
// src/host/index.ts
|
|
80
|
-
var name = "@noirhare/web-search-tavily";
|
|
81
|
-
var inject = ["settings", "web"];
|
|
82
|
-
var Config2 = z.object({
|
|
83
|
-
url: z.string().default(TAILY_DEFAULT_URL),
|
|
84
|
-
token: z.string().min(2),
|
|
85
|
-
keyless: z.boolean().default(false),
|
|
86
|
-
searchDepth: z.union(["basic", "advanced", "fast", "ultra-fast"]),
|
|
87
|
-
chunksPerSource: z.number().min(1).max(3)
|
|
88
|
-
});
|
|
89
|
-
var apply = (ctx, config) => {
|
|
90
|
-
const settings = ctx.settings.register(settingsNamespace("noirhare-web-search-tavily"), Config2, {
|
|
91
|
-
base: {
|
|
92
|
-
...config,
|
|
93
|
-
token: config.token ?? launchEnvironmentOf(ctx).get("TAVILY_API_KEY")?.value
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
ctx.web.registerSearchProvider(new TailyWebSearchProvider(settings));
|
|
97
|
-
};
|
|
98
|
-
export {
|
|
99
|
-
Config2 as Config,
|
|
100
|
-
apply,
|
|
101
|
-
inject,
|
|
102
|
-
name
|
|
103
|
-
};
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2hvc3QvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2hvc3QvcHJvdmlkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB6IGZyb20gXCJAZGVlcHNlZWstYWkvc2NoZW1hc3RlcnlcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJAZGVlcHNlZWstYWkvY29yZGlzXCI7XHJcbmltcG9ydCB7IGxhdW5jaEVudmlyb25tZW50T2YgfSBmcm9tIFwiQGRlZXBzZWVrLWFpL2RzaC1sYXVuY2gtZW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHsgc2V0dGluZ3NOYW1lc3BhY2UgfSBmcm9tIFwiQGRlZXBzZWVrLWFpL2RzaC1zZXR0aW5nc1wiO1xyXG5cclxuaW1wb3J0IHsgVEFJTFlfREVGQVVMVF9VUkwsIFRhaWx5V2ViU2VhcmNoUHJvdmlkZXIgfSBmcm9tIFwiLi9wcm92aWRlclwiO1xyXG5cclxuZXhwb3J0IHR5cGUgQ29uZmlnID0ge1xyXG4gICAgdXJsOiBzdHJpbmdcclxuICAgIHRva2VuPzogc3RyaW5nXHJcbiAgICBrZXlsZXNzOiBib29sZWFuXHJcblxyXG4gICAgc2VhcmNoRGVwdGg/OiBcImJhc2ljXCIgfCBcImFkdmFuY2VkXCIgfCBcImZhc3RcIiB8IFwidWx0cmEtZmFzdFwiXHJcbiAgICBjaHVua3NQZXJTb3VyY2U/OiBudW1iZXJcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBuYW1lID0gXCJAbm9pcmhhcmUvd2ViLXNlYXJjaC10YXZpbHlcIjtcclxuZXhwb3J0IGNvbnN0IGluamVjdCA9IFtcInNldHRpbmdzXCIsIFwid2ViXCJdO1xyXG5leHBvcnQgY29uc3QgQ29uZmlnOiB6PENvbmZpZz4gPSB6Lm9iamVjdCh7XHJcbiAgICB1cmw6IHouc3RyaW5nKCkuZGVmYXVsdChUQUlMWV9ERUZBVUxUX1VSTCksXHJcbiAgICB0b2tlbjogei5zdHJpbmcoKS5taW4oMiksXHJcbiAgICBrZXlsZXNzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcclxuXHJcbiAgICBzZWFyY2hEZXB0aDogei51bmlvbihbXCJiYXNpY1wiLCBcImFkdmFuY2VkXCIsIFwiZmFzdFwiLCBcInVsdHJhLWZhc3RcIl0gYXMgY29uc3QpLFxyXG4gICAgY2h1bmtzUGVyU291cmNlOiB6Lm51bWJlcigpLm1pbigxKS5tYXgoMyksXHJcbn0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFwcGx5ID0gKGN0eDogQ29udGV4dCwgY29uZmlnOiBDb25maWcpID0+IHtcclxuICAgIGNvbnN0IHNldHRpbmdzID0gY3R4LnNldHRpbmdzLnJlZ2lzdGVyKHNldHRpbmdzTmFtZXNwYWNlKFwibm9pcmhhcmUtd2ViLXNlYXJjaC10YXZpbHlcIiksIENvbmZpZywge1xyXG4gICAgICAgIGJhc2U6IHtcclxuICAgICAgICAgICAgLi4uY29uZmlnLFxyXG4gICAgICAgICAgICB0b2tlbjogY29uZmlnLnRva2VuID8/IGxhdW5jaEVudmlyb25tZW50T2YoY3R4KS5nZXQoXCJUQVZJTFlfQVBJX0tFWVwiKT8udmFsdWUsXHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGN0eC53ZWIucmVnaXN0ZXJTZWFyY2hQcm92aWRlcihuZXcgVGFpbHlXZWJTZWFyY2hQcm92aWRlcihzZXR0aW5ncykpO1xyXG59O1xyXG4iLCAiaW1wb3J0IHsgV2ViRXJyb3IsIFdlYlNlYXJjaFByb3ZpZGVyLCBXZWJTZWFyY2hSZXF1ZXN0LCBXZWJTZWFyY2hSZXN1bHQgfSBmcm9tIFwiQGRlZXBzZWVrLWFpL2RzaC13ZWJcIjtcclxuaW1wb3J0IHsgQ29uZmlnLCBuYW1lIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgU2V0dGluZ3NTY29wZSB9IGZyb20gXCJAZGVlcHNlZWstYWkvZHNoLXNldHRpbmdzXCI7XHJcblxyXG50eXBlIFRhaWx5U2VhcmNoUmVzcG9uc2UgPSB7XHJcbiAgICBhbnN3ZXI6IHN0cmluZ1xyXG4gICAgcmVzdWx0czoge1xyXG4gICAgICAgIHRpdGxlOiBzdHJpbmdcclxuICAgICAgICB1cmw6IHN0cmluZ1xyXG4gICAgICAgIGNvbnRlbnQ6IHN0cmluZ1xyXG4gICAgfVtdXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgVEFJTFlfREVGQVVMVF9VUkwgPSBcImh0dHBzOi8vYXBpLnRhdmlseS5jb20vc2VhcmNoXCI7XHJcblxyXG5jb25zdCBpc0Fib3J0RXJyb3IgPSAoZXJyb3I6IHVua25vd24pID0+IHtcclxuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiAmJiBlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIjtcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBUYWlseVdlYlNlYXJjaFByb3ZpZGVyIGltcGxlbWVudHMgV2ViU2VhcmNoUHJvdmlkZXIge1xyXG4gICAgcmVhZG9ubHkgaWQgPSBuYW1lO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHNldHRpbmdzOiBTZXR0aW5nc1Njb3BlPENvbmZpZz4pIHsgfVxyXG5cclxuICAgIGF2YWlsYWJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnNldHRpbmdzLmdldCgpO1xyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy50b2tlbikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChjb25maWcudG9rZW4udHJpbSgpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZWFyY2gocmVxdWVzdDogV2ViU2VhcmNoUmVxdWVzdCwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFdlYlNlYXJjaFJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuc2V0dGluZ3MuZ2V0KCk7XHJcblxyXG4gICAgICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChjb25maWcudXJsLCB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgcmVkaXJlY3Q6IFwiZm9sbG93XCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKCFjb25maWcua2V5bGVzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy50b2tlbn1gIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiB7IFwiWC1UYXZpbHktQWNjZXNzLU1vZGVcIjogXCJrZXlsZXNzXCIgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJhY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2VyLWFnZW50XCI6IFwiZGVlcHNlZWstaGFybmVzcy8wLjAuMVwiLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcmVxdWVzdC5xdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hfZGVwdGg6IGNvbmZpZy5zZWFyY2hEZXB0aCxcclxuICAgICAgICAgICAgICAgICAgICBjaHVua3NfcGVyX3NvdXJjZTogY29uZmlnLmNodW5rc1BlclNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgICBtYXhfcmVzdWx0czogcmVxdWVzdC5tYXhSZXN1bHRzLFxyXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfYW5zd2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAuLi5zaWduYWwgIT09IHVuZGVmaW5lZCA/IHsgc2lnbmFsIH0gOiB7fSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcclxuICAgICAgICAgICAgaWYgKGlzQWJvcnRFcnJvcihlcnJvcikpIHRocm93IG5ldyBXZWJFcnJvcihcIlRhdmlseSBzZWFyY2ggYWJvcnRlZFwiLCBcIldFQl9BQk9SVEVEXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgV2ViRXJyb3IoYFRhdmlseSBzZWFyY2ggcmVxdWVzdCBmYWlsZWQ6ICR7U3RyaW5nKGVycm9yKX1gLCBcIldFQl9QUk9WSURFUl9FUlJPUlwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xyXG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IGBUYXZpbHkgQVBJIGVycm9yIChIVFRQICR7c3RhdHVzfSlgO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHsgZGV0YWlsPzogeyBlcnJvcj86IHN0cmluZyB9IH0pPy5kZXRhaWw/LmVycm9yO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQgJiYgZXJyb3IubGVuZ3RoID4gMCkgbWVzc2FnZSA9IGVycm9yO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQWJvcnRFcnJvcihlcnJvcikpIHRocm93IG5ldyBXZWJFcnJvcihcIkV4YSBzZWFyY2ggYWJvcnRlZFwiLCBcIldFQl9BQk9SVEVEXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBXZWJFcnJvcihtZXNzYWdlLCBcIldFQl9QUk9WSURFUl9FUlJPUlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgVGFpbHlTZWFyY2hSZXNwb25zZTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHBheWxvYWQuYW5zd2VyLFxyXG4gICAgICAgICAgICAgICAgc291cmNlczogcGF5bG9hZC5yZXN1bHRzLm1hcCgocikgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IHIudXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiByLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHIuY29udGVudCxcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICAgIHRydW5jYXRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xyXG4gICAgICAgICAgICBpZiAoaXNBYm9ydEVycm9yKGVycm9yKSkgdGhyb3cgbmV3IFdlYkVycm9yKFwiVGFpbHkgc2VhcmNoIGFib3J0ZWRcIiwgXCJXRUJfQUJPUlRFRFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFdlYkVycm9yKGBUYWlseSByZXR1cm5lZCBhbiB1bnByb2Nlc3NhYmxlIHJlc3BvbnNlIGJvZHk6ICR7U3RyaW5nKGVycm9yKX1gLCBcIldFQl9QUk9WSURFUl9FUlJPUlwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLE9BQU8sT0FBTztBQUVkLFNBQVMsMkJBQTJC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
|
package/lib/host/provider.d.ts
DELETED
|
@@ -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
|
-
}
|