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、单入口代理开关、自定义网址、恢复默认。 适合需要无消耗进行代码意图路由、多引擎联网搜索的用户。
インストール
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:MYCF711/dsh-websearch-directドキュメント
README 全文を読む ↗配置项(设置 → 插件 → websearch-direct,也可直接用默认值)
| 配置 | 默认 | 说明 |
|---|---|---|
proxyUrl | 空(直连) | 填 http://127.0.0.1:7890 之类的代理后,海外端点才可用 |
engineOrder | bing, baidu, duckduckgo | 引擎轮询顺序,前一个失败自动换下一个 |
autoRoute | true | 识别到代码意图 → repo,依赖包意图 → pkg |
routePolicy | auto | 同一源的多个入口谁先试。auto:按引擎实测情况(直连可用就先直连,本机实测直连不可达的如 HuggingFace 先走镜像);direct-first / accel-first:全局强制 |
repoEngines | github, gitlab, codeberg, gitea, gitee | repo 合并包含哪些源 |
pkgEngines | npm, crates, packagist, nuget, rubygems, huggingface | pkg 合并包含哪些源 |
githubToken | 空 | 可选,只用于提高 GitHub API 频率上限。只发给 api.github.com 直连入口,不会随请求发给第三方加速代理 |
giteeToken | 空 | Gitee 搜索 API 必需,未配置时 gitee 引擎自动跳过 |
enableGithubMirrors | true | 抓 raw.githubusercontent.com / github.com 失败时自动改用加速镜像重试 |
maxResults | 8 | 每次返回条数 |
timeoutMs | 15000 | 单请求超时 |
compositeMemberMs | 12000 | 组合引擎中单个成员的上限,超时则该成员被放弃并记入 failures |
fetchMaxChars | 20000 | 抓取正文上限 |
enableFetch | true | 是否允许 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顶部的注释:
undici的解析结果缓存的是 Promise 而不是结果 —— 早先的写法在await之前就置了「已尝试」标志,组合引擎并发发起请求时,后到的调用 拿到还没赋值的null,于是「undici 不存在」被当成结论,整条代理链静默失效。 只在「一次搜索里并发多个 HTTP 请求」时现形,串行测试抓不到。ProxyAgent和fetch必须来自同一个 undici 实例。跨实例的new ProxyAgent()交给全局fetch会被拒(TypeError: fetch failed)。