@noirhare/dsh-web-search-tavily 0.0.1 → 0.0.3

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.
@@ -0,0 +1,13 @@
1
+ import z from "@deepseek-ai/schemastery";
2
+ import { Context } from "@deepseek-ai/cordis";
3
+ export type Config = {
4
+ url: string;
5
+ token?: string;
6
+ keyless: boolean;
7
+ searchDepth?: "basic" | "advanced" | "fast" | "ultra-fast";
8
+ chunksPerSource?: number;
9
+ };
10
+ export declare const name = "@noirhare/web-search-tavily";
11
+ export declare const inject: string[];
12
+ export declare const Config: z<Config>;
13
+ export declare const apply: (ctx: Context, config: Config) => void;
package/lib/host/index.js CHANGED
@@ -1,58 +1,60 @@
1
1
  // src/host/index.ts
2
2
  import z from "@deepseek-ai/schemastery";
3
+ import { launchEnvironmentOf } from "@deepseek-ai/dsh-launch-environment";
4
+ import { settingsNamespace } from "@deepseek-ai/dsh-settings";
3
5
 
4
6
  // src/host/provider.ts
5
7
  import { WebError } from "@deepseek-ai/dsh-web";
6
- var TAVILY_PROVIDER_ID = "tavily";
7
- var TAVILY_DEFAULT_URL = "https://api.tavily.com/search";
8
- var USER_AGENT = "deepseek-harness/0.0.1";
9
- var TavilySearchProvider = class {
10
- constructor(options) {
11
- this.options = options;
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;
12
15
  }
13
- options;
14
- id = TAVILY_PROVIDER_ID;
16
+ settings;
17
+ id = name;
15
18
  available() {
16
- return this.options.apiKey.length > 0 && URL.canParse(this.options.url);
19
+ const config = this.settings.get();
20
+ if (!config.token) return false;
21
+ if (config.token.trim().length === 0) return false;
22
+ return true;
17
23
  }
18
24
  async search(request, signal) {
19
- const maxResults = request.maxResults ?? this.options.maxResults;
25
+ const config = this.settings.get();
20
26
  let response;
21
27
  try {
22
- response = await fetch(this.options.url, {
28
+ response = await fetch(config.url, {
23
29
  method: "POST",
24
- redirect: "error",
30
+ redirect: "follow",
25
31
  headers: {
26
- "authorization": `Bearer ${this.options.apiKey}`,
32
+ ...!config.keyless ? { authorization: `Bearer ${config.token}` } : { "X-Tavily-Access-Mode": "keyless" },
27
33
  "content-type": "application/json",
28
34
  "accept": "application/json",
29
- "user-agent": USER_AGENT
35
+ "user-agent": "deepseek-harness/0.0.1"
30
36
  },
31
37
  body: JSON.stringify({
32
38
  query: request.query,
33
- search_depth: this.options.searchDepth,
34
- chunks_per_source: this.options.chunksPerSource,
35
- max_results: maxResults,
39
+ search_depth: config.searchDepth,
40
+ chunks_per_source: config.chunksPerSource,
41
+ max_results: request.maxResults,
36
42
  include_answer: true
37
43
  }),
38
44
  ...signal !== void 0 ? { signal } : {}
39
45
  });
40
46
  } catch (error) {
41
- if (error instanceof DOMException && error.name === "AbortError") {
42
- throw new WebError("Tavily search aborted", "WEB_ABORTED", { cause: error });
43
- }
47
+ if (isAbortError(error)) throw new WebError("Tavily search aborted", "WEB_ABORTED", { cause: error });
44
48
  throw new WebError(`Tavily search request failed: ${String(error)}`, "WEB_PROVIDER_ERROR", { cause: error });
45
49
  }
46
50
  if (!response.ok) {
47
51
  const status = response.status;
48
52
  let message = `Tavily API error (HTTP ${status})`;
49
53
  try {
50
- const error = (await response.json()).detail?.error;
54
+ const error = (await response.json())?.detail?.error;
51
55
  if (error !== void 0 && error.length > 0) message = error;
52
56
  } catch (error) {
53
- if (error instanceof DOMException && error.name === "AbortError") {
54
- throw new WebError("Tavily search aborted", "WEB_ABORTED", { cause: error });
55
- }
57
+ if (isAbortError(error)) throw new WebError("Exa search aborted", "WEB_ABORTED", { cause: error });
56
58
  }
57
59
  throw new WebError(message, "WEB_PROVIDER_ERROR");
58
60
  }
@@ -68,40 +70,35 @@ var TavilySearchProvider = class {
68
70
  truncated: true
69
71
  };
70
72
  } catch (error) {
71
- if (error instanceof DOMException && error.name === "AbortError") {
72
- throw new WebError("Tavily search aborted", "WEB_ABORTED", { cause: error });
73
- }
74
- throw new WebError(`Tavily returned an unprocessable response body: ${String(error)}`, "WEB_PROVIDER_ERROR", { cause: 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
75
  }
76
76
  }
77
77
  };
78
78
 
79
79
  // src/host/index.ts
80
- import { launchEnvironmentOf } from "@deepseek-ai/dsh-launch-environment";
81
- var name = "web-search-tavily";
82
- var inject = ["web"];
83
- var Config = z.object({
84
- apiKey: z.string(),
85
- url: z.string(),
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
86
  searchDepth: z.union(["basic", "advanced", "fast", "ultra-fast"]),
87
- chunksPerSource: z.number(),
88
- maxResults: z.number()
87
+ chunksPerSource: z.number().min(1).max(3)
89
88
  });
90
- function apply(ctx, config) {
91
- ctx.web.registerSearchProvider(
92
- new TavilySearchProvider({
93
- apiKey: config.apiKey ?? launchEnvironmentOf(ctx).get("TAVILY_API_KEY")?.value ?? "",
94
- url: config.url ?? TAVILY_DEFAULT_URL,
95
- searchDepth: config.searchDepth,
96
- chunksPerSource: config.chunksPerSource,
97
- maxResults: config.maxResults
98
- })
99
- );
100
- }
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
+ };
101
98
  export {
102
- Config,
99
+ Config2 as Config,
103
100
  apply,
104
101
  inject,
105
102
  name
106
103
  };
107
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2hvc3QvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2hvc3QvcHJvdmlkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB6IGZyb20gXCJAZGVlcHNlZWstYWkvc2NoZW1hc3RlcnlcIjtcclxuXHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiQGRlZXBzZWVrLWFpL2NvcmRpc1wiO1xyXG5pbXBvcnQgeyBUQVZJTFlfREVGQVVMVF9VUkwsIFRhdmlseVNlYXJjaFByb3ZpZGVyIH0gZnJvbSBcIi4vcHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgbGF1bmNoRW52aXJvbm1lbnRPZiB9IGZyb20gXCJAZGVlcHNlZWstYWkvZHNoLWxhdW5jaC1lbnZpcm9ubWVudFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IG5hbWUgPSBcIndlYi1zZWFyY2gtdGF2aWx5XCI7XHJcbmV4cG9ydCBjb25zdCBpbmplY3QgPSBbXCJ3ZWJcIl07XHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcclxuICAgIGFwaUtleT86IHN0cmluZ1xyXG4gICAgdXJsPzogc3RyaW5nXHJcblxyXG4gICAgc2VhcmNoRGVwdGg/OiBcImJhc2ljXCIgfCBcImFkdmFuY2VkXCIgfCBcImZhc3RcIiB8IFwidWx0cmEtZmFzdFwiXHJcbiAgICBjaHVua3NQZXJTb3VyY2U/OiBudW1iZXJcclxuICAgIG1heFJlc3VsdHM/OiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IENvbmZpZzogejxDb25maWc+ID0gei5vYmplY3Qoe1xyXG4gICAgYXBpS2V5OiB6LnN0cmluZygpLFxyXG4gICAgdXJsOiB6LnN0cmluZygpLFxyXG5cclxuICAgIHNlYXJjaERlcHRoOiB6LnVuaW9uKFtcImJhc2ljXCIsIFwiYWR2YW5jZWRcIiwgXCJmYXN0XCIsIFwidWx0cmEtZmFzdFwiXSBhcyBjb25zdCksXHJcbiAgICBjaHVua3NQZXJTb3VyY2U6IHoubnVtYmVyKCksXHJcbiAgICBtYXhSZXN1bHRzOiB6Lm51bWJlcigpLFxyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhcHBseShjdHg6IENvbnRleHQsIGNvbmZpZzogQ29uZmlnKTogdm9pZCB7XHJcbiAgICBjdHgud2ViLnJlZ2lzdGVyU2VhcmNoUHJvdmlkZXIoXHJcbiAgICAgICAgbmV3IFRhdmlseVNlYXJjaFByb3ZpZGVyKHtcclxuICAgICAgICAgICAgYXBpS2V5OiBjb25maWcuYXBpS2V5ID8/IGxhdW5jaEVudmlyb25tZW50T2YoY3R4KS5nZXQoXCJUQVZJTFlfQVBJX0tFWVwiKT8udmFsdWUgPz8gXCJcIixcclxuICAgICAgICAgICAgdXJsOiBjb25maWcudXJsID8/IFRBVklMWV9ERUZBVUxUX1VSTCxcclxuICAgICAgICAgICAgc2VhcmNoRGVwdGg6IGNvbmZpZy5zZWFyY2hEZXB0aCxcclxuICAgICAgICAgICAgY2h1bmtzUGVyU291cmNlOiBjb25maWcuY2h1bmtzUGVyU291cmNlLFxyXG4gICAgICAgICAgICBtYXhSZXN1bHRzOiBjb25maWcubWF4UmVzdWx0cyxcclxuICAgICAgICB9KSxcclxuICAgICk7XHJcbn1cclxuIiwgImltcG9ydCB7IFdlYkVycm9yLCBXZWJTZWFyY2hQcm92aWRlciwgV2ViU2VhcmNoUmVxdWVzdCwgV2ViU2VhcmNoUmVzdWx0IH0gZnJvbSBcIkBkZWVwc2Vlay1haS9kc2gtd2ViXCI7XHJcbmltcG9ydCB0eXBlIHsgVGF2aWx5RXJyb3IsIFRhdmlseVNlYXJjaFJlc3BvbnNlIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBUQVZJTFlfUFJPVklERVJfSUQgPSBcInRhdmlseVwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRBVklMWV9ERUZBVUxUX1VSTCA9IFwiaHR0cHM6Ly9hcGkudGF2aWx5LmNvbS9zZWFyY2hcIjtcclxuXHJcbmNvbnN0IFVTRVJfQUdFTlQgPSBcImRlZXBzZWVrLWhhcm5lc3MvMC4wLjFcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGF2aWx5U2VhcmNoUHJvdmlkZXJPcHRpb25zIHtcclxuICAgIGFwaUtleTogc3RyaW5nXHJcbiAgICB1cmw6IHN0cmluZ1xyXG4gICAgc2VhcmNoRGVwdGg/OiBcImJhc2ljXCIgfCBcImFkdmFuY2VkXCIgfCBcImZhc3RcIiB8IFwidWx0cmEtZmFzdFwiXHJcbiAgICBjaHVua3NQZXJTb3VyY2U/OiBudW1iZXJcclxuICAgIG1heFJlc3VsdHM/OiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRhdmlseVNlYXJjaFByb3ZpZGVyIGltcGxlbWVudHMgV2ViU2VhcmNoUHJvdmlkZXIge1xyXG4gICAgcmVhZG9ubHkgaWQgPSBUQVZJTFlfUFJPVklERVJfSUQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBUYXZpbHlTZWFyY2hQcm92aWRlck9wdGlvbnMpIHt9XHJcblxyXG4gICAgYXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXBpS2V5Lmxlbmd0aCA+IDAgJiYgVVJMLmNhblBhcnNlKHRoaXMub3B0aW9ucy51cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNlYXJjaChyZXF1ZXN0OiBXZWJTZWFyY2hSZXF1ZXN0LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8V2ViU2VhcmNoUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgbWF4UmVzdWx0cyA9IHJlcXVlc3QubWF4UmVzdWx0cyA/PyB0aGlzLm9wdGlvbnMubWF4UmVzdWx0cztcclxuICAgICAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5vcHRpb25zLnVybCwge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBcImVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemF0aW9uXCI6IGBCZWFyZXIgJHt0aGlzLm9wdGlvbnMuYXBpS2V5fWAsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJhY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2VyLWFnZW50XCI6IFVTRVJfQUdFTlQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiByZXF1ZXN0LnF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaF9kZXB0aDogdGhpcy5vcHRpb25zLnNlYXJjaERlcHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGNodW5rc19wZXJfc291cmNlOiB0aGlzLm9wdGlvbnMuY2h1bmtzUGVyU291cmNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heF9yZXN1bHRzOiBtYXhSZXN1bHRzLFxyXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfYW5zd2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAuLi5zaWduYWwgIT09IHVuZGVmaW5lZCA/IHsgc2lnbmFsIH0gOiB7fSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcclxuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uICYmIGVycm9yLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViRXJyb3IoXCJUYXZpbHkgc2VhcmNoIGFib3J0ZWRcIiwgXCJXRUJfQUJPUlRFRFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgV2ViRXJyb3IoYFRhdmlseSBzZWFyY2ggcmVxdWVzdCBmYWlsZWQ6ICR7U3RyaW5nKGVycm9yKX1gLCBcIldFQl9QUk9WSURFUl9FUlJPUlwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xyXG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IGBUYXZpbHkgQVBJIGVycm9yIChIVFRQICR7c3RhdHVzfSlgO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIFRhdmlseUVycm9yKS5kZXRhaWw/LmVycm9yO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQgJiYgZXJyb3IubGVuZ3RoID4gMCkgbWVzc2FnZSA9IGVycm9yO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uICYmIGVycm9yLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdlYkVycm9yKFwiVGF2aWx5IHNlYXJjaCBhYm9ydGVkXCIsIFwiV0VCX0FCT1JURURcIiwgeyBjYXVzZTogZXJyb3IgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgbmV3IFdlYkVycm9yKG1lc3NhZ2UsIFwiV0VCX1BST1ZJREVSX0VSUk9SXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBUYXZpbHlTZWFyY2hSZXNwb25zZTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHBheWxvYWQuYW5zd2VyLFxyXG4gICAgICAgICAgICAgICAgc291cmNlczogcGF5bG9hZC5yZXN1bHRzLm1hcCgocikgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IHIudXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiByLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHIuY29udGVudCxcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICAgIHRydW5jYXRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBET01FeGNlcHRpb24gJiYgZXJyb3IubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBXZWJFcnJvcihcIlRhdmlseSBzZWFyY2ggYWJvcnRlZFwiLCBcIldFQl9BQk9SVEVEXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBXZWJFcnJvcihgVGF2aWx5IHJldHVybmVkIGFuIHVucHJvY2Vzc2FibGUgcmVzcG9uc2UgYm9keTogJHtTdHJpbmcoZXJyb3IpfWAsIFwiV0VCX1BST1ZJREVSX0VSUk9SXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsT0FBTyxPQUFPOzs7QUNBZCxTQUFTLGdCQUFzRTtBQUd4RSxJQUFNLHFC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
104
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2hvc3QvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2hvc3QvcHJvdmlkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB6IGZyb20gXCJAZGVlcHNlZWstYWkvc2NoZW1hc3RlcnlcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJAZGVlcHNlZWstYWkvY29yZGlzXCI7XHJcbmltcG9ydCB7IGxhdW5jaEVudmlyb25tZW50T2YgfSBmcm9tIFwiQGRlZXBzZWVrLWFpL2RzaC1sYXVuY2gtZW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHsgc2V0dGluZ3NOYW1lc3BhY2UgfSBmcm9tIFwiQGRlZXBzZWVrLWFpL2RzaC1zZXR0aW5nc1wiO1xyXG5cclxuaW1wb3J0IHsgVEFJTFlfREVGQVVMVF9VUkwsIFRhaWx5V2ViU2VhcmNoUHJvdmlkZXIgfSBmcm9tIFwiLi9wcm92aWRlclwiO1xyXG5cclxuZXhwb3J0IHR5cGUgQ29uZmlnID0ge1xyXG4gICAgdXJsOiBzdHJpbmdcclxuICAgIHRva2VuPzogc3RyaW5nXHJcbiAgICBrZXlsZXNzOiBib29sZWFuXHJcblxyXG4gICAgc2VhcmNoRGVwdGg/OiBcImJhc2ljXCIgfCBcImFkdmFuY2VkXCIgfCBcImZhc3RcIiB8IFwidWx0cmEtZmFzdFwiXHJcbiAgICBjaHVua3NQZXJTb3VyY2U/OiBudW1iZXJcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBuYW1lID0gXCJAbm9pcmhhcmUvd2ViLXNlYXJjaC10YXZpbHlcIjtcclxuZXhwb3J0IGNvbnN0IGluamVjdCA9IFtcInNldHRpbmdzXCIsIFwid2ViXCJdO1xyXG5leHBvcnQgY29uc3QgQ29uZmlnOiB6PENvbmZpZz4gPSB6Lm9iamVjdCh7XHJcbiAgICB1cmw6IHouc3RyaW5nKCkuZGVmYXVsdChUQUlMWV9ERUZBVUxUX1VSTCksXHJcbiAgICB0b2tlbjogei5zdHJpbmcoKS5taW4oMiksXHJcbiAgICBrZXlsZXNzOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcclxuXHJcbiAgICBzZWFyY2hEZXB0aDogei51bmlvbihbXCJiYXNpY1wiLCBcImFkdmFuY2VkXCIsIFwiZmFzdFwiLCBcInVsdHJhLWZhc3RcIl0gYXMgY29uc3QpLFxyXG4gICAgY2h1bmtzUGVyU291cmNlOiB6Lm51bWJlcigpLm1pbigxKS5tYXgoMyksXHJcbn0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFwcGx5ID0gKGN0eDogQ29udGV4dCwgY29uZmlnOiBDb25maWcpID0+IHtcclxuICAgIGNvbnN0IHNldHRpbmdzID0gY3R4LnNldHRpbmdzLnJlZ2lzdGVyKHNldHRpbmdzTmFtZXNwYWNlKFwibm9pcmhhcmUtd2ViLXNlYXJjaC10YXZpbHlcIiksIENvbmZpZywge1xyXG4gICAgICAgIGJhc2U6IHtcclxuICAgICAgICAgICAgLi4uY29uZmlnLFxyXG4gICAgICAgICAgICB0b2tlbjogY29uZmlnLnRva2VuID8/IGxhdW5jaEVudmlyb25tZW50T2YoY3R4KS5nZXQoXCJUQVZJTFlfQVBJX0tFWVwiKT8udmFsdWUsXHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGN0eC53ZWIucmVnaXN0ZXJTZWFyY2hQcm92aWRlcihuZXcgVGFpbHlXZWJTZWFyY2hQcm92aWRlcihzZXR0aW5ncykpO1xyXG59O1xyXG4iLCAiaW1wb3J0IHsgV2ViRXJyb3IsIFdlYlNlYXJjaFByb3ZpZGVyLCBXZWJTZWFyY2hSZXF1ZXN0LCBXZWJTZWFyY2hSZXN1bHQgfSBmcm9tIFwiQGRlZXBzZWVrLWFpL2RzaC13ZWJcIjtcclxuaW1wb3J0IHsgQ29uZmlnLCBuYW1lIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgU2V0dGluZ3NTY29wZSB9IGZyb20gXCJAZGVlcHNlZWstYWkvZHNoLXNldHRpbmdzXCI7XHJcblxyXG50eXBlIFRhaWx5U2VhcmNoUmVzcG9uc2UgPSB7XHJcbiAgICBhbnN3ZXI6IHN0cmluZ1xyXG4gICAgcmVzdWx0czoge1xyXG4gICAgICAgIHRpdGxlOiBzdHJpbmdcclxuICAgICAgICB1cmw6IHN0cmluZ1xyXG4gICAgICAgIGNvbnRlbnQ6IHN0cmluZ1xyXG4gICAgfVtdXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgVEFJTFlfREVGQVVMVF9VUkwgPSBcImh0dHBzOi8vYXBpLnRhdmlseS5jb20vc2VhcmNoXCI7XHJcblxyXG5jb25zdCBpc0Fib3J0RXJyb3IgPSAoZXJyb3I6IHVua25vd24pID0+IHtcclxuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiAmJiBlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIjtcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBUYWlseVdlYlNlYXJjaFByb3ZpZGVyIGltcGxlbWVudHMgV2ViU2VhcmNoUHJvdmlkZXIge1xyXG4gICAgcmVhZG9ubHkgaWQgPSBuYW1lO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHNldHRpbmdzOiBTZXR0aW5nc1Njb3BlPENvbmZpZz4pIHsgfVxyXG5cclxuICAgIGF2YWlsYWJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnNldHRpbmdzLmdldCgpO1xyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy50b2tlbikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChjb25maWcudG9rZW4udHJpbSgpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZWFyY2gocmVxdWVzdDogV2ViU2VhcmNoUmVxdWVzdCwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFdlYlNlYXJjaFJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuc2V0dGluZ3MuZ2V0KCk7XHJcblxyXG4gICAgICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChjb25maWcudXJsLCB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgcmVkaXJlY3Q6IFwiZm9sbG93XCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKCFjb25maWcua2V5bGVzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy50b2tlbn1gIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiB7IFwiWC1UYXZpbHktQWNjZXNzLU1vZGVcIjogXCJrZXlsZXNzXCIgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJhY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2VyLWFnZW50XCI6IFwiZGVlcHNlZWstaGFybmVzcy8wLjAuMVwiLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcmVxdWVzdC5xdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hfZGVwdGg6IGNvbmZpZy5zZWFyY2hEZXB0aCxcclxuICAgICAgICAgICAgICAgICAgICBjaHVua3NfcGVyX3NvdXJjZTogY29uZmlnLmNodW5rc1BlclNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgICBtYXhfcmVzdWx0czogcmVxdWVzdC5tYXhSZXN1bHRzLFxyXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfYW5zd2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAuLi5zaWduYWwgIT09IHVuZGVmaW5lZCA/IHsgc2lnbmFsIH0gOiB7fSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcclxuICAgICAgICAgICAgaWYgKGlzQWJvcnRFcnJvcihlcnJvcikpIHRocm93IG5ldyBXZWJFcnJvcihcIlRhdmlseSBzZWFyY2ggYWJvcnRlZFwiLCBcIldFQl9BQk9SVEVEXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgV2ViRXJyb3IoYFRhdmlseSBzZWFyY2ggcmVxdWVzdCBmYWlsZWQ6ICR7U3RyaW5nKGVycm9yKX1gLCBcIldFQl9QUk9WSURFUl9FUlJPUlwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xyXG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IGBUYXZpbHkgQVBJIGVycm9yIChIVFRQICR7c3RhdHVzfSlgO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHsgZGV0YWlsPzogeyBlcnJvcj86IHN0cmluZyB9IH0pPy5kZXRhaWw/LmVycm9yO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQgJiYgZXJyb3IubGVuZ3RoID4gMCkgbWVzc2FnZSA9IGVycm9yO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQWJvcnRFcnJvcihlcnJvcikpIHRocm93IG5ldyBXZWJFcnJvcihcIkV4YSBzZWFyY2ggYWJvcnRlZFwiLCBcIldFQl9BQk9SVEVEXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBXZWJFcnJvcihtZXNzYWdlLCBcIldFQl9QUk9WSURFUl9FUlJPUlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgVGFpbHlTZWFyY2hSZXNwb25zZTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHBheWxvYWQuYW5zd2VyLFxyXG4gICAgICAgICAgICAgICAgc291cmNlczogcGF5bG9hZC5yZXN1bHRzLm1hcCgocikgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IHIudXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiByLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHIuY29udGVudCxcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICAgIHRydW5jYXRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xyXG4gICAgICAgICAgICBpZiAoaXNBYm9ydEVycm9yKGVycm9yKSkgdGhyb3cgbmV3IFdlYkVycm9yKFwiVGFpbHkgc2VhcmNoIGFib3J0ZWRcIiwgXCJXRUJfQUJPUlRFRFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFdlYkVycm9yKGBUYWlseSByZXR1cm5lZCBhbiB1bnByb2Nlc3NhYmxlIHJlc3BvbnNlIGJvZHk6ICR7U3RyaW5nKGVycm9yKX1gLCBcIldFQl9QUk9WSURFUl9FUlJPUlwiLCB7IGNhdXNlOiBlcnJvciB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLE9BQU8sT0FBTztBQUVkLFNBQVMsMkJBQTJC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
@@ -0,0 +1,11 @@
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
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noirhare/dsh-web-search-tavily",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "license": "MIT",
5
5
  "author": {
6
6
  "name": "NoirHare",
@@ -27,6 +27,7 @@
27
27
  "@deepseek-ai/cordis": "^4.0.1",
28
28
  "@deepseek-ai/schemastery": "^3.18.1",
29
29
  "@deepseek-ai/dsh-launch-environment": "^0.1.1-rc.2",
30
+ "@deepseek-ai/dsh-settings": "^0.1.1-rc.2",
30
31
  "@deepseek-ai/dsh-web": "^0.1.1-rc.2"
31
32
  },
32
33
  "dsh": {