← Back to home@shaomingbo

dsh-subscription-search

ChatGPT/Grok subscription OAuth, model routes, and ChatGPT to Grok to Exa to DeepSeek web-search fallback for DeepSeek Harness

Stars
0
Language
JavaScript
Created
Aug 19, 2026
Updated
Sep 11, 2026
GitHub repo

Introduction

dsh-subscription-search

Search-only dsh-subscription-search@1.3.1 for DeepSeek Harness. It keeps the repository/package identity and DSH web provider id subscription-search, but no longer owns OAuth, credentials, subscription usage, model routes, quota UI, or API-key entry.

Install

npx --yes --ignore-scripts github:shaomingbo/dsh-subscription-search#v1.3.3

The no-argument command installs into the web profile through the public dsh plugin CLI (--ignore-scripts). Requires exact dsh 0.1.2-alpha.3, 0.1.2-rc.1, or 0.1.5-rc.1. Then manually restart DSH and force-refresh the existing Web GUI.

npx --yes --ignore-scripts github:shaomingbo/dsh-subscription-search#v1.3.3 status
npx --yes --ignore-scripts github:shaomingbo/dsh-subscription-search#v1.3.3 uninstall
npx --yes --ignore-scripts github:shaomingbo/dsh-subscription-search#v1.3.3 install --profile web

Local development:

DSH_SUBSCRIPTION_SEARCH_SOURCE="link:$PWD" node ./bin/install.js install --profile web

Manual fallback: add "dsh-subscription-search": "github:shaomingbo/dsh-subscription-search#v1.3.0" to the target profile's dependencies, add dsh-subscription-search to dsh.profile.bundles, then run pnpm install --ignore-scripts in that profile. Prefer the installer because it is atomic and rolls back dependency-install failures.

Search chain

The Host provides the Cordis service searchChain, implementing protocol search-chain/v1:

  • register(backend) -> disposer
  • list() -> synchronous, secret-free settings, last-probed backend status, and bounded diagnostics
  • probe() -> Promise<status> concurrently refreshes callable backend status with bounded deadlines
  • search(request, policy?, signal)

Default order: ChatGPT → Grok → Ollama → Exa → DeepSeek. Exa, DeepSeek, and Ollama are built in and resolve EXA_API_KEY, DEEPSEEK_API_KEY, and OLLAMA_API_KEY through ordinary DSH credential refs. ChatGPT and Grok are optional callable adapters dynamically registered by an account plugin; this package starts and searches without that plugin.

Ollama leg

The Ollama adapter calls Ollama's hosted web search API (POST https://ollama.com/api/web_search, up to 5 results). It is credential-gated: without a configured OLLAMA_API_KEY the leg reports unavailable and the chain falls through without a network request — it joins the orchestration exactly while the credential exists. Create a free key at ollama.com/settings/keys; the free tier draws on your Ollama account quota (no per-search fee; exact limits are not published). Its status() probe reads configuration through describe, so the value never crosses the check, and the settings UI's status fetch (probe()) refreshes the badge on every load. An unreportable describe seam fails open to the search-time credential check. A 200 response without the documented results array (observed when quota is exhausted, ollama#16045) is treated as an invalid response and falls through; a well-formed empty results array stays a valid empty success. Existing saved policies keep their order and gain ollama at the tail — move it up in the settings UI to spend free quota before Exa credits.

The chain owns ordering, enabled flags, per-backend and total deadlines, fallback, cancellation, empty-result success, and diagnostics. Settings are version 1; there is no DAG. Manage credentials in Accounts & Usage. The Search settings section only manages chain policy and shows status/diagnostics.

See SPEC.md and CONTEXT.md.