Product
September 4, 2026 · View on GitHub
Platform
web
Users
Primary: a person sitting at their own machine, using DeepSeek Harness to write or debug code. Their job is to connect the models they already pay for (membership or API key) and then pick those models in chat.
Secondary: someone setting Harness up for colleagues. Same job, same screen; they are not a separate product.
Product Purpose
Providers occupies Settings → 模型. One page connects official memberships and API keys, then lets the user check which models are available. In manual mode those names appear in the conversation picker. With smart routing on, the conversation picker is hidden and each human question is chosen from the checked, authorized pool.
Success is: a usable model is connected, the user is not asked to pick a model in chat while smart routing is on, and they never have to use the host's official Models page.
Positioning
This is a membership-and-key wallet for Harness, not another API-key form. Subscriptions log in through the vendor's official OAuth or device-code flow; keys sit in the same list. The host Models page is unused on purpose.
Operating Context
Runs inside dsh web as a mixed plugin (host + client). Tokens live in $DSH_HOME/plugins/providers/auth.json (mode 0600). A leftover $DSH_HOME/plugins/passport/ store from the old package name is copied on first load. Device-code and OAuth links can be copied and finished on another device; they do not have to complete in this browser.
Adding a vendor: sidebar shows only connected ones; the rest are behind 添加服务商. Custom vendors are OpenAI-compatible endpoints declared into llm-pi-ai.
Capabilities and Constraints
Confirmed:
- User-facing copy is Chinese only. Do not show English or raw HTTP codes to the user.
- Subscriptions and API keys share one 模型 page.
- Do not copy, rename, or depend on the host Models UI. Official nav occupancy is a product decision, not a visual one. Hiding the official cell lives in
dsh-xtz-ui(hide-official.ts); that coupling is known and not a stable API. - Live subscriptions today: 通义灵码 and Kimi 编程 (device code); ChatGPT Codex, Claude, Grok (OAuth). Other CN memberships may be listed as not ready.
- API keys use the host credential seam. Saved keys display as a mask, never the secret.
- Connected vendors expose a model checklist. Manual mode feeds the conversation picker; smart routing hides that picker and uses the checklist as the automatic pool.
- ChatGPT and Grok subscriptions expose
image_generate(gpt-image-2/grok-imagine-image-2.0). Claude, Qwen Code, and Kimi Code do not have an image-generation API on these logins. - Grok subscriptions also expose
video_generate(grok-imagine-video-1.5). The other logins have no video-generation API. - Do not vendor or edit
deepseek-harnessin this repo.
Undecided:
- Whether more CN memberships (智谱 / 豆包 / 讯飞 / 混元) ship as official login next, or stay API-only.
Brand Commitments
Package name dsh-providers. In the product the page is 模型, not 通行证 or 会籍. Group labels: 订阅, 密钥, 自定义.
Voice: short, operational Chinese. Explain the next action, not the protocol.
Evidence on Hand
- Plugin copy and flows:
plugins/providers/src/client/locales.ts,ModelsWorkspace.tsx - Subscription catalog:
plugins/providers/src/catalog.ts - README:
plugins/providers/README.md(English),plugins/providers/README.zh.md(Chinese) - No customer quotes, screenshots for marketing, or third-party testimonials. Do not invent them.
Product Principles
- One 模型 page is the whole job: connect, then choose models.
- Speak as the person in front of the machine, not as the OAuth spec.
- A secret that has been saved must not reappear as text.
- Authorization can leave this computer; the page must still make the next step obvious.
- The host Models page is not a fallback and not a reference implementation.
Accessibility & Inclusion
No extra legal or WCAG target was set. Keyboard use and screen-reader use of the settings dialog still matter because the page lives inside the host settings overlay.