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密钥的用户。

패키지
@hy-sde-org/dsh-web-search-public
호환성
미검증
Harness peer 범위
^0.2.0-rc.2
Cordis peer 범위
~4.0.4
버전
0.2.0-rc.2
라이선스
MIT
최근 업데이트
2026. 10. 3.

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:hy-sde/dsh-web-search-public

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(...).

OptionDefaultPurpose
enginesstartpage, duckduckgo, ecosia, google, mojeekengine ids the fan-out races; this order is the tiebreak for consensus ties; unlisted engines stay disabled
timeoutMs30000per-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
softDeadlineMs5000soft aggregate deadline — return as soon as all engines settled or this passes with ≥1 success
hardDeadlineMs30000hard aggregate deadline — return whatever we have, even nothing; must be ≥ softDeadlineMs
maxRetries1retries 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.
retryDelayMs2000base delay before retry #1 (ms); doubles on each subsequent attempt.
failureCooldownMs300000fast-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.
engineBackoffMs300000base 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.
maxEngineBackoffMs3600000cap for the doubled per-engine circuit-breaker window (ms).
userAgentbrowser-shaped constantUser-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).