ChadCSong/dsh-cliproxyapi-provider
Auto-discovery CLIProxyAPI provider for DeepSeek Harness, featuring dynamic model sync, native model switching, and vision-model selection.
项目介绍Project Overview
DSH 的 CLIProxyAPI 自动发现插件,探测本地 CPA 服务并将其实时模型目录同步至 DSH 原生选择器,可在配置面板中选用视觉模型,主模型为纯文本时由插件先做图像描述再注入。适用于不想手填 baseURL 与模型列表、需视觉预处理与目录自动刷新的场景。提示:仅自动联系回环地址,远程需显式配置 baseURL。
A DSH provider plugin that auto-discovers a local CLIProxyAPI instance and syncs its live model catalog into DSH's native model picker, with an independently selectable vision model that pre-describes images for text-only main models. Use it to avoid hand-typing base URLs and model IDs while keeping credential storage and catalog refresh automatic. Caveat: auto-discovery only contacts loopback addresses; remote CPA endpoints require an explicit baseURL.
请帮我了解并安装插件:【dsh-cliproxyapi-provider】【https://github.com/ChadCSong/dsh-cliproxyapi-provider】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:ChadCSong/dsh-cliproxyapi-provider
把 ChadCSong/dsh-cliproxyapi-provider 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
DSH CLIProxyAPI Provider
An auto-discovery CLIProxyAPI provider for DeepSeek Harness (DSH).
It discovers a local CPA service, synchronizes the live model catalog into DSH's native model picker, and lets you choose a vision-capable model from that catalog—without typing model IDs by hand.
Why this plugin?
Generic OpenAI-compatible routes usually require a manually maintained base URL and model list. This plugin treats CLIProxyAPI as a first-class, dynamic DSH provider:
- Zero-address local setup — probes
127.0.0.1:8317,localhost:8317, and[::1]:8317. - Live model discovery — reads
/v1/models?client_version=pi, with standarddata[].idfallback. - Native model switching — models appear under
CLIProxyAPI (auto)in DSH's model picker. - Newest versions first — versions are sorted newest-first inside each model family.
- Independent vision preprocessing — choose a vision model from the returned catalog; when the selected main model is text-only, the plugin describes images first and sends that text to the main model.
- Capability sync — imports context/output limits, reasoning support, image input, and service tiers when CPA reports them.
- Automatic refresh — CPA account or model changes are picked up without reinstalling the plugin.
- Credential-safe — the API key is stored through DSH's credential service, not in
settings.yaml. - Standard DSH bundle — works with DSH Web, headless profiles, and DSH Desktop; it is not a Desktop-only extension.
Requirements
- DeepSeek Harness
0.1.0-rc.7or0.1.0-rc.8 - Node.js
22.19+or24+ - A running CLIProxyAPI instance
The plugin is currently built and tested against the public DSH 0.1.0-rc.8 contract while retaining
runtime compatibility with the rc.7-based DSH Desktop release.
Install
Install directly from GitHub into the profile you use:
dsh plugin --profile web add github:ChadCSong/dsh-cliproxyapi-provider
For DSH Desktop, use its active profile (normally desktop):
dsh plugin --profile desktop add github:ChadCSong/dsh-cliproxyapi-provider
Restart the corresponding DSH process once after installation. No manual profile patching is needed;
the standard DSH bundle declaration lives in package.json and cordis.patch.yml.
Install from a local checkout
git clone https://github.com/ChadCSong/dsh-cliproxyapi-provider.git
cd dsh-cliproxyapi-provider
pnpm install
pnpm build
dsh plugin --profile web add "$PWD"
Replace web with the profile you actually use.
Setup and usage
- Start CLIProxyAPI. Leave the URL empty when it listens on the default port,
8317. - Open Settings → Plugins → CLIProxyAPI (auto discovery) in DSH.
- If CPA bearer authentication is enabled, enter the API key once.
- After the URL and key are valid, choose the vision model from the automatically loaded dropdown.
- Return to a conversation and select any model under CLIProxyAPI (auto) in DSH's native picker.
Useful commands:
/cpa-status
/cpa-refresh
/cpa-status reports the current endpoint and synchronized model count. /cpa-refresh immediately
probes CPA and refreshes the DSH model catalog.
Configuration
The settings namespace intentionally remains dsh-cliproxyapi for upgrade compatibility:
dsh-cliproxyapi:
enabled: true
# Empty means local auto-discovery. Remote CPA is also supported.
baseURL: ''
apiKeyEnv: CLIPROXYAPI_API_KEY
# Empty means the first catalog model declaring image input.
visionModel: ''
protocol: openai-completions
refreshIntervalSeconds: 300
probeTimeoutMs: 2000
Endpoint resolution
Candidates are deduplicated and tried in this order:
- Explicit
baseURLsetting CLIPROXYAPI_BASE_URLfrom the DSH launch environment- Local loopback candidates on port
8317
A non-loopback service is contacted only when you explicitly configure it.
API key storage
apiKeyEnv is a credential reference, not the secret itself. The settings UI writes the key through
DSH's credential service. The default reference is CLIPROXYAPI_API_KEY.
Inference protocol
The default, openai-completions, uses CPA's /v1/chat/completions route. Select
openai-responses only when your CPA deployment exposes the target models through the Responses API.
Vision model behavior
The vision model and the conversation's main model are independent. Native image-capable main models receive images directly. For a text-only main model, the plugin calls the selected vision model first, replaces each immutable image attachment with its factual description, and then calls the main model. Descriptions are cached by provider, vision model, and attachment ID. Within the CLIProxyAPI (auto) group, this lets an image-containing session switch to text-only CPA models without modifying DSH itself.
DSH's built-in DeepSeek provider remains outside this plugin's route. DSH therefore continues to reject switching to a text-only built-in model when the session already contains images. The plugin does not alter, wrap, or relabel built-in DSH models.
When the setting is empty, the plugin uses the first catalog model declaring image input. An explicitly selected model must genuinely accept OpenAI-compatible image content even if CPA omitted its modality metadata.
How it works
The plugin manages one route in DSH's official @deepseek-ai/dsh-llm-pi-ai adapter through the public
settings contract and implements preprocessing through DSH's public llm/stream waterfall. It does not
patch Harness or reimplement model transport. Streaming, tool calls, attachments, reasoning, and errors
continue through the official adapter.
The host bundle imports no Electron or dsh-plugin-desktop APIs. Its settings card uses public DSH
client services and slots, allowing the same package to run in CLI/Web and Desktop profiles.
Development
pnpm install
pnpm test
pnpm typecheck
pnpm build
When developing against a local Harness checkout:
DSH_CHECKOUT=/absolute/path/to/deepseek-harness pnpm test
DSH_CHECKOUT=/absolute/path/to/deepseek-harness pnpm build
Alternatively, point DSH_PACKAGES_ROOT at a DSH node_modules directory. Generated local path files
are ignored by Git and never included in published packages.
Security
Automatic discovery only contacts loopback addresses. The plugin never writes a literal API key to its settings, model cache, or logs. See SECURITY.md to report a vulnerability privately.
Contributing
Issues and pull requests are welcome. For behavior changes, please include or update Vitest coverage and
verify pnpm test, pnpm typecheck, and pnpm build before submitting.
nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/colleague-skill
nocobase/nocobase
Tencent/WeKnora