dsh-web-search-enhanced 0.2.2 → 0.2.4

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 CHANGED
@@ -1,5 +1,7 @@
1
1
  # dsh-web-search-enhanced
2
2
 
3
+ Requires DSH `>=0.2.2-rc.1 <0.3.0-0` and Node `>=24.9.0`. Development and isolated end-to-end tests target the exact published DSH `0.2.2-rc.1` release.
4
+
3
5
  Search half of [dsh-tool-web-enhanced-profile](../profile/README.md).
4
6
  **Install the profile, not this package**: the profile mounts this package as
5
7
  row `web-search-enhanced` and selects its provider in the shared `web` row.
@@ -19,17 +21,24 @@ Choose a search connection per conversation from the composer menu or
19
21
  the next model request step. Operators decide which connections exist: DSH's
20
22
  own DeepSeek search (the default) and DeepSeek Search API, the conversation's
21
23
  own model (`builtin:session-model`), Exa, Firecrawl, Tavily, Tinyfish,
22
- OpenAlex and Semantic Scholar, plus custom adapter connections and fixed-model
24
+ AnySearch, OpenAlex and Semantic Scholar, plus custom adapter connections and fixed-model
23
25
  connections over Anthropic Messages, OpenAI Responses or OpenAI Chat
24
26
  Completions. Native connections keep the behaviour of DSH's own providers;
25
27
  only their error messages are restated.
26
28
 
27
29
  - **Remote services start off.** DeepSeek Search API, Exa, Firecrawl, Tavily,
28
- Tinyfish, OpenAlex and Semantic Scholar must be turned on in the row
30
+ Tinyfish, AnySearch, OpenAlex and Semantic Scholar must be turned on in the row
29
31
  settings before a conversation can choose them; turning one on agrees that
30
32
  queries go to it. DeepSeek Messages (the default) and the conversation model
31
33
  stay on; custom connections are on when created. When every remote service
32
34
  is off, the composer menu says more services can be turned on in settings.
35
+ - **AnySearch takes a personal API key only** (`ANYSEARCH_API_KEY`, the same
36
+ credential name as AnySearch's own plugin): the service has an anonymous
37
+ tier, but this plugin does not use it. Its connection options are a region
38
+ (`zone`: `cn` or `intl`) and a preferred language (`language`, such as
39
+ `zh-CN` or `en`). Do not install it together with `@anysearch/anysearch-dsh`:
40
+ that bundle's profile layer writes both fields of the `web` row as
41
+ `anysearch`, so routing leaves this plugin.
33
42
  - **`/setup-search`.** A Host command, so it works in the Web GUI and in
34
43
  dsh-TUI. `off`, a connection id or `freshness auto|fresh|realtime` change
35
44
  the choice from the next model request; dsh-TUI completes these arguments.
package/lib/client.cjs CHANGED
@@ -419,7 +419,7 @@ window.__ModuleLoader__.load({
419
419
  }
420
420
  }
421
421
  //#endregion
422
- //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-typert-protocol@0.2.1-rc.2_@deepseek-ai+cordis@4.0.5/node_modules/@deepseek-ai/dsh-typert-protocol/lib/types/remote-info.js
422
+ //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-typert-protocol@0.2.2-rc.1_@deepseek-ai+cordis@4.1.0/node_modules/@deepseek-ai/dsh-typert-protocol/lib/types/remote-info.js
423
423
  /** Lazy assembly of generated Remote definitions using caller-supplied Zod; no runtime imports. */
424
424
  /**
425
425
  * Retain one generated definition per endpoint without constructing parsers or projections.
@@ -1051,6 +1051,30 @@ window.__ModuleLoader__.load({
1051
1051
  }
1052
1052
  }
1053
1053
  },
1054
+ anysearch: {
1055
+ label: "AnySearch",
1056
+ endpoint: "https://api.anysearch.com/v1/search",
1057
+ access: {
1058
+ keyless: false,
1059
+ apiKey: { credentialRef: "ANYSEARCH_API_KEY" },
1060
+ account: false
1061
+ },
1062
+ kind: "adapter",
1063
+ remote: true,
1064
+ optIn: true,
1065
+ freshness: [],
1066
+ homepage: "https://www.anysearch.com",
1067
+ options: {
1068
+ zone: {
1069
+ kind: "enum",
1070
+ values: ["cn", "intl"]
1071
+ },
1072
+ language: {
1073
+ kind: "text",
1074
+ pattern: /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8}){0,2}$/u
1075
+ }
1076
+ }
1077
+ },
1054
1078
  openalex: {
1055
1079
  label: "OpenAlex",
1056
1080
  endpoint: "https://api.openalex.org/works",
@@ -4442,7 +4466,7 @@ window.__ModuleLoader__.load({
4442
4466
  "route.deepseekApi": "Search uses the built-in API provider, not {id}. Open the bundle page to review and restore both enhanced provider routes.",
4443
4467
  "defaults.title": "Defaults",
4444
4468
  "defaults.connection": "Default connection",
4445
- "defaults.connectionHint": "A conversation that hasn't chosen uses, in order: its parent's choice (forked conversations only), the last choice for its model, then the default.",
4469
+ "defaults.connectionHint": "A conversation that hasn't chosen uses its model's last choice, then the default. Only subagent_fork inherits a parent's choice; ordinary forks and spawn are independent.",
4446
4470
  "defaults.connectionUnset": "Default ({name})",
4447
4471
  "defaults.connectionMissing": "Missing: {id}",
4448
4472
  "defaults.freshness": "Default freshness",
@@ -4542,6 +4566,9 @@ window.__ModuleLoader__.load({
4542
4566
  "option.tinyfish.purpose": "Purpose",
4543
4567
  "option.tinyfish.purpose.placeholder": "What the searches are for",
4544
4568
  "option.tinyfish.domain_type": "Content type",
4569
+ "option.anysearch.zone": "Region",
4570
+ "option.anysearch.language": "Preferred language",
4571
+ "option.anysearch.language.placeholder": "e.g. zh-CN or en",
4545
4572
  "option.openalex.sort": "Sort",
4546
4573
  "option.openalex.sort.placeholder": "e.g. cited_by_count:desc",
4547
4574
  "option.openalex.filter": "Filter",
@@ -4703,7 +4730,7 @@ window.__ModuleLoader__.load({
4703
4730
  "route.deepseekApi": "搜索正在使用内置 API provider,而非 {id}。请在 组合包页面检查并恢复两项增强 provider 路由。",
4704
4731
  "defaults.title": "默认值",
4705
4732
  "defaults.connection": "默认连接",
4706
- "defaults.connectionHint": "未自行选择的会话依次使用:父会话的选择(仅限分叉出的会话)、该模型上次的选择、默认连接。",
4733
+ "defaults.connectionHint": "未自行选择的会话依次使用该模型上次的选择、默认连接。仅 subagent_fork 继承父会话选择;普通分叉与 spawn 独立选择。",
4707
4734
  "defaults.connectionUnset": "默认({name})",
4708
4735
  "defaults.connectionMissing": "不存在:{id}",
4709
4736
  "defaults.freshness": "默认实时性",
@@ -4803,6 +4830,9 @@ window.__ModuleLoader__.load({
4803
4830
  "option.tinyfish.purpose": "用途说明",
4804
4831
  "option.tinyfish.purpose.placeholder": "简述搜索目的",
4805
4832
  "option.tinyfish.domain_type": "内容类型",
4833
+ "option.anysearch.zone": "地区",
4834
+ "option.anysearch.language": "偏好语言",
4835
+ "option.anysearch.language.placeholder": "如 zh-CN 或 en",
4806
4836
  "option.openalex.sort": "排序",
4807
4837
  "option.openalex.sort.placeholder": "如 cited_by_count:desc",
4808
4838
  "option.openalex.filter": "过滤条件",
@@ -4925,11 +4955,11 @@ window.__ModuleLoader__.load({
4925
4955
  document.head.appendChild(style);
4926
4956
  }
4927
4957
  var Section_module_css_default = {
4928
- "container": "La6KHG_container",
4929
- "label": "La6KHG_label",
4930
4958
  "caption": "La6KHG_caption",
4959
+ "segmented": "La6KHG_segmented",
4960
+ "label": "La6KHG_label",
4931
4961
  "error": "La6KHG_error",
4932
- "segmented": "La6KHG_segmented"
4962
+ "container": "La6KHG_container"
4933
4963
  };
4934
4964
  //#endregion
4935
4965
  //#region src/client/section.ts
@@ -4996,73 +5026,73 @@ window.__ModuleLoader__.load({
4996
5026
  document.head.appendChild(style);
4997
5027
  }
4998
5028
  var Settings_module_css_default = {
4999
- "intro": "o9fCSq_intro",
5000
- "disclosureOpen": "o9fCSq_disclosureOpen",
5001
- "optionGroup": "o9fCSq_optionGroup",
5002
- "trustCheck": "o9fCSq_trustCheck",
5003
- "trust": "o9fCSq_trust",
5004
- "field": "o9fCSq_field",
5005
- "optionKey": "o9fCSq_optionKey",
5006
- "success": "o9fCSq_success",
5007
- "sectionHead": "o9fCSq_sectionHead",
5008
- "confirmText": "o9fCSq_confirmText",
5009
- "confirmRow": "o9fCSq_confirmRow",
5010
- "inline": "o9fCSq_inline",
5011
- "prefixedInput": "o9fCSq_prefixedInput",
5012
- "rowTitle": "o9fCSq_rowTitle",
5013
- "rowMain": "o9fCSq_rowMain",
5014
- "rowActions": "o9fCSq_rowActions",
5015
- "page": "o9fCSq_page",
5016
- "selectValue": "o9fCSq_selectValue",
5017
- "prefixedDisabled": "o9fCSq_prefixedDisabled",
5018
- "rowMeta": "o9fCSq_rowMeta",
5019
- "reset": "o9fCSq_reset",
5020
- "actions": "o9fCSq_actions",
5021
- "settingControl": "o9fCSq_settingControl",
5022
- "fieldLabel": "o9fCSq_fieldLabel",
5023
5029
  "section": "o9fCSq_section",
5030
+ "optionWide": "o9fCSq_optionWide",
5031
+ "error": "o9fCSq_error",
5032
+ "settingRow": "o9fCSq_settingRow",
5033
+ "page": "o9fCSq_page",
5034
+ "select": "o9fCSq_select",
5035
+ "rowTitle": "o9fCSq_rowTitle",
5024
5036
  "formGrid": "o9fCSq_formGrid",
5025
- "formWide": "o9fCSq_formWide",
5026
- "selectCompact": "o9fCSq_selectCompact",
5027
- "textarea": "o9fCSq_textarea",
5028
- "prefix": "o9fCSq_prefix",
5037
+ "optionKey": "o9fCSq_optionKey",
5029
5038
  "fieldError": "o9fCSq_fieldError",
5030
- "sectionActions": "o9fCSq_sectionActions",
5039
+ "intro": "o9fCSq_intro",
5040
+ "danger": "o9fCSq_danger",
5041
+ "inline": "o9fCSq_inline",
5042
+ "optionGroup": "o9fCSq_optionGroup",
5043
+ "rowActions": "o9fCSq_rowActions",
5031
5044
  "optionName": "o9fCSq_optionName",
5032
- "row": "o9fCSq_row",
5033
- "editorTitle": "o9fCSq_editorTitle",
5034
- "optionWide": "o9fCSq_optionWide",
5035
- "sectionTitle": "o9fCSq_sectionTitle",
5036
- "fieldHead": "o9fCSq_fieldHead",
5045
+ "hint": "o9fCSq_hint",
5046
+ "prefixedInput": "o9fCSq_prefixedInput",
5047
+ "formWide": "o9fCSq_formWide",
5048
+ "field": "o9fCSq_field",
5049
+ "settingLead": "o9fCSq_settingLead",
5037
5050
  "optionGrid": "o9fCSq_optionGrid",
5038
- "input": "o9fCSq_input",
5039
- "list": "o9fCSq_list",
5040
- "optionGroupTitle": "o9fCSq_optionGroupTitle",
5041
- "fieldState": "o9fCSq_fieldState",
5042
- "settingText": "o9fCSq_settingText",
5043
5051
  "note": "o9fCSq_note",
5044
- "settingRow": "o9fCSq_settingRow",
5045
- "error": "o9fCSq_error",
5046
- "rowLine": "o9fCSq_rowLine",
5047
- "formField": "o9fCSq_formField",
5048
- "link": "o9fCSq_link",
5049
- "danger": "o9fCSq_danger",
5050
- "select": "o9fCSq_select",
5051
- "status": "o9fCSq_status",
5052
- "editor": "o9fCSq_editor",
5052
+ "success": "o9fCSq_success",
5053
+ "disclosureOpen": "o9fCSq_disclosureOpen",
5054
+ "trust": "o9fCSq_trust",
5053
5055
  "panel": "o9fCSq_panel",
5056
+ "selectCompact": "o9fCSq_selectCompact",
5057
+ "editor": "o9fCSq_editor",
5058
+ "empty": "o9fCSq_empty",
5059
+ "status": "o9fCSq_status",
5060
+ "prefixedDisabled": "o9fCSq_prefixedDisabled",
5061
+ "fieldState": "o9fCSq_fieldState",
5062
+ "rowMeta": "o9fCSq_rowMeta",
5063
+ "prefixed": "o9fCSq_prefixed",
5064
+ "settingControl": "o9fCSq_settingControl",
5054
5065
  "selectAnchor": "o9fCSq_selectAnchor",
5055
- "segmented": "o9fCSq_segmented",
5056
5066
  "disclosure": "o9fCSq_disclosure",
5057
- "hint": "o9fCSq_hint",
5058
5067
  "option": "o9fCSq_option",
5068
+ "editorTitle": "o9fCSq_editorTitle",
5069
+ "link": "o9fCSq_link",
5070
+ "prefix": "o9fCSq_prefix",
5071
+ "segmented": "o9fCSq_segmented",
5072
+ "formField": "o9fCSq_formField",
5059
5073
  "selectChevron": "o9fCSq_selectChevron",
5060
- "settingTitle": "o9fCSq_settingTitle",
5061
- "empty": "o9fCSq_empty",
5062
- "settingLead": "o9fCSq_settingLead",
5063
- "prefixed": "o9fCSq_prefixed",
5074
+ "optionGroupTitle": "o9fCSq_optionGroupTitle",
5064
5075
  "disclosureIcon": "o9fCSq_disclosureIcon",
5065
- "warning": "o9fCSq_warning"
5076
+ "rowMain": "o9fCSq_rowMain",
5077
+ "sectionHead": "o9fCSq_sectionHead",
5078
+ "settingTitle": "o9fCSq_settingTitle",
5079
+ "trustCheck": "o9fCSq_trustCheck",
5080
+ "warning": "o9fCSq_warning",
5081
+ "textarea": "o9fCSq_textarea",
5082
+ "reset": "o9fCSq_reset",
5083
+ "sectionActions": "o9fCSq_sectionActions",
5084
+ "confirmText": "o9fCSq_confirmText",
5085
+ "sectionTitle": "o9fCSq_sectionTitle",
5086
+ "rowLine": "o9fCSq_rowLine",
5087
+ "selectValue": "o9fCSq_selectValue",
5088
+ "settingText": "o9fCSq_settingText",
5089
+ "fieldLabel": "o9fCSq_fieldLabel",
5090
+ "actions": "o9fCSq_actions",
5091
+ "row": "o9fCSq_row",
5092
+ "list": "o9fCSq_list",
5093
+ "fieldHead": "o9fCSq_fieldHead",
5094
+ "input": "o9fCSq_input",
5095
+ "confirmRow": "o9fCSq_confirmRow"
5066
5096
  };
5067
5097
  //#endregion
5068
5098
  //#region src/client/settings/CredentialEditor.tsx
@@ -5244,6 +5274,13 @@ window.__ModuleLoader__.load({
5244
5274
  },
5245
5275
  domain_type: { label: "option.tinyfish.domain_type" }
5246
5276
  },
5277
+ anysearch: {
5278
+ zone: { label: "option.anysearch.zone" },
5279
+ language: {
5280
+ label: "option.anysearch.language",
5281
+ placeholder: "option.anysearch.language.placeholder"
5282
+ }
5283
+ },
5247
5284
  openalex: {
5248
5285
  sort: {
5249
5286
  label: "option.openalex.sort",