MYCF711/dsh-websearch-direct ↗★ 2

dsh-websearch-direct

免 API Key 的 dsh 联网搜索 / 网页抓取插件:引擎=逻辑源、入口=直连/镜像/加速路由自动回退(GitHub/GitLab/Codeberg/Gitea + npm/crates/Packagist/NuGet/RubyGems/Maven/HuggingFace + Bing/百度/DuckDuckGo),代码意图自动路由,可选代理,不消耗任何模型 token。设置页内置配置卡片(一级抽屉):Key、单入口代理开关、自定义网址、恢复默认。 适合需要无消耗进行代码意图路由、多引擎联网搜索的用户。

Package
dsh-websearch-direct
Compatibility
Unverified
Cordis peer range
^4.0.1
Version
0.4.11
License
GPL-3.0
Last updated
Sep 20, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:MYCF711/dsh-websearch-direct

配置项(设置 → 插件 → websearch-direct,也可直接用默认值)

配置默认说明
proxyUrl空(直连)填 http://127.0.0.1:7890 之类的代理后,海外端点才可用
engineOrderbing, baidu, duckduckgo引擎轮询顺序,前一个失败自动换下一个
autoRoutetrue识别到代码意图 → repo,依赖包意图 → pkg
routePolicyauto同一源的多个入口谁先试。auto:按引擎实测情况(直连可用就先直连,本机实测直连不可达的如 HuggingFace 先走镜像);direct-first / accel-first:全局强制
repoEnginesgithub, gitlab, codeberg, gitea, giteerepo 合并包含哪些源
pkgEnginesnpm, crates, packagist, nuget, rubygems, huggingfacepkg 合并包含哪些源
githubToken空可选,只用于提高 GitHub API 频率上限。只发给 api.github.com 直连入口,不会随请求发给第三方加速代理
giteeToken空Gitee 搜索 API 必需,未配置时 gitee 引擎自动跳过
enableGithubMirrorstrue抓 raw.githubusercontent.com / github.com 失败时自动改用加速镜像重试
maxResults8每次返回条数
timeoutMs15000单请求超时
compositeMemberMs12000组合引擎中单个成员的上限,超时则该成员被放弃并记入 failures
fetchMaxChars20000抓取正文上限
enableFetchtrue是否允许 web_fetch。严格解析:false / 'false' / '0' / 'no' / 'off' 都算关闭

凭据不会被转发给第三方

第三方加速代理会看到整条请求。所以 githubToken 只挂到 tier 0(权威直连) 入口上;走加速入口时一律匿名(宁可撞匿名限流,也不把 PAT 交给无关第三方)。 测试里用无效 token 做了取证:直连入口命中 401(证明 token 确实带上了), 随后加速入口匿名成功(证明 token 没外流)。

关于代理

dsh 是你手动启动的桌面应用,不会继承 WorkBuddy 注入的 HTTP_PROXY / HTTPS_PROXY(我这边的 agent 有,所以能联网,dsh 没有)。 所以 dsh 默认是纯直连。不配代理也能用(Bing CN、百度、各代码/包站点直连可达, 本插件的路由表就是照"国内直连可达"筛的);想用 DuckDuckGo 之类的海外端点再填 proxyUrl。

⚠️ 代理解析链有两个已修的真坑,改动这块代码前请先读 dist/index.js 顶部的注释:

  1. undici 的解析结果缓存的是 Promise 而不是结果 —— 早先的写法在 await 之前就置了「已尝试」标志,组合引擎并发发起请求时,后到的调用 拿到还没赋值的 null,于是「undici 不存在」被当成结论,整条代理链静默失效。 只在「一次搜索里并发多个 HTTP 请求」时现形,串行测试抓不到。
  2. ProxyAgent 和 fetch 必须来自同一个 undici 实例。跨实例的 new ProxyAgent() 交给全局 fetch 会被拒(TypeError: fetch failed)。