2026-08-04 00:54:19 +08:00
# web/ — web capability family
Add web capability seam: ctx.web, search/fetch providers, web tools
Introduce web access as a first-class capability seam so the model-facing
web tools stay stable while backends change. dsh-web owns ctx.web as a
provider registry with registration-order-independent selection and the
WebError taxonomy; dsh-web-search-exa, dsh-web-search-perplexity, and
dsh-web-fetch-local register capabilities into it; dsh-tool-web is the sole
owner of the model-facing web_search/web_fetch schemas, prompt sections, and
HTML-to-markdown presentation. Search and fetch are deliberately one seam.
Providers ship as namespace plugins that register into ctx.web (like an
LlmAdapter into ctx.llm), not key-owning services, since multiple search
providers cannot each own the key. Tool registration follows product
enablement, not backend availability, so load order/credentials never enter
the model contract; the seam resolves the provider at execution time and
surfaces a structured WebError otherwise.
Moves the RFC to implemented/ amended to match what shipped. Example/app
configs are intentionally not wired yet (RFC migration step 6).
2026-06-25 15:04:12 +08:00
2026-07-26 05:03:53 +08:00
English | [中文 ](README.zh.md )
2026-08-04 00:54:19 +08:00
This family provides provider-neutral web search and fetch operations plus the model-facing tools that consume them.
Add web capability seam: ctx.web, search/fetch providers, web tools
Introduce web access as a first-class capability seam so the model-facing
web tools stay stable while backends change. dsh-web owns ctx.web as a
provider registry with registration-order-independent selection and the
WebError taxonomy; dsh-web-search-exa, dsh-web-search-perplexity, and
dsh-web-fetch-local register capabilities into it; dsh-tool-web is the sole
owner of the model-facing web_search/web_fetch schemas, prompt sections, and
HTML-to-markdown presentation. Search and fetch are deliberately one seam.
Providers ship as namespace plugins that register into ctx.web (like an
LlmAdapter into ctx.llm), not key-owning services, since multiple search
providers cannot each own the key. Tool registration follows product
enablement, not backend availability, so load order/credentials never enter
the model contract; the seam resolves the provider at execution time and
surfaces a structured WebError otherwise.
Moves the RFC to implemented/ amended to match what shipped. Example/app
configs are intentionally not wired yet (RFC migration step 6).
2026-06-25 15:04:12 +08:00
| Package | Role | ctx key |
|---|---|---|
2026-08-04 00:54:19 +08:00
| [`web/` ](web/README.md ) | Defines web provider registration, selection, and shared errors | `ctx.web` |
| [`web-search-exa/` ](web-search-exa/README.md ) | Provides web search through Exa | registers on `ctx.web` |
| [`web-search-perplexity/` ](web-search-perplexity/README.md ) | Provides web search through Perplexity | registers on `ctx.web` |
| [`web-search-deepseek/` ](web-search-deepseek/README.md ) | Provides native DeepSeek web search | registers on `ctx.web` |
| [`web-fetch-local/` ](web-fetch-local/README.md ) | Fetches public HTTP and HTTPS resources | registers on `ctx.web` |
| [`tool-web/` ](tool-web/README.md ) | Exposes web search and fetch to the model | registers on `ctx.tools` |
Add web capability seam: ctx.web, search/fetch providers, web tools
Introduce web access as a first-class capability seam so the model-facing
web tools stay stable while backends change. dsh-web owns ctx.web as a
provider registry with registration-order-independent selection and the
WebError taxonomy; dsh-web-search-exa, dsh-web-search-perplexity, and
dsh-web-fetch-local register capabilities into it; dsh-tool-web is the sole
owner of the model-facing web_search/web_fetch schemas, prompt sections, and
HTML-to-markdown presentation. Search and fetch are deliberately one seam.
Providers ship as namespace plugins that register into ctx.web (like an
LlmAdapter into ctx.llm), not key-owning services, since multiple search
providers cannot each own the key. Tool registration follows product
enablement, not backend availability, so load order/credentials never enter
the model contract; the seam resolves the provider at execution time and
surfaces a structured WebError otherwise.
Moves the RFC to implemented/ amended to match what shipped. Example/app
configs are intentionally not wired yet (RFC migration step 6).
2026-06-25 15:04:12 +08:00
2026-08-04 00:54:19 +08:00
The [web capability decision ](../../.agents/notes/implemented/architecture/2026-06-24-web-capability-seam.md ) records why search and fetch share one provider-selection service.