# Example: enable the local web stack in a DeepSeek Harness deployment. # # 1. Install the package into your DSH profile (it is a DSH bundle — the # shipped local-web.cordis.yml overlay is applied automatically, so the # rows below are what that overlay adds): # # dsh plugin --profile tui add git+https://github.com/stelmakhdigital/dsh-web-automation.git # # Manual alternative: add the rows below to your profile's cordis.yml # (or an overlay applied with `dsh --profile --patch ...`). Every # field is defaulted, so an empty config enables the full local web stack # with the keyless engines (DuckDuckGo + Bing). # # NOTE: this plugin is MUTUALLY EXCLUSIVE with the DSH built-in web # packages (web-search-multi / web-fetch-cached / web-platforms / # tool-web-history / web-browser, e.g. via the DSH examples/web-local # overlay). Registering both fails with WEB_DUPLICATE_PROVIDER — keep one. # The `web` seam row below is REQUIRED: without it the seam sees two usable # search providers and fails with WEB_PROVIDER_AMBIGUOUS. # # 2. (Optional) Browser automation — a separate sub-package, installed from a # local clone (pnpm cannot install a sub-directory of a git repo): # # git clone --depth 1 https://github.com/stelmakhdigital/dsh-web-automation.git # cd && npm pack ./browser # dsh plugin --profile tui add ./dsh-web-browser-0.3.0.tgz # dsh plugin --profile tui exec playwright install chromium # # Its bundle patch adds the `web-browser` row at the bottom of this file. # - id: web config: searchProvider: multi fetchProvider: cached-http - id: tool-web config: fetch: true searchTimeoutMs: 60000 fetchTimeoutMs: 45000 - id: web-automation name: 'dsh-web-automation' config: search: engines: [ddg, bing, exa, deepseek, jina, searxng] # tried in this order mode: fallback # fallback = first success wins; fuse = parallel + RRF merge region: '' # region/market hint (DDG kl, Bing setmkt) enrich: true # enrich top results with fetched page text + BM25/embedding re-rank # freshness: '' # news mode: 24h | week | month | year (Bing qft); '' = off # cacheMaxSearches: 1000 # LRU cap on search records (evict least-recently-accessed beyond this) # SearXNG (self-hosted metasearch; no API key): # searxng: { endpoint: http://localhost:8080 } # Embedding re-rank (local LLM server with /embeddings; falls back to BM25): # embedding: { endpoint: http://localhost:11434, model: nomic-embed-text } # Per-engine API keys (opt-in; keyless engines need none): # exa: { apiKeyEnv: EXA_API_KEY } # or apiKey: '...' # deepseek: { apiKeyEnv: DEEPSEEK_API_KEY } # jina: { apiKeyEnv: JINA_API_KEY } # allowPrivateNetworks: false # SSRF guard for enrichment fetches (set true only in isolated envs) fetch: revalidate: true # conditional revalidation for fresh-but-expired pages # cacheTtlMs: 21600000 # page cache TTL (6 h) # cacheMaxPages: 500 # LRU cap on page records (evict least-recently-accessed beyond this) # allowPrivateNetworks: false # SSRF guard: block loopback/private/link-local (set true only in isolated envs) platforms: tool: true # register web_platform_search maxResults: 20 # cap on sources per call # timeoutMs: 30000 # per-search deadline (ms) # maxBytes: 5242880 # cap on one fetched body (bytes) # platforms: # override built-ins by id, or add new platforms # - id: my-site # name: My Site # format: json # searchUrl: 'https://my-site.example/search?q={query}' # fields: { items: 'data.results', url: 'link', title: 'title' } # rulePackPaths: # versioned rule-pack JSON files (hot-reloaded by mtime) # - '$DSH_HOME/web-platforms/packs.json' # allowPrivateNetworks: false # SSRF guard for platform fetches (set true only in isolated envs) history: history: true # register web_history cacheClear: true # register web_cache_clear stats: true # register web_search_stats # Browser automation (separate sub-package, see step 3 above): # # - id: web-browser # name: 'dsh-web-browser' # config: # tool: true # register the browser_* tools # headless: true # run Chromium headless # approval: never # never | navigate | all — which actions require approval # # timeoutMs: 30000 # per-action deadline (ms) # # maxTextLength: 50000 # cap on extracted page text (chars) # # maxElements: 200 # cap on snapshot elements # # allowPrivateNetworks: false # SSRF guard for navigation (set true only in isolated envs)