FANXING-0710/dsh-web-search-opencode ↗★ 0
dsh-web-search-opencode
OpenCode-style web search (Exa / Parallel MCP) provider for the DeepSeek Harness ctx.web seam. Gives any model, including opencode-go's deepseek-v4-flash, a working web_search tool without a DeepSeek official API key.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:FANXING-0710/dsh-web-search-opencode说明文档
阅读完整 README ↗dsh-web-search-opencode
为 DeepSeek Harness(dsh)的 ctx.web 搜索能力缝提供 OpenCode 同款搜索 的 provider 插件:让使用 opencode-go key 驱动 deepseek-v4-flash 等模型的会话,web_search 工具可以直接可用,不需要 DeepSeek 官方 API key。
原理
opencode 的 web 搜索不经过 opencode-go 服务器(opencode.ai/zen/go/v1 只有 chat/completions、messages、models、responses、usage 五个端点,没有搜索端点),而是客户端直连第三方 MCP 端点(见 sst/opencode 的 tool/websearch.ts + tool/mcp-websearch.ts):
| 后端 | 端点 | 工具名 |
|---|---|---|
| Exa | https://mcp.exa.ai/mcp | web_search_exa |
| Parallel | https://search.parallel.ai/mcp | web_search |
请求为 JSON-RPC 2.0 tools/call,25 秒超时,响应是直接 JSON 或 SSE(data: 前缀行)。本插件完全复刻这套行为,注册进 DSH 的 ctx.web 缝:
模型(如 opencode-go/deepseek-v4-flash)
→ 调用 web_search 工具(DSH tool-web 插件注册)
→ ctx.web.search()(DSH 搜索能力缝)
→ 本插件 OpenCodeGoSearchProvider.search()
→ JSON-RPC → Exa / Parallel MCP
→ 返回 { content: 全文, sources: [{url,title,snippet,publishedAt}] }
→ tool-web 格式化成 markdown 结果给模型
DSH 默认的 web-search-deepseek provider 需要 DEEPSEEK_API_KEY(DeepSeek 官方 API,走 Anthropic 兼容端点的 web_search_20250305 服务端工具),只有 opencode-go key 时不可用(报 WEB_PROVIDER_CONFIGURED_UNAVAILABLE)。本插件的 available() 恒为 true(两个 MCP 端点免 key),并覆盖 web 行的 searchProvider 指向它。
安装
# npm 安装(推荐)
npx dsh plugin --profile web add dsh-web-search-opencode
# 或直接从 GitHub 安装(pnpm ≥10 首次会要求把包名加入 profile 的
# pnpm-workspace.yaml 的 allowBuilds 再重跑)
npx dsh plugin --profile web add github:FANXING-0710/dsh-web-search-opencode
装完重启 dsh web 生效(正在运行的实例是启动时加载插件树的)。
配置
默认无需任何配置。可选配置项(在 profile 的 cordis.patch.yml 覆盖 web-search-opencode 行的 config,或设置环境变量):