All plugins

DSH / BUNDLE / BUNDLES

dsh-web-search-ddg

v0.2.1korosu / dsh-web-search-ddgca73fb507c

InstallableBundlesBundles & other modulesCommunity · Topic auto-analysis

Overview

dsh-web-search-ddg

Zero-token DuckDuckGo HTML-scrape search provider for the DeepSeek Harness web capability seam (ctx.web): no API key, no auxiliary model request.

README / EN

Package documentation

Registry summary

Zero-token DuckDuckGo HTML-scrape search provider for the DeepSeek Harness web capability seam (ctx.web): no API key, no auxiliary model request.

dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.

Read the full README on GitHub

LIMITATIONS

Known limitations

These limits define when the provider is a poor fit. - **Anomaly detection is signature-based** — a 2xx that carries no result markup counts as throttling and trips the failure budget: the HTTP 202 anomaly, and any status answered by a page with no `#links` container at all (live-verified: every served page — organic results, fuzzy matches, the true no-results page — carries the container; only the challenge does not). A challenge served over HTTP 200 that still carries `#links` but no rows reads as a genuinely empty query. - **No retry inside the provider** — a single transient failure surfaces to the caller as a structured error; only repetition (the budget) makes the provider step aside. Deciding whether to retry one failed query is the caller's job. - **Scraped markup is brittle** — drift that removes the `#links` container now raises a transient failure instead of a silent empty result, but drift that keeps the container and only renames row classes still parses to zero sources and reads like a poor query. - **A row with a blank title or unusable URL is dropped** — there is no portable value to map, so fewer sources than requested can return. - **`truncated` is never `true`** — the provider caps its usable output at `request.maxResults` (or the configured default), so the seam never sees an over-return and never flips the flag. A caller cannot tell that a page held more results than it received; request more rows if you need to know. - **No `publishedAt`, no `content`** — the static markup carries neither, so publication-date filtering and provider answers are unavailable; the keyed backends do expose them. - **Query shaping is not exposed** — region, safesearch, time and type filters, and paging have no provider-neutral service fields to hang on yet; the config surface covers `endpoint`, `maxResults`, and the failure-budget knobs. - **Abort classification is error-shape-based** — only a `DOMException` named `AbortError`, or an already-aborted signal, maps to `WEB_ABORTED`; an abort carrying a custom reason surfaces as `WEB_PROVIDER_ERROR`. - **Unauthenticated scraping carries terms-of-service risk** — high-volume deployments should use a licensed or first-party backend.