dsh-search-enhance 0.1.12 → 0.2.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/README.md +9 -9
- package/README.zh.md +9 -9
- package/client/client.js +95 -28
- package/client/types/client/locales.d.ts +4 -1
- package/client/types/web-config/contracts.d.ts +10 -3
- package/lib/config.d.ts +10 -33
- package/lib/config.js +16 -25
- package/lib/contracts/sources.d.ts +1 -1
- package/lib/contracts/sources.js +1 -0
- package/lib/diagnostics/orchestrator.js +4 -0
- package/lib/diagnostics/probes.d.ts +2 -2
- package/lib/diagnostics/status.js +8 -2
- package/lib/diagnostics/types.d.ts +3 -1
- package/lib/diagnostics/types.js +2 -0
- package/lib/documentation/service.d.ts +1 -2
- package/lib/documentation/service.js +1 -2
- package/lib/index.js +22 -69
- package/lib/orchestration/orchestrator.d.ts +1 -0
- package/lib/orchestration/orchestrator.js +13 -0
- package/lib/orchestration/types.d.ts +1 -0
- package/lib/presentation/index.d.ts +0 -1
- package/lib/presentation/index.js +0 -1
- package/lib/presentation/render.d.ts +3 -8
- package/lib/presentation/render.js +12 -118
- package/lib/prompt/tool-discovery.js +5 -6
- package/lib/providers/index.d.ts +2 -0
- package/lib/providers/index.js +2 -0
- package/lib/providers/parallel-extract.d.ts +20 -0
- package/lib/providers/parallel-extract.js +83 -0
- package/lib/providers/parallel.d.ts +20 -0
- package/lib/providers/parallel.js +94 -0
- package/lib/providers/search-api-request.js +6 -3
- package/lib/providers/types.d.ts +1 -1
- package/lib/tool-discovery/capabilities.d.ts +8 -19
- package/lib/tool-discovery/capabilities.js +13 -96
- package/lib/tool-discovery/fold.d.ts +8 -39
- package/lib/tool-discovery/fold.js +45 -105
- package/lib/tool-discovery/manager.d.ts +10 -17
- package/lib/tool-discovery/manager.js +41 -77
- package/lib/tools/docs-search.d.ts +1 -3
- package/lib/tools/docs-search.js +2 -2
- package/lib/tools/index.d.ts +0 -5
- package/lib/tools/index.js +0 -5
- package/lib/tools/schemas.d.ts +3 -747
- package/lib/tools/schemas.js +1 -461
- package/lib/tools/search-tools.d.ts +12 -101
- package/lib/tools/search-tools.js +34 -191
- package/lib/tools/web-extract.js +1 -1
- package/lib/tools/web-search.d.ts +0 -2
- package/lib/tools/web-search.js +1 -1
- package/lib/web-config/contracts.d.ts +10 -3
- package/lib/web-config/contracts.js +7 -2
- package/lib/web-config/host.js +4 -1
- package/lib/web-extract/orchestrator.js +1 -0
- package/lib/web-extract/types.d.ts +3 -2
- package/lib/web-extract/types.js +2 -0
- package/package.json +54 -58
- package/lib/presentation/diagnostics-card.d.ts +0 -8
- package/lib/presentation/diagnostics-card.js +0 -91
- package/lib/presentation/research-plan-card.d.ts +0 -10
- package/lib/presentation/research-plan-card.js +0 -90
- package/lib/research-plan/index.d.ts +0 -28
- package/lib/research-plan/index.js +0 -692
- package/lib/tools/context7.d.ts +0 -1295
- package/lib/tools/context7.js +0 -969
- package/lib/tools/research-plan.d.ts +0 -13
- package/lib/tools/research-plan.js +0 -44
- package/lib/tools/search-call.d.ts +0 -75
- package/lib/tools/search-call.js +0 -334
- package/lib/tools/search-diagnostics.d.ts +0 -22
- package/lib/tools/search-diagnostics.js +0 -147
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ English | [简体中文](README.zh.md)
|
|
|
4
4
|
|
|
5
5
|
`dsh-search-enhance` is a search extension for DeepSeek Harness. It uses a Grok-compatible Search API for primary web answers and can optionally use Context7, Exa, Tavily, and Firecrawl for documentation lookup, supplementary discovery, page extraction, and site mapping.
|
|
6
6
|
|
|
7
|
-
The plugin
|
|
7
|
+
The plugin presents search results, sources, and page content separately. Searches return an answer or documentation snippets with source links; you can ask for more sources when needed. To check important details, ask it to read the original page. Search snippets remain distinct from fetched page content.
|
|
8
8
|
|
|
9
9
|
> Bring your own endpoints and credentials. The plugin ships no API keys. A Grok-compatible endpoint is required for `web_search`; Context7, Exa, Tavily, and Firecrawl are optional.
|
|
10
10
|
|
|
@@ -17,16 +17,16 @@ The plugin handles search, source retention, and page retrieval as separate step
|
|
|
17
17
|
- `source_ref` keeps the complete source record in private durable storage, allowing the Agent to paginate beyond the links included in the initial result.
|
|
18
18
|
- `docs_search` uses Context7 only with an explicit `library_name` or `library_id`; requests without a library identity use Exa discovery.
|
|
19
19
|
- `web_extract` requires one explicit `provider` from the user-enabled set: `tavily_extract`, `firecrawl_scrape`, `smart_direct`, or `direct`. It reports the route, evidence level, and available page metadata; failures never switch Providers.
|
|
20
|
-
-
|
|
20
|
+
- Ask for more sources or related pages on a specific website when needed; no manual tool loading is required.
|
|
21
21
|
- Supplemental search defaults to no Providers selected. Unselected Providers are never requested; missing credentials and failures of selected Providers remain visible as warnings.
|
|
22
22
|
|
|
23
|
-
For
|
|
23
|
+
For implementation details, see [Search workflow architecture](https://github.com/umineko987/dsh-search-enhance/blob/main/guides/search-workflow.md).
|
|
24
24
|
|
|
25
25
|
## Quick start
|
|
26
26
|
|
|
27
27
|
### 1. Install
|
|
28
28
|
|
|
29
|
-
Supports DSH `0.
|
|
29
|
+
Supports DSH `0.2.0-rc.2`. DSH dependencies are pinned to this exact release; upgrade the DSH CLI first if you are running an older version.
|
|
30
30
|
|
|
31
31
|
Install the [published npm bundle](https://www.npmjs.com/package/dsh-search-enhance) into the DSH `web` profile:
|
|
32
32
|
|
|
@@ -73,7 +73,7 @@ Use normal language; the plugin gives the Agent routing guidance.
|
|
|
73
73
|
- “Look up the current FastAPI JWT authentication API and show a minimal example from the official documentation.”
|
|
74
74
|
- “Read and summarize `https://example.com/article`, separating what the page states from your inference.”
|
|
75
75
|
|
|
76
|
-
Ask explicitly when you need
|
|
76
|
+
Ask explicitly when you need more sources or pages from a specific website. Check the plugin settings for service configuration status.
|
|
77
77
|
|
|
78
78
|
## Providers
|
|
79
79
|
|
|
@@ -93,13 +93,13 @@ Separately, select the **extraction Providers** available to the Agent. Each `we
|
|
|
93
93
|
|
|
94
94
|
For `docs_search`, Context7 requires an explicit `library_name` or `library_id`. Without one, `provider: "auto"` uses Exa instead of guessing a package name from the full question.
|
|
95
95
|
|
|
96
|
-
##
|
|
96
|
+
## On-demand features
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
To see more sources from a search, ask: “Show me the other sources from this search.”
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
To find relevant pages on a website, ask: “Find pages about authentication on this website.” This feature requires Tavily to be configured.
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
The assistant uses these features when needed. You do not have to call tools manually or switch modes. To verify an important claim, you can then ask it to read the original pages.
|
|
103
103
|
|
|
104
104
|
## Update and uninstall
|
|
105
105
|
|
package/README.zh.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
`dsh-search-enhance` 是 DeepSeek Harness 的搜索增强插件。它使用 Grok-compatible Search API 生成普通网页搜索的主要回答,并可选用 Context7、Exa、Tavily 和 Firecrawl 完成文档检索、补充来源、网页正文提取和站点页面发现。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
插件将搜索结果、参考来源和网页正文分开呈现。搜索时先给出回答或文档片段及来源链接,需要更多来源时可以继续追问;核对重要内容时,再要求读取原网页。搜索摘要与实际读取的正文会明确区分。
|
|
8
8
|
|
|
9
9
|
> 你需要自行提供所选服务的端点和凭据,插件不内置任何 API Key。`web_search` 需要 Grok-compatible 端点;Context7、Exa、Tavily 和 Firecrawl 均为可选 Provider。
|
|
10
10
|
|
|
@@ -17,16 +17,16 @@
|
|
|
17
17
|
- `source_ref` 将完整来源记录保存在插件私有持久存储中,Agent 可以继续分页读取首次结果未展示的来源。
|
|
18
18
|
- `docs_search` 只在提供明确 `library_name` 或 `library_id` 时使用 Context7;没有库身份的请求使用 Exa 发现。
|
|
19
19
|
- `web_extract` 每次必须通过 `provider` 指定一家用户已启用的服务:`tavily_extract`、`firecrawl_scrape`、`smart_direct` 或 `direct`。结果报告提取路径、证据等级和页面元数据,失败不自动换服务。
|
|
20
|
-
-
|
|
20
|
+
- 需要时可继续查看更多来源,或查找某个网站下的相关页面,无需手动加载工具。
|
|
21
21
|
- 补充搜索默认不选择任何 Provider。未选中的服务不会被请求;选中服务缺少凭据或执行失败会在结果中显示警告。
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
实现细节见[搜索链路架构](https://github.com/umineko987/dsh-search-enhance/blob/main/guides/search-workflow.zh.md)。
|
|
24
24
|
|
|
25
25
|
## 快速开始
|
|
26
26
|
|
|
27
27
|
### 1. 安装
|
|
28
28
|
|
|
29
|
-
支持 DSH `0.
|
|
29
|
+
支持 DSH `0.2.0-rc.2`,DSH 依赖精确锁定到该版本;使用旧版本时,请先升级 DSH CLI。
|
|
30
30
|
|
|
31
31
|
将 [npm 上发布的 bundle](https://www.npmjs.com/package/dsh-search-enhance) 安装到 DSH `web` profile:
|
|
32
32
|
|
|
@@ -73,7 +73,7 @@ dsh web
|
|
|
73
73
|
- “查找 FastAPI 当前 JWT 认证 API,并根据官方文档给出最小示例。”
|
|
74
74
|
- “读取并总结 `https://example.com/article`,区分页面原文与推断。”
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
需要更多参考来源或网站内的相关页面时,可以继续追问;服务配置状态可在插件设置中查看。
|
|
77
77
|
|
|
78
78
|
## Provider
|
|
79
79
|
|
|
@@ -93,13 +93,13 @@ dsh web
|
|
|
93
93
|
|
|
94
94
|
对于 `docs_search`,Context7 需要明确的 `library_name` 或 `library_id`。两者都未提供时,`provider: "auto"` 使用 Exa,不会根据完整问题猜测包名。
|
|
95
95
|
|
|
96
|
-
##
|
|
96
|
+
## 按需功能
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
想查看更多搜索来源时,可以直接追问:“把这次搜索的其他来源也列出来。”
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
想查找某个网站下的相关页面时,可以提出:“查找这个网站下与认证有关的页面。”该功能需要先配置 Tavily。
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
助手会按需使用这些功能,你不必手动调用工具或切换模式。核对重要结论时,还可以继续要求读取原网页。
|
|
103
103
|
|
|
104
104
|
## 更新与卸载
|
|
105
105
|
|
package/client/client.js
CHANGED
|
@@ -18,16 +18,19 @@ window.__ModuleLoader__.load({
|
|
|
18
18
|
"context7",
|
|
19
19
|
"exa",
|
|
20
20
|
"tavily",
|
|
21
|
-
"firecrawl"
|
|
21
|
+
"firecrawl",
|
|
22
|
+
"parallel"
|
|
22
23
|
];
|
|
23
24
|
const WEB_SUPPLEMENTAL_SEARCH_PROVIDERS = [
|
|
24
25
|
"exa",
|
|
25
26
|
"tavily",
|
|
26
|
-
"firecrawl"
|
|
27
|
+
"firecrawl",
|
|
28
|
+
"parallel"
|
|
27
29
|
];
|
|
28
30
|
const WEB_EXTRACT_PROVIDER_KEYS = [
|
|
29
31
|
"tavily",
|
|
30
32
|
"firecrawl",
|
|
33
|
+
"parallel",
|
|
31
34
|
"smartDirect",
|
|
32
35
|
"direct"
|
|
33
36
|
];
|
|
@@ -109,6 +112,26 @@ window.__ModuleLoader__.load({
|
|
|
109
112
|
"firecrawl",
|
|
110
113
|
"timeoutMs"
|
|
111
114
|
],
|
|
115
|
+
[
|
|
116
|
+
"providers",
|
|
117
|
+
"parallel",
|
|
118
|
+
"baseUrl"
|
|
119
|
+
],
|
|
120
|
+
[
|
|
121
|
+
"providers",
|
|
122
|
+
"parallel",
|
|
123
|
+
"credentialRef"
|
|
124
|
+
],
|
|
125
|
+
[
|
|
126
|
+
"providers",
|
|
127
|
+
"parallel",
|
|
128
|
+
"timeoutMs"
|
|
129
|
+
],
|
|
130
|
+
[
|
|
131
|
+
"providers",
|
|
132
|
+
"parallel",
|
|
133
|
+
"mode"
|
|
134
|
+
],
|
|
112
135
|
[
|
|
113
136
|
"webExtract",
|
|
114
137
|
"smartDirect",
|
|
@@ -220,7 +243,8 @@ window.__ModuleLoader__.load({
|
|
|
220
243
|
"context7",
|
|
221
244
|
"exa",
|
|
222
245
|
"tavily",
|
|
223
|
-
"firecrawl"
|
|
246
|
+
"firecrawl",
|
|
247
|
+
"parallel"
|
|
224
248
|
];
|
|
225
249
|
const PROXY_ROUTES = [["smartDirect", "smartDirectProxy"], ["direct", "directProxy"]];
|
|
226
250
|
const CREDENTIAL_NAME_KEYS = {
|
|
@@ -228,7 +252,8 @@ window.__ModuleLoader__.load({
|
|
|
228
252
|
context7: "context7",
|
|
229
253
|
exa: "exa",
|
|
230
254
|
tavily: "tavily",
|
|
231
|
-
firecrawl: "firecrawl"
|
|
255
|
+
firecrawl: "firecrawl",
|
|
256
|
+
parallel: "parallel"
|
|
232
257
|
};
|
|
233
258
|
const cardStyle = {
|
|
234
259
|
overflow: "hidden",
|
|
@@ -414,11 +439,13 @@ window.__ModuleLoader__.load({
|
|
|
414
439
|
context7: { ...config.providers.context7 },
|
|
415
440
|
exa: { ...config.providers.exa },
|
|
416
441
|
tavily: { ...config.providers.tavily },
|
|
417
|
-
firecrawl: { ...config.providers.firecrawl }
|
|
442
|
+
firecrawl: { ...config.providers.firecrawl },
|
|
443
|
+
parallel: { ...config.providers.parallel }
|
|
418
444
|
},
|
|
419
445
|
webExtract: {
|
|
420
446
|
tavily: { ...config.webExtract.tavily },
|
|
421
447
|
firecrawl: { ...config.webExtract.firecrawl },
|
|
448
|
+
parallel: { ...config.webExtract.parallel },
|
|
422
449
|
smartDirect: { ...config.webExtract.smartDirect },
|
|
423
450
|
direct: { ...config.webExtract.direct }
|
|
424
451
|
}
|
|
@@ -1027,30 +1054,60 @@ window.__ModuleLoader__.load({
|
|
|
1027
1054
|
...gridStyle,
|
|
1028
1055
|
alignItems: "end"
|
|
1029
1056
|
},
|
|
1030
|
-
children: [
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
t,
|
|
1036
|
-
onToggle: (provider) => {
|
|
1037
|
-
updateSupplementalSearch({ [provider]: !draft.supplementalSearch[provider] });
|
|
1038
|
-
}
|
|
1039
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Field, {
|
|
1040
|
-
label: t("maxSourcesPerProvider"),
|
|
1041
|
-
overridden: isOverridden(snapshot.user, ["supplementalSearch", "maxSourcesPerProvider"]),
|
|
1042
|
-
t,
|
|
1043
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(NumberInput, {
|
|
1044
|
-
label: t("maxSourcesPerProvider"),
|
|
1045
|
-
value: draft.supplementalSearch.maxSourcesPerProvider,
|
|
1046
|
-
min: 1,
|
|
1047
|
-
max: snapshot.options.supplementalSearchMaxSources,
|
|
1057
|
+
children: [
|
|
1058
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderSelect, {
|
|
1059
|
+
label: t("extraSourcesHeading"),
|
|
1060
|
+
providers: WEB_SUPPLEMENTAL_SEARCH_PROVIDERS,
|
|
1061
|
+
selected: WEB_SUPPLEMENTAL_SEARCH_PROVIDERS.filter((provider) => draft.supplementalSearch[provider]),
|
|
1048
1062
|
disabled: !editable,
|
|
1049
|
-
|
|
1050
|
-
|
|
1063
|
+
t,
|
|
1064
|
+
onToggle: (provider) => {
|
|
1065
|
+
updateSupplementalSearch({ [provider]: !draft.supplementalSearch[provider] });
|
|
1051
1066
|
}
|
|
1067
|
+
}),
|
|
1068
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Field, {
|
|
1069
|
+
label: t("maxSourcesPerProvider"),
|
|
1070
|
+
overridden: isOverridden(snapshot.user, ["supplementalSearch", "maxSourcesPerProvider"]),
|
|
1071
|
+
t,
|
|
1072
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(NumberInput, {
|
|
1073
|
+
label: t("maxSourcesPerProvider"),
|
|
1074
|
+
value: draft.supplementalSearch.maxSourcesPerProvider,
|
|
1075
|
+
min: 1,
|
|
1076
|
+
max: snapshot.options.supplementalSearchMaxSources,
|
|
1077
|
+
disabled: !editable,
|
|
1078
|
+
onChange: (value) => {
|
|
1079
|
+
updateSupplementalSearch({ maxSourcesPerProvider: value });
|
|
1080
|
+
}
|
|
1081
|
+
})
|
|
1082
|
+
}),
|
|
1083
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Field, {
|
|
1084
|
+
label: t("parallelSearchMode"),
|
|
1085
|
+
overridden: isOverridden(snapshot.user, [
|
|
1086
|
+
"providers",
|
|
1087
|
+
"parallel",
|
|
1088
|
+
"mode"
|
|
1089
|
+
]),
|
|
1090
|
+
t,
|
|
1091
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Select, {
|
|
1092
|
+
value: draft.providers.parallel.mode,
|
|
1093
|
+
options: snapshot.options.parallelSearchModes,
|
|
1094
|
+
disabled: !editable,
|
|
1095
|
+
onChange: (mode) => {
|
|
1096
|
+
setDraft((current) => current === void 0 ? current : {
|
|
1097
|
+
...current,
|
|
1098
|
+
providers: {
|
|
1099
|
+
...current.providers,
|
|
1100
|
+
parallel: {
|
|
1101
|
+
...current.providers.parallel,
|
|
1102
|
+
mode
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
});
|
|
1106
|
+
setFeedback("idle");
|
|
1107
|
+
}
|
|
1108
|
+
})
|
|
1052
1109
|
})
|
|
1053
|
-
|
|
1110
|
+
]
|
|
1054
1111
|
})]
|
|
1055
1112
|
}),
|
|
1056
1113
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
@@ -1086,6 +1143,10 @@ window.__ModuleLoader__.load({
|
|
|
1086
1143
|
setFeedback("idle");
|
|
1087
1144
|
}
|
|
1088
1145
|
}),
|
|
1146
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1147
|
+
style: noteStyle,
|
|
1148
|
+
children: t("parallelExtractHint")
|
|
1149
|
+
}),
|
|
1089
1150
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
1090
1151
|
style: sectionStyle,
|
|
1091
1152
|
"aria-labelledby": "search-enhance-proxy-heading",
|
|
@@ -1383,8 +1444,9 @@ window.__ModuleLoader__.load({
|
|
|
1383
1444
|
toolDiscoveryMode: "Tool discovery",
|
|
1384
1445
|
toolTimeoutMs: "Whole tool timeout (ms)",
|
|
1385
1446
|
extraSourcesHeading: "Supplemental search providers",
|
|
1386
|
-
extraSourcesIntro: "Select any of Exa, Tavily, and
|
|
1447
|
+
extraSourcesIntro: "Select any of Exa, Tavily, Firecrawl, and Parallel. Every selected provider searches in parallel.",
|
|
1387
1448
|
selectProviders: "Select providers (multiple allowed)",
|
|
1449
|
+
parallelSearchMode: "Parallel search mode",
|
|
1388
1450
|
maxSourcesPerProvider: "Maximum sources per selected provider",
|
|
1389
1451
|
extractHeading: "Available extraction providers",
|
|
1390
1452
|
extractIntro: "Select the providers the Agent may use. Each web_extract call must explicitly choose one enabled provider. Failure never triggers automatic fallback.",
|
|
@@ -1394,6 +1456,8 @@ window.__ModuleLoader__.load({
|
|
|
1394
1456
|
exa: "Exa",
|
|
1395
1457
|
tavily: "Tavily",
|
|
1396
1458
|
firecrawl: "Firecrawl",
|
|
1459
|
+
parallel: "Parallel",
|
|
1460
|
+
parallelExtractHint: "Parallel returns Markdown only. It may use indexed content up to 10 minutes old, but does not fall back to older cached content when live fetching fails.",
|
|
1397
1461
|
proxyHeading: "Web extraction proxies",
|
|
1398
1462
|
proxyIntro: "Optional HTTP proxies for the local smart_direct and direct extraction routes. Leave a field blank to remove its user override.",
|
|
1399
1463
|
smartDirectProxy: "smart_direct HTTP proxy",
|
|
@@ -1461,8 +1525,9 @@ window.__ModuleLoader__.load({
|
|
|
1461
1525
|
toolDiscoveryMode: "工具披露模式",
|
|
1462
1526
|
toolTimeoutMs: "工具总超时(毫秒)",
|
|
1463
1527
|
extraSourcesHeading: "补充搜索服务",
|
|
1464
|
-
extraSourcesIntro: "可多选 Exa、Tavily、Firecrawl;每次搜索都会并行请求选中项。",
|
|
1528
|
+
extraSourcesIntro: "可多选 Exa、Tavily、Firecrawl、Parallel;每次搜索都会并行请求选中项。",
|
|
1465
1529
|
selectProviders: "选择服务(可多选)",
|
|
1530
|
+
parallelSearchMode: "Parallel 搜索模式",
|
|
1466
1531
|
maxSourcesPerProvider: "每个选中服务的来源上限",
|
|
1467
1532
|
extractHeading: "可用网页提取服务",
|
|
1468
1533
|
extractIntro: "可多选允许 Agent 使用的服务。每次 web_extract 必须明确指定其中一家;失败不自动回退。",
|
|
@@ -1472,6 +1537,8 @@ window.__ModuleLoader__.load({
|
|
|
1472
1537
|
exa: "Exa",
|
|
1473
1538
|
tavily: "Tavily",
|
|
1474
1539
|
firecrawl: "Firecrawl",
|
|
1540
|
+
parallel: "Parallel",
|
|
1541
|
+
parallelExtractHint: "Parallel 仅返回 Markdown 正文,可能使用最近 10 分钟内的缓存;实时读取失败时不退回更旧的缓存。",
|
|
1475
1542
|
proxyHeading: "网页提取代理",
|
|
1476
1543
|
proxyIntro: "分别为本地 smart_direct 与 direct 提取路线设置可选 HTTP 代理;留空会删除对应的用户覆盖。",
|
|
1477
1544
|
smartDirectProxy: "smart_direct HTTP 代理",
|
|
@@ -23,8 +23,9 @@ export declare const en: {
|
|
|
23
23
|
readonly toolDiscoveryMode: "Tool discovery";
|
|
24
24
|
readonly toolTimeoutMs: "Whole tool timeout (ms)";
|
|
25
25
|
readonly extraSourcesHeading: "Supplemental search providers";
|
|
26
|
-
readonly extraSourcesIntro: "Select any of Exa, Tavily, and
|
|
26
|
+
readonly extraSourcesIntro: "Select any of Exa, Tavily, Firecrawl, and Parallel. Every selected provider searches in parallel.";
|
|
27
27
|
readonly selectProviders: "Select providers (multiple allowed)";
|
|
28
|
+
readonly parallelSearchMode: "Parallel search mode";
|
|
28
29
|
readonly maxSourcesPerProvider: "Maximum sources per selected provider";
|
|
29
30
|
readonly extractHeading: "Available extraction providers";
|
|
30
31
|
readonly extractIntro: "Select the providers the Agent may use. Each web_extract call must explicitly choose one enabled provider. Failure never triggers automatic fallback.";
|
|
@@ -34,6 +35,8 @@ export declare const en: {
|
|
|
34
35
|
readonly exa: "Exa";
|
|
35
36
|
readonly tavily: "Tavily";
|
|
36
37
|
readonly firecrawl: "Firecrawl";
|
|
38
|
+
readonly parallel: "Parallel";
|
|
39
|
+
readonly parallelExtractHint: "Parallel returns Markdown only. It may use indexed content up to 10 minutes old, but does not fall back to older cached content when live fetching fails.";
|
|
37
40
|
readonly proxyHeading: "Web extraction proxies";
|
|
38
41
|
readonly proxyIntro: "Optional HTTP proxies for the local smart_direct and direct extraction routes. Leave a field blank to remove its user override.";
|
|
39
42
|
readonly smartDirectProxy: "smart_direct HTTP proxy";
|
|
@@ -4,10 +4,10 @@ export declare const WEB_BASE_URL_MAX_CHARACTERS = 8192;
|
|
|
4
4
|
export declare const WEB_MODEL_MAX_CHARACTERS = 4096;
|
|
5
5
|
export declare const WEB_CREDENTIAL_REF_MAX_CHARACTERS = 256;
|
|
6
6
|
export declare const WEB_CREDENTIAL_VALUE_MAX_CHARACTERS: number;
|
|
7
|
-
export declare const WEB_CREDENTIAL_SLOTS: readonly ["searchApi", "context7", "exa", "tavily", "firecrawl"];
|
|
7
|
+
export declare const WEB_CREDENTIAL_SLOTS: readonly ["searchApi", "context7", "exa", "tavily", "firecrawl", "parallel"];
|
|
8
8
|
export type WebCredentialSlot = (typeof WEB_CREDENTIAL_SLOTS)[number];
|
|
9
|
-
export declare const WEB_SUPPLEMENTAL_SEARCH_PROVIDERS: readonly ["exa", "tavily", "firecrawl"];
|
|
10
|
-
export declare const WEB_EXTRACT_PROVIDER_KEYS: readonly ["tavily", "firecrawl", "smartDirect", "direct"];
|
|
9
|
+
export declare const WEB_SUPPLEMENTAL_SEARCH_PROVIDERS: readonly ["exa", "tavily", "firecrawl", "parallel"];
|
|
10
|
+
export declare const WEB_EXTRACT_PROVIDER_KEYS: readonly ["tavily", "firecrawl", "parallel", "smartDirect", "direct"];
|
|
11
11
|
export declare const WEB_EDITABLE_PATHS: readonly (readonly string[])[];
|
|
12
12
|
export interface WebSearchApiConfig {
|
|
13
13
|
baseUrl: string;
|
|
@@ -42,6 +42,9 @@ export interface WebEditableConfig {
|
|
|
42
42
|
exa: WebDiscoveryProviderConfig;
|
|
43
43
|
tavily: WebDiscoveryProviderConfig;
|
|
44
44
|
firecrawl: WebDiscoveryProviderConfig;
|
|
45
|
+
parallel: WebDiscoveryProviderConfig & {
|
|
46
|
+
mode: string;
|
|
47
|
+
};
|
|
45
48
|
};
|
|
46
49
|
webExtract: {
|
|
47
50
|
tavily: {
|
|
@@ -50,6 +53,9 @@ export interface WebEditableConfig {
|
|
|
50
53
|
firecrawl: {
|
|
51
54
|
enabled: boolean;
|
|
52
55
|
};
|
|
56
|
+
parallel: {
|
|
57
|
+
enabled: boolean;
|
|
58
|
+
};
|
|
53
59
|
smartDirect: WebProxyConfig;
|
|
54
60
|
direct: WebProxyConfig;
|
|
55
61
|
};
|
|
@@ -67,6 +73,7 @@ export interface WebConfigOptions {
|
|
|
67
73
|
protocols: readonly string[];
|
|
68
74
|
thinkingLevels: readonly string[];
|
|
69
75
|
toolDiscoveryModes: readonly string[];
|
|
76
|
+
parallelSearchModes: readonly string[];
|
|
70
77
|
proxyUrlMaxCharacters: number;
|
|
71
78
|
supplementalSearchMaxSources: number;
|
|
72
79
|
}
|
package/lib/config.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type SearchDepth = (typeof SEARCH_DEPTHS)[number];
|
|
|
8
8
|
export declare const TOOL_DISCOVERY_MODES: readonly ["progressive", "all"];
|
|
9
9
|
export type ToolDiscoveryMode = (typeof TOOL_DISCOVERY_MODES)[number];
|
|
10
10
|
export interface ToolDiscoveryConfig {
|
|
11
|
-
/** progressive
|
|
11
|
+
/** progressive loads real tools per Agent on demand; all registers them at attachment. */
|
|
12
12
|
readonly mode: ToolDiscoveryMode;
|
|
13
13
|
}
|
|
14
14
|
/** Stable high-level docs_search default; the Settings cap is independently bounded. */
|
|
@@ -20,9 +20,6 @@ export declare const SITE_MAP_DEFAULT_MAX_BREADTH = 10;
|
|
|
20
20
|
export declare const SITE_MAP_DEFAULT_LIMIT = 30;
|
|
21
21
|
export declare const SITE_MAP_MAX_DEPTH = 5;
|
|
22
22
|
export declare const SITE_MAP_MAX_LINKS = 500;
|
|
23
|
-
/** Hard model-contract bounds for the one-shot offline research planner. */
|
|
24
|
-
export declare const RESEARCH_PLAN_MAX_KNOWN_URLS = 10;
|
|
25
|
-
export declare const RESEARCH_PLAN_MAX_SUB_QUERIES = 6;
|
|
26
23
|
export declare const SEARCH_API_PROTOCOLS: readonly ["completions", "responses"];
|
|
27
24
|
export type SearchApiProtocol = (typeof SEARCH_API_PROTOCOLS)[number];
|
|
28
25
|
export declare const THINKING_LEVELS: readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
@@ -40,7 +37,7 @@ export interface OutputBudget {
|
|
|
40
37
|
}
|
|
41
38
|
export type ProfileBudgets = Record<SearchDepth, OutputBudget>;
|
|
42
39
|
export type SearchBudgets = Record<SearchProfile, ProfileBudgets>;
|
|
43
|
-
export declare const SUPPLEMENTAL_SEARCH_PROVIDERS: readonly ["exa", "tavily", "firecrawl"];
|
|
40
|
+
export declare const SUPPLEMENTAL_SEARCH_PROVIDERS: readonly ["exa", "tavily", "firecrawl", "parallel"];
|
|
44
41
|
export type SupplementalSearchProvider = (typeof SUPPLEMENTAL_SEARCH_PROVIDERS)[number];
|
|
45
42
|
export type SupplementalSearchConfig = Record<SupplementalSearchProvider, boolean> & {
|
|
46
43
|
readonly maxSourcesPerProvider: number;
|
|
@@ -51,6 +48,7 @@ export interface CredentialReferences {
|
|
|
51
48
|
readonly exa: CredentialRef;
|
|
52
49
|
readonly tavily: CredentialRef;
|
|
53
50
|
readonly firecrawl: CredentialRef;
|
|
51
|
+
readonly parallel: CredentialRef;
|
|
54
52
|
}
|
|
55
53
|
export interface SearchApiConfig {
|
|
56
54
|
readonly baseUrl: string;
|
|
@@ -65,11 +63,17 @@ export interface DiscoveryProviderConfig {
|
|
|
65
63
|
readonly credentialRef: CredentialRef;
|
|
66
64
|
readonly timeoutMs: number;
|
|
67
65
|
}
|
|
66
|
+
export declare const PARALLEL_SEARCH_MODES: readonly ["turbo", "fast", "basic", "advanced"];
|
|
67
|
+
export type ParallelSearchMode = (typeof PARALLEL_SEARCH_MODES)[number];
|
|
68
|
+
export interface ParallelProviderConfig extends DiscoveryProviderConfig {
|
|
69
|
+
readonly mode: ParallelSearchMode;
|
|
70
|
+
}
|
|
68
71
|
export interface ProviderConfig {
|
|
69
72
|
readonly context7: DiscoveryProviderConfig;
|
|
70
73
|
readonly exa: DiscoveryProviderConfig;
|
|
71
74
|
readonly tavily: DiscoveryProviderConfig;
|
|
72
75
|
readonly firecrawl: DiscoveryProviderConfig;
|
|
76
|
+
readonly parallel: ParallelProviderConfig;
|
|
73
77
|
}
|
|
74
78
|
export interface RetryConfig {
|
|
75
79
|
/** Total calls, including the first call. */
|
|
@@ -226,15 +230,10 @@ export interface WebExtractConfig {
|
|
|
226
230
|
/** Independent remote route controls. */
|
|
227
231
|
readonly tavily: RemoteExtractConfig;
|
|
228
232
|
readonly firecrawl: FirecrawlExtractConfig;
|
|
233
|
+
readonly parallel: RemoteExtractConfig;
|
|
229
234
|
readonly smartDirect: SmartDirectConfig;
|
|
230
235
|
readonly direct: DirectFetchConfig;
|
|
231
236
|
}
|
|
232
|
-
/** @deprecated Accepted for one compatibility cycle but ignored by tool registration and visibility. */
|
|
233
|
-
export interface OptionalToolsConfig {
|
|
234
|
-
readonly webMap: boolean;
|
|
235
|
-
readonly researchPlan: boolean;
|
|
236
|
-
readonly diagnostics: boolean;
|
|
237
|
-
}
|
|
238
237
|
export interface DiagnosticsConfig {
|
|
239
238
|
/** Unified wall-clock budget for status inspection and all concurrent probes. */
|
|
240
239
|
readonly timeoutMs: number;
|
|
@@ -249,24 +248,6 @@ export interface DiagnosticsConfig {
|
|
|
249
248
|
/** Independent maximum UTF-8 bytes rendered into model text. */
|
|
250
249
|
readonly modelTextMaxBytes: number;
|
|
251
250
|
}
|
|
252
|
-
export interface ResearchPlanConfig {
|
|
253
|
-
/** Unicode code-point ceiling for the required top-level research question. */
|
|
254
|
-
readonly maxQuestionCharacters: number;
|
|
255
|
-
/** Unicode code-point ceiling for each sub-question and stable sub-question id. */
|
|
256
|
-
readonly maxSubQueryCharacters: number;
|
|
257
|
-
/** Unicode code-point ceiling for each optional explicit tool query. */
|
|
258
|
-
readonly maxQueryCharacters: number;
|
|
259
|
-
/** Unicode code-point ceiling for each sub-question reason. */
|
|
260
|
-
readonly maxReasonCharacters: number;
|
|
261
|
-
/** Unicode code-point ceiling for each known or tool-target HTTP(S) URL. */
|
|
262
|
-
readonly maxKnownUrlCharacters: number;
|
|
263
|
-
/** Deployment count cap within the model contract's ten-URL hard limit. */
|
|
264
|
-
readonly maxKnownUrls: number;
|
|
265
|
-
/** Complete canonical research-plan JSON envelope byte ceiling. */
|
|
266
|
-
readonly maxOutputBytes: number;
|
|
267
|
-
/** Independent UTF-8 ceiling for the pure Native model-text projection. */
|
|
268
|
-
readonly modelTextMaxBytes: number;
|
|
269
|
-
}
|
|
270
251
|
export interface SiteMapConfig {
|
|
271
252
|
/** Tavily Map processing and per-attempt transport timeout; sent as whole seconds. */
|
|
272
253
|
readonly timeoutMs: number;
|
|
@@ -298,12 +279,8 @@ export interface Config {
|
|
|
298
279
|
readonly cache: CacheConfig;
|
|
299
280
|
/** Agent tool-discovery policy; changes take effect after the automatic plugin reload. */
|
|
300
281
|
readonly toolDiscovery: ToolDiscoveryConfig;
|
|
301
|
-
/** @deprecated Accepted and validated for compatibility, but ignored. */
|
|
302
|
-
readonly optionalTools: OptionalToolsConfig;
|
|
303
282
|
/** Independent resource controls for the diagnostics Consumer. */
|
|
304
283
|
readonly diagnostics: DiagnosticsConfig;
|
|
305
|
-
/** Stage-4 deterministic offline research-planning resource controls. */
|
|
306
|
-
readonly researchPlan: ResearchPlanConfig;
|
|
307
284
|
/** Stage-3 extraction tool and route controls. */
|
|
308
285
|
readonly webExtract: WebExtractConfig;
|
|
309
286
|
/** Stage-4 Tavily Map collection and output controls. */
|
package/lib/config.js
CHANGED
|
@@ -20,9 +20,6 @@ export const SITE_MAP_DEFAULT_MAX_BREADTH = 10;
|
|
|
20
20
|
export const SITE_MAP_DEFAULT_LIMIT = 30;
|
|
21
21
|
export const SITE_MAP_MAX_DEPTH = 5;
|
|
22
22
|
export const SITE_MAP_MAX_LINKS = 500;
|
|
23
|
-
/** Hard model-contract bounds for the one-shot offline research planner. */
|
|
24
|
-
export const RESEARCH_PLAN_MAX_KNOWN_URLS = 10;
|
|
25
|
-
export const RESEARCH_PLAN_MAX_SUB_QUERIES = 6;
|
|
26
23
|
export const SEARCH_API_PROTOCOLS = ['completions', 'responses'];
|
|
27
24
|
export const THINKING_LEVELS = [
|
|
28
25
|
'off',
|
|
@@ -37,13 +34,15 @@ export const FALLBACK_MODES = ['auto', 'off'];
|
|
|
37
34
|
export const MINIMUM_CAPABILITY_PROFILES = ['standard', 'off'];
|
|
38
35
|
/** Shared deployment bound for explicit local-route HTTP proxy URLs. */
|
|
39
36
|
export const WEB_EXTRACT_PROXY_URL_MAX_CHARACTERS = 2048;
|
|
40
|
-
export const SUPPLEMENTAL_SEARCH_PROVIDERS = ['exa', 'tavily', 'firecrawl'];
|
|
37
|
+
export const SUPPLEMENTAL_SEARCH_PROVIDERS = ['exa', 'tavily', 'firecrawl', 'parallel'];
|
|
38
|
+
export const PARALLEL_SEARCH_MODES = ['turbo', 'fast', 'basic', 'advanced'];
|
|
41
39
|
export const DEFAULT_CREDENTIAL_REFS = Object.freeze({
|
|
42
40
|
searchApi: credentialRef('SEARCH_API_KEY'),
|
|
43
41
|
context7: credentialRef('CONTEXT7_API_KEY'),
|
|
44
42
|
exa: credentialRef('EXA_API_KEY'),
|
|
45
43
|
tavily: credentialRef('TAVILY_API_KEY'),
|
|
46
44
|
firecrawl: credentialRef('FIRECRAWL_API_KEY'),
|
|
45
|
+
parallel: credentialRef('PARALLEL_API_KEY'),
|
|
47
46
|
});
|
|
48
47
|
export const DEFAULT_SEARCH_BUDGETS = {
|
|
49
48
|
auto: {
|
|
@@ -155,6 +154,12 @@ export const Config = Schema.object({
|
|
|
155
154
|
exa: discoveryProvider('https://api.exa.ai', DEFAULT_CREDENTIAL_REFS.exa),
|
|
156
155
|
tavily: discoveryProvider('https://api.tavily.com', DEFAULT_CREDENTIAL_REFS.tavily),
|
|
157
156
|
firecrawl: discoveryProvider('https://api.firecrawl.dev/v2', DEFAULT_CREDENTIAL_REFS.firecrawl),
|
|
157
|
+
parallel: Schema.object({
|
|
158
|
+
baseUrl: httpUrl('https://api.parallel.ai'),
|
|
159
|
+
credentialRef: credentialReference(DEFAULT_CREDENTIAL_REFS.parallel),
|
|
160
|
+
timeoutMs: positiveInteger(120_000, 600_000),
|
|
161
|
+
mode: Schema.union(PARALLEL_SEARCH_MODES).default('basic'),
|
|
162
|
+
}),
|
|
158
163
|
}),
|
|
159
164
|
fallbackMode: Schema.union(['auto', 'off']).default('auto'),
|
|
160
165
|
minimumProfile: Schema.union(['standard', 'off']).default('standard'),
|
|
@@ -179,6 +184,7 @@ export const Config = Schema.object({
|
|
|
179
184
|
exa: Schema.boolean().default(false),
|
|
180
185
|
tavily: Schema.boolean().default(false),
|
|
181
186
|
firecrawl: Schema.boolean().default(false),
|
|
187
|
+
parallel: Schema.boolean().default(false),
|
|
182
188
|
maxSourcesPerProvider: positiveInteger(5, SUPPLEMENTAL_SEARCH_MAX_SOURCES),
|
|
183
189
|
}),
|
|
184
190
|
retention: Schema.object({
|
|
@@ -212,13 +218,6 @@ export const Config = Schema.object({
|
|
|
212
218
|
toolDiscovery: Schema.object({
|
|
213
219
|
mode: Schema.union(TOOL_DISCOVERY_MODES).default('progressive'),
|
|
214
220
|
}),
|
|
215
|
-
optionalTools: Schema.object({
|
|
216
|
-
webMap: Schema.boolean().default(false),
|
|
217
|
-
researchPlan: Schema.boolean().default(false),
|
|
218
|
-
diagnostics: Schema.boolean().default(false),
|
|
219
|
-
})
|
|
220
|
-
.description('Deprecated compatibility input. Values are validated but ignored; use toolDiscovery.mode.')
|
|
221
|
-
.deprecated(),
|
|
222
221
|
diagnostics: Schema.object({
|
|
223
222
|
timeoutMs: positiveInteger(30_000, 120_000),
|
|
224
223
|
maxProbeAttempts: positiveInteger(1, 3),
|
|
@@ -231,20 +230,6 @@ export const Config = Schema.object({
|
|
|
231
230
|
.default(64 * 1024),
|
|
232
231
|
modelTextMaxBytes: positiveInteger(16 * 1024, 1024 * 1024),
|
|
233
232
|
}),
|
|
234
|
-
researchPlan: Schema.object({
|
|
235
|
-
maxQuestionCharacters: positiveInteger(32_000, 1_000_000),
|
|
236
|
-
maxSubQueryCharacters: positiveInteger(10_000, 100_000),
|
|
237
|
-
maxQueryCharacters: positiveInteger(10_000, 100_000),
|
|
238
|
-
maxReasonCharacters: positiveInteger(10_000, 100_000),
|
|
239
|
-
maxKnownUrlCharacters: positiveInteger(8192, 65_536),
|
|
240
|
-
maxKnownUrls: Schema.number()
|
|
241
|
-
.step(1)
|
|
242
|
-
.min(1)
|
|
243
|
-
.max(RESEARCH_PLAN_MAX_KNOWN_URLS)
|
|
244
|
-
.default(RESEARCH_PLAN_MAX_KNOWN_URLS),
|
|
245
|
-
maxOutputBytes: positiveInteger(256 * 1024, 4 * 1024 * 1024),
|
|
246
|
-
modelTextMaxBytes: positiveInteger(64 * 1024, 1024 * 1024),
|
|
247
|
-
}),
|
|
248
233
|
siteMap: Schema.object({
|
|
249
234
|
timeoutMs: Schema.number().step(1000).min(10_000).max(150_000).default(150_000),
|
|
250
235
|
maxResponseBytes: positiveInteger(2 * 1024 * 1024, 32 * 1024 * 1024),
|
|
@@ -270,6 +255,12 @@ export const Config = Schema.object({
|
|
|
270
255
|
maxEmptyAttempts: positiveInteger(3, 10),
|
|
271
256
|
waitForBaseMs: nonNegativeInteger(1500, 30_000),
|
|
272
257
|
}),
|
|
258
|
+
parallel: Schema.object({
|
|
259
|
+
enabled: Schema.boolean().default(false),
|
|
260
|
+
timeoutMs: positiveInteger(120_000, 600_000),
|
|
261
|
+
maxResponseBytes: positiveInteger(2 * 1024 * 1024, 32 * 1024 * 1024),
|
|
262
|
+
maxContentCharacters: positiveInteger(50_000, 1_000_000),
|
|
263
|
+
}),
|
|
273
264
|
smartDirect: Schema.object({
|
|
274
265
|
enabled: Schema.boolean().default(true),
|
|
275
266
|
proxyUrl: proxyUrl(),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SearchDepth, SearchProfile } from '../config.js';
|
|
2
|
-
export declare const SOURCE_PROVIDERS: readonly ["search-api", "context7", "exa", "tavily", "firecrawl", "smart-direct", "direct"];
|
|
2
|
+
export declare const SOURCE_PROVIDERS: readonly ["search-api", "context7", "exa", "tavily", "firecrawl", "smart-direct", "direct", "parallel"];
|
|
3
3
|
export type SourceProvider = (typeof SOURCE_PROVIDERS)[number];
|
|
4
4
|
export declare const SOURCE_CATEGORIES: readonly ["official", "primary", "documentation", "code", "academic", "news", "community", "aggregate", "unknown"];
|
|
5
5
|
export type SourceCategory = (typeof SOURCE_CATEGORIES)[number];
|
package/lib/contracts/sources.js
CHANGED
|
@@ -54,6 +54,10 @@ function probeConfig(config) {
|
|
|
54
54
|
...config.providers.firecrawl,
|
|
55
55
|
timeoutMs: Math.min(config.providers.firecrawl.timeoutMs, timeoutMs),
|
|
56
56
|
},
|
|
57
|
+
parallel: {
|
|
58
|
+
...config.providers.parallel,
|
|
59
|
+
timeoutMs: Math.min(config.providers.parallel.timeoutMs, timeoutMs),
|
|
60
|
+
},
|
|
57
61
|
},
|
|
58
62
|
retry: {
|
|
59
63
|
...config.retry,
|
|
@@ -29,9 +29,9 @@ export declare class Context7ResolveDiagnosticProbe implements DiagnosticProbe {
|
|
|
29
29
|
*/
|
|
30
30
|
export declare class SourceSearchDiagnosticProbe implements DiagnosticProbe {
|
|
31
31
|
readonly capability: Extract<DiagnosticCapability, 'main_search' | 'docs_search'>;
|
|
32
|
-
readonly provider: Extract<DiagnosticProviderName, 'exa' | 'tavily_search' | 'firecrawl_search'>;
|
|
32
|
+
readonly provider: Extract<DiagnosticProviderName, 'exa' | 'tavily_search' | 'firecrawl_search' | 'parallel_search'>;
|
|
33
33
|
private readonly source;
|
|
34
|
-
constructor(capability: Extract<DiagnosticCapability, 'main_search' | 'docs_search'>, provider: Extract<DiagnosticProviderName, 'exa' | 'tavily_search' | 'firecrawl_search'>, source: Pick<BoundedSourceProvider, 'search'>);
|
|
34
|
+
constructor(capability: Extract<DiagnosticCapability, 'main_search' | 'docs_search'>, provider: Extract<DiagnosticProviderName, 'exa' | 'tavily_search' | 'firecrawl_search' | 'parallel_search'>, source: Pick<BoundedSourceProvider, 'search'>);
|
|
35
35
|
probe(input: DiagnosticProbeInput): Promise<Readonly<DiagnosticProbeResult>>;
|
|
36
36
|
}
|
|
37
37
|
//# sourceMappingURL=probes.d.ts.map
|