DSH Plugin Store
Back to home

qwased

dsh-web-search-duckduckgo

No description

Stars
0
Language
TypeScript
Created
Aug 13, 2026
Updated
Aug 13, 2026
Other
GitHub repo

Introduction

dsh-web-search-duckduckgo

English | 中文

Free DuckDuckGo search for the DeepSeek Harness — no API key, no credentials, no per-search cost. This repository publishes the plugin and its installer bundle:

  • packages/dsh-web-search-duckduckgo/ — the plugin source: a WebSearchProvider (id duckduckgo) registered into ctx.web, plus the model-facing web_search_ddg tool that calls the provider directly.
  • packages/dsh-web-search-duckduckgo-bundle/ — the profile bundle: one patch-layer insert (cordis.patch.yml) mounting the plugin into a dsh --profile composition.
  • dist/ — the built, installable tarballs.

Install

Before the packages reach a registry, install from both tarballs — the bundle pulls the plugin tarball as its dependency:

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

Once @deepseek-ai/* packages reach a registry, the bundle installs by name:

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

Configuration

All options are optional; a deployment that pins another provider on the web seam (the shipped searchProvider: deepseek-official) can offer this free route side by side and let the model pick per turn.

KeyDefaultMeaning
proxy(unset)host:port or http://host:port CONNECT proxy for endpoints a direct connection cannot reach. Unset = direct; a failing tunnel falls back to a direct fetch.
regionus-enRegion code for the HTML form's l field (e.g. us-en, uk-en, de-de).
baseURLhttps://html.duckduckgo.com/html/HTML search endpoint, searched with a POST q/b/l form.
fallbackBaseURLhttps://api.duckduckgo.com/Instant Answer JSON endpoint used when HTML yields no sources.
userAgentbrowser UAUser-Agent header sent on every request.
timeoutMs30000Per-request timeout budget in ms.
maxResults8Source cap when a request carries no maxResults.

Configure through the web-search-duckduckgo settings namespace or a composition overlay:

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

How it works

The HTML search POSTs a q/b/l form (query, bang placeholder, region) to html.duckduckgo.com/html/, so result__a hrefs come back as direct links instead of the advertising uddg wrapper a GET returns. Results are parsed from the current results_links layout, normalized (Unicode NFC, control characters removed), and y.js advertising trackers are dropped. When HTML yields no sources, the Instant Answer JSON endpoint is the fallback. An optional zero-dependency CONNECT tunnel (node:net + node:tls) reaches endpoints a direct connection cannot.

Build from source

The packages build inside the DeepSeek Harness pnpm workspace (packages/web/web-search-duckduckgo, packages/bundle/web-search-duckduckgo); workspace-scoped @deepseek-ai/* dependencies resolve from that workspace or the published @deepseek-ai packages. To rebuild the tarballs:

# plugin
pnpm --filter @deepseek-ai/dsh-web-search-duckduckgo pack --out dist/dsh-web-search-duckduckgo.tgz
# bundle
pnpm --filter @deepseek-ai/dsh-web-search-duckduckgo-bundle pack --out dist/dsh-web-search-duckduckgo-bundle.tgz

License

MIT