@hank52168/dsh-web-search-prism
Firecrawl-backed search provider for the DeepSeek Harness web capability seam
(ctx.web). Backs dsh's web_search tool with search + full-page markdown
in one call, fixing the two gaps in the official DeepSeek-backed provider:
| Gap | Official (dsh-web-search-deepseek) | This plugin |
|---|
| snippet | ❌ absent (only cited_text, usually empty) | ✅ description |
| content (answer) | ❌ never populated | ✅ full-page markdown |
Why
The official provider runs each search as a full DeepSeek model turn (no dedicated
retrieval endpoint), so results carry only url + title. This plugin uses
Firecrawl's /v2/search with scrapeOptions.formats: ["markdown"], returning
each hit's full-page markdown in the same call.
Install
The plugin is an npm package that declares itself a dsh bundle via
dsh.bundle.patch. Install it with the plugin manager or pnpm, then add it to
your profile's dsh.profile.bundles:
pnpm add @hank52168/dsh-web-search-prism
# then in package.json: "dsh": { "profile": { "bundles": ["@hank52168/dsh-web-search-prism", ...] } }
Configure
The provider is keyless-first — Firecrawl's hosted keyless sessions need no
credential. To lift rate limits, set a key:
export FIRECRAWL_API_KEY=fc-...
Or pass it via the plugin config in cordis.patch.yml:
- id: web-search-prism
name: '@hank52168/dsh-web-search-prism'
config:
apiKeyEnv: FIRECRAWL_API_KEY
Select the provider (⚠️ REQUIRED)
Without this step, your search still goes through the official DeepSeek
provider (whose searchProvider: deepseek-official is configured
explicitly, so the "only usable provider" auto-selection never kicks in).
Set the provider explicitly in your profile's cordis.patch.yml:
- id: web
name: '@deepseek-ai/dsh-web'
config:
searchProvider: prism-search
Or set the env var (equivalent):
export DSH_WEB_SEARCH_PROVIDER=prism-search
Result shape
The seam's web_search output schema (additionalProperties: false):
{
content?: string, // full-page markdown, rendered as the answer
sources: [{
url: string,
title?: string,
snippet?: string, // Firecrawl description
publishedAt?: string,
}],
truncated: boolean,
}
Development
node --experimental-strip-types --test test/index.test.ts # tests (11)
npx tsc -p tsconfig.json # build to lib/
License
MIT