dsh-web-search-duckduckgo
by qwased
DeepSeek Harness 的免费 DuckDuckGo 搜索——无 API key、无凭证、无按次成本;仓库发布两个 npm 包
Free DuckDuckGo search for the DeepSeek Harness — no API key, no credentials, no per-search cost. This repository publishes two npm packages:
安装
dsh plugin --profile web add github:qwased/dsh-web-search-duckduckgoGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
English | 中文
为 DeepSeek Harness 提供的免费 DuckDuckGo 搜索——无需 API key、无需凭据、每次搜索零成本。本仓库发布两个 npm 包:
packages/dsh-web-search-duckduckgo/— 实现包:注册进ctx.web的WebSearchProvider(idduckduckgo),以及直接调用该 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-duckduckgosettings 节每次搜索时重新解析;提交 settings 改动无需重挂插件或重启。
配置
所有选项均可选;部署时可以在 web seam 上固定另一个 provider(出厂配置为 searchProvider: deepseek-official),同时并提供这条免费路线,让模型每轮自行选择。
| 键 | 默认值 | 含义 |
|---|---|---|
proxy |
(未设置) | host:port 或 http://host:port 形式的 CONNECT 代理,用于直连无法到达的端点。未设置 = 直连;隧道失败自动回退直连。 |
region |
us-en |
HTML 表单 l 字段的区域代码(如 us-en、uk-en、de-de)。 |
baseURL |
https://html.duckduckgo.com/html/ |
HTML 搜索端点,通过 POST q/b/l 表单搜索。 |
fallbackBaseURL |
https://api.duckduckgo.com/ |
HTML 无结果时使用的 Instant Answer JSON 端点。 |
userAgent |
浏览器 UA | 每次请求发送的 User-Agent 头。 |
timeoutMs |
30000 |
单次请求超时(毫秒)。 |
maxResults |
8 |
请求未携带 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
原始 README: https://github.com/qwased/dsh-web-search-duckduckgo/blob/master/README.zh.md ↗
同类插件
查看全部 →
dsh-anchored-standard
两阶段 DeepSeek Harness 预设:先 Minimal 对齐的 bootstrap,再切完整 Standard 工具(Project2 98/99)

PicGo-Core
极致的图片上传引擎,CLI 与 API 双支持

awesome-deepseek-harness
DeepSeek Harness(DSH)及其优秀社区插件的精选指南。

awesome-deepseek-harness
DeepSeek Harness (DSH)生态系统:来自dsh-external/hub和公共dsh-plugin主题的精选插件、工具和基础设施。

AI-Novel-Writer
本地优先 AI 小说创作工作台,提供 Windows/macOS 桌面版与 DeepSeek Harness 插件开发预览,支持角色、大纲、章节蓝图、审稿修稿和本地模型。

mcp-for-stata
MCP-for-Stata:把 Stata 集成进你的 agent