TonyDua/dsh-web-search-exa ↗★ 9

@tonydua/dsh-web-search-exa

Zero-config Exa web search provider for DeepSeek Harness (dsh): keyless anonymous MCP fallback (mcp.exa.ai/mcp) plus keyed REST search — a drop-in WebSearchProvider for the ctx.web seam, no API key required. 适合需要为DSH配置无需API Key的匿名网页搜索或官方Exa检索服务的用户。

패키지
@tonydua/dsh-web-search-exa
호환성
미검증
Harness peer 범위
>=0.1.2-alpha.2 || >=0.1.3-alpha.2 || >=0.1.4-0 || >=0.1.5-alpha.1 || >=0.1.6-alpha.1 || >=0.1.7-alpha.1 || >=0.1.8
Cordis peer 범위
>=4.0.2
버전
0.1.5
라이선스
MIT
최근 업데이트
2026. 9. 25.

설치

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

Configuration

KeyDefaultMeaning
apiKeyunsetLiteral Exa API key. Empty or missing enables the anonymous MCP path.
apiKeyEnvEXA_API_KEYEnvironment variable read when no literal apiKey is set.
baseURLhttps://api.exa.aiExa API base URL. The keyed REST path appends /search, matching the official dsh provider.
apiURLunsetDeprecated full REST endpoint alias. Takes precedence over baseURL when set.
mcpURLhttps://mcp.exa.ai/mcpExa hosted MCP endpoint, used by the anonymous path.
searchTypeautoREST retrieval mode: auto, keyword, or neural.
numResultsunsetDefault result count when a request carries no maxResults.
highlightsPerResult1Highlight sentences requested per result on the REST path.
providerIdexaProvider id registered into ctx.web. Change it only when this package and the official one are installed together, see Coexistence with the official package.

Where to put the config: edit this plugin's config in $DSH_HOME/profiles/web/cordis.patch.yml, then restart dsh web. The environment variables EXA_API_KEY and $DSH_WEB_SEARCH_PROVIDER work too. apiKey is marked role('secret'), so no describe() response exposes its value.

In the Web panel

In this version the config lives in the profile patch layer, not the Web UI, and there is no editable form. The Settings UI only renders cards that client plugins register by hand for fixed namespaces (shell, agent-loop, web-search-deepseek); it has no generic form for an arbitrary plugin namespace. The current state:

  • Plugin inventory (Settings → Plugins): a web-search-exa entry appears automatically once the plugin is enabled. The inventory reads live entries from the Cordis loader, so no extra code is involved.
  • Settings namespace (server side): the plugin registers a web-search-exa section through the ctx.settings.installSection API, and the data layer accepts writes. But no client card binds to it, so the UI does not show it. The built-in Web search card edits the official web-search-deepseek namespace, which is unrelated to this plugin.
  • Search result cards: web_search calls render the usual web result cards through dsh-tool-web (sources, excerpts, dates), regardless of provider. Anonymous Exa results look identical to DeepSeek search results.

Roadmap: the next version adds a client card registered into the settings.plugin.item slot and bound to the web-search-exa namespace, so every field in the table above becomes editable in Settings → Plugins.