hy-sde/dsh-web-search-public ↗★ 0
@hy-sde-org/dsh-web-search-public
Credential-free concurrent web search fan-out for DeepSeek Harness (Startpage, DuckDuckGo, Ecosia, Google, Mojeek, consensus-merged, soft/hard deadlines) 适合需要多引擎并发搜索且不想配置API密钥的用户。
インストール
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:hy-sde/dsh-web-search-publicドキュメント
README 全文を読む ↗Verify the composed configuration
dsh web --dump-config
The composed tree must show web.config.searchProvider: public and a web-search-public
plugin row loading @hy-sde-org/dsh-web-search-public.
Configuration
All options are optional; constants fill the defaults. Configure via the plugin row’s
config: in your profile patch, or programmatically via ctx.plugin(...).
| Option | Default | Purpose |
|---|---|---|
engines | startpage, duckduckgo, ecosia, google, mojeek | engine ids the fan-out races; this order is the tiebreak for consensus ties; unlisted engines stay disabled |
timeoutMs | 30000 | per-engine transport timeout (ms): bounds one engine even if it ignores aggregate cancellation; browser-backed engines may spend it on fetch → stealth-browser escalation, so the default is 30 s |
softDeadlineMs | 5000 | soft aggregate deadline — return as soon as all engines settled or this passes with ≥1 success |
hardDeadlineMs | 30000 | hard aggregate deadline — return whatever we have, even nothing; must be ≥ softDeadlineMs |
maxRetries | 1 | retries for the all-engines-failed aggregate when at least one engine died from a retryable transport failure (HTTP 5xx, a timeout, or a network fetch failure). Each retry re-runs the whole fan-out after a backoff, so a short engine throttle that strips the first attempt still yields results. 0 disables retrying. Hard blocks (HTTP 4xx) are never retried — they open that engine’s circuit breaker — and a pure all-no results aggregate is query-level and never retried. |
retryDelayMs | 2000 | base delay before retry #1 (ms); doubles on each subsequent attempt. |
failureCooldownMs | 300000 | fast-fail window (ms) after an all-engines-down failure (retry exhausted, or every engine hard-blocked/tripped): searches in this window return a clear retry in about Ns error instead of re-blasting engines that just throttled us (which would deepen the block). 0 disables the window. |
engineBackoffMs | 300000 | base per-engine circuit-breaker window (ms): an engine that hard-blocks (HTTP 4xx) or returns no results on consecutive searches is skipped for this long instead of being re-blasted on every search. Doubles per consecutive trip up to maxEngineBackoffMs; resets after a successful probe. 0 disables the per-engine breaker. |
maxEngineBackoffMs | 3600000 | cap for the doubled per-engine circuit-breaker window (ms). |
userAgent | browser-shaped constant | User-Agent sent to the engines (deliberately not the product UA) |
- id: web-search-public
name: '@hy-sde-org/dsh-web-search-public'
config:
engines: [startpage, duckduckgo, google, mojeek] # drop Ecosia, reorder
timeoutMs: 30000
softDeadlineMs: 4000
hardDeadlineMs: 25000
maxRetries: 1
retryDelayMs: 2000
failureCooldownMs: 300000
engineBackoffMs: 300000
maxEngineBackoffMs: 3600000
PublicEngineId values are the exported engine ids; any id outside the known set is dropped
at startup, and a zero-engine config makes available() false (surfacing
WEB_PROVIDER_CONFIGURED_UNAVAILABLE).