편집자 노트

qwased/dsh-web-search-duckduckgo

Free DuckDuckGo search for the DeepSeek Harness — no API key, no credentials, no per-search cost. This repository publishes two npm packages:

이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.

dsh-web-search-duckduckgo

English | 中文

DeepSeek Harness 提供的免费 DuckDuckGo 搜索——无需 API key、无需凭据、每次搜索零成本。本仓库发布两个 npm 包:

  • packages/dsh-web-search-duckduckgo/实现包:注册进 ctx.webWebSearchProvider(id duckduckgo),以及直接调用该 provider 的模型可见工具 web_search_ddg。它本身不声明 dsh.bundle,不作为组合层安装。
  • packages/dsh-web-search-duckduckgo-bundle/可安装 bundle:声明 dsh.bundle.patch,其 cordis.patch.yml 插入一行 web-search-duckduckgo。该行指向 bundle 自己的入口(bundle 入口 re-export 内嵌的实现包),因此打包产物自包含——bundleDependencies 会把实现包(连同 schemastery/cosmokit)一起打进 tarball。
  • dist/ — 构建好的 tarball。分发时只需要 bundle 一个文件。

安装

打包产物已内嵌实现包,单条命令即可安装并挂载进 profile:

dsh plugin --profile <name> add ./dist/dsh-web-search-duckduckgo-bundle.tgz

安装后重启该 profile(新增 bundle 层/新包需要重启;cordis.patch.yml 和 settings 的改动是热生效的),可以用 dsh --profile <name> --dump-config 确认组合树里出现 web-search-duckduckgo 行。

包发布到 registry 后同样按 bundle 名安装:

dsh plugin --profile <name> add @deepseek-ai/dsh-web-search-duckduckgo-bundle

只安装实现包(./dist/dsh-web-search-duckduckgo.tgz)会作为普通依赖落地,不产生组合层;它供希望在自己的 cordis.patch.yml 里手动挂载该行的部署使用。

热插拔与动态加载

  • 加载dsh plugin add 是 profile 管理的 pnpm 安装 + dsh.profile.bundles 协调;bundle 补丁在空根上组成插件树,web-search-duckduckgo 行与其它 DSH 行同级。
  • 卸载dsh plugin --profile <name> remove @deepseek-ai/dsh-web-search-duckduckgo-bundle 移除依赖和 bundle 层;在 profile 自己的 cordis.patch.yml{ id: web-search-duckduckgo, disabled: true } 可以不改包临时停用,改回即恢复。
  • 运行时清理:插件是命名导出函数插件(name/inject/Config/apply,无 default export);provider、web_search_ddg 工具、system-prompt 节、settings 节全部是 fiber 作用域 effect,HMR 替换/行移除时随 fiber 一起回卷。单测和安装产物验证都覆盖了 dispose 后工具与 provider 消失。
  • 配置热生效web-search-duckduckgo settings 节每次搜索时重新解析;提交 settings 改动无需重挂插件或重启。

配置

所有选项均可选;部署时可以在 web seam 上固定另一个 provider(出厂配置为 searchProvider: deepseek-official),同时并提供这条免费路线,让模型每轮自行选择。

默认值含义
proxy(未设置)host:porthttp://host:port 形式的 CONNECT 代理,用于直连无法到达的端点。未设置 = 直连;隧道失败自动回退直连。
regionus-enHTML 表单 l 字段的区域代码(如 us-enuk-ende-de)。
baseURLhttps://html.duckduckgo.com/html/HTML 搜索端点,通过 POST q/b/l 表单搜索。
fallbackBaseURLhttps://api.duckduckgo.com/HTML 无结果时使用的 Instant Answer JSON 端点。
userAgent浏览器 UA每次请求发送的 User-Agent 头。
timeoutMs30000单次请求超时(毫秒)。
maxResults8请求未携带 maxResults 时的结果数上限。

通过 web-search-duckduckgo 设置命名空间或组合覆盖层配置:

- id: web-search-duckduckgo
  name: '@deepseek-ai/dsh-web-search-duckduckgo-bundle'
  config:
    proxy: http://127.0.0.1:8080

工作原理

HTML 搜索通过 POST q/b/l 表单(查询词、bang 占位、区域)提交到 html.duckduckgo.com/html/,因此 result__a 的 href 以直链形式返回,而不是 GET 时的 uddg 广告包装。结果按当前的 results_links 布局解析、归一化(Unicode NFC、去除控制字符),并丢弃 y.js 广告追踪链接。当 HTML 无结果时回退到 Instant Answer JSON 端点。可选的零依赖 CONNECT 隧道(node:net + node:tls)用于直连无法到达的端点。

从源码构建

本仓库自带 pnpm workspace,可以独立于 DeepSeek Harness checkout 安装、构建、测试和打包:

pnpm install
pnpm build
pnpm test
pnpm pack

pnpm-workspace.yaml 使用 nodeLinker: hoisted,这是 bundleDependencies 打包所要求的。重新生成的 tarball 落在 dist/;分发时只需要 dsh-web-search-duckduckgo-bundle.tgz 一个文件。

许可证

MIT

REPOSITORY SIGNALS

보안 및 설치 증거

이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.

출처 추적 가능

공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.

라이선스

저장소가 MIT 라이선스를 선언했습니다.

유지보수 활동

최근 180일 내 코드 업데이트가 있습니다.

설치 증거

재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.

설치 라이프사이클 스크립트

검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.