chendefine/dsh-web-search-aggregation ↗★ 3

dsh-web-search-aggregation

Aggregated web-search provider for DeepSeek Harness: one prioritized queue over AnySearch / TinyFish / Tavily / Brave / Exa / Firecrawl / Jina / SerpApi / Serper, multiple API keys per entry, ordered fallback per request. 适合需要整合多个搜索API并实现自动降级检索的用户。

패키지
dsh-web-search-aggregation
호환성
미검증
Harness peer 범위
>=0.1.0-rc.6 <0.2.0 || >=0.1.1-rc.1 <1
Cordis peer 범위
>=4.0.1-rc.1 <5
버전
0.1.11
라이선스
MIT
최근 업데이트
2026. 9. 27.

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:chendefine/dsh-web-search-aggregation

Configuration

The Plugins page (侧边栏 → 插件) opens the form one click from the list: the dsh-web-search-aggregation card's 查看 lands on the package page with the full form between its description and its rows; the row's own 配置 control opens the same form under the plugin's title. It edits the web-search-aggregation settings section — derived from the plugin entry's Config schema — live:

plugin configuration card

FieldDefaultDescription
providersnine enabled entries — one per kindThe prioritized queue. Each entry: provider kind (each kind at most once), enabled toggle (a disabled entry stays configured but is skipped), and an optional endpoint base URL overriding the adapter's default. The shipped order carries no meaning; arrange it however you like.
attemptTimeoutMs10000Per-attempt deadline in ms (1000–60000). One attempt is cut off after this long and the queue moves to the next key or entry.

API keys are managed on each entry as masked tags: add one key at a time (+ or Enter), reorder by dragging tags off/on — tag order is the order a save writes and the runtime reads. Stored keys are never read back; a save replaces the whole pool, and closing every tag before saving clears the credential. Each provider's keys live in one fixed credential:

CredentialProviderRequiredValue format
ANYSEARCH_API_KEYAnySearchno — anonymous access worksone key bare, or several joined by ,
TAVILY_API_KEYTavilyyes, for the entry to servesame pool format
TINYFISH_API_KEYTinyFishyes, for the entry to servesame pool format
BRAVE_SEARCH_API_KEYBrave Searchyes, for the entry to servesame pool format
EXA_API_KEYExayes, for the entry to servesame pool format
FIRECRAWL_API_KEYFirecrawlyes, for the entry to servesame pool format
JINA_API_KEYJina Searchyes — the Search API rejects anonymous callssame pool format
SERPAPI_API_KEYSerpApiyes — the API rejects keyless callssame pool format (64-hex keys, no prefix)
SERPER_API_KEYSerperyes — the API rejects keyless calls (403)same pool format (keys carry no prefix)

Combining with other provider plugins

A bundle patch replaces the web seam row's whole config, so the layer applied last determines the final searchProvider / fetchProvider pair. This plugin's patch states only searchProvider: aggregated — it owns the search selection and nothing else. Two consequences:

  • With dsh-web-fetch-playwright installed before this plugin (or without it entirely), nothing needs adjusting: an unconfigured fetchProvider resolves to the single registered fetch provider automatically.

  • If another plugin's layer is applied after this one and resets searchProvider, pin the combined selection in your profile's own profiles/web/cordis.patch.yml — the user layer wins over every bundle layer:

    - id: web
      config:
        searchProvider: aggregated
        fetchProvider: playwright