Introduction¶
The philosophy of DSH is “everything is a plugin,” and LLM providers themselves are also plugins. However, connecting every external model channel requires handling account login, token refresh, concurrent rate limiting, SSE stream parsing, and error retries on your own, which involves significant repetitive work. jianghuai24/dsh-free-ai does this: it unifies multiple free model channels as DSH providers, incorporating browser login, account pool rotation, daily check-ins, model blacklists, and a local OpenAI-compatible gateway.
The maintainer of this plugin is JiangHuai24, categorized under Model Inference. The prototype comes from dsh-codearts-auth (Gitee iJetLi/deepseek-harness-codearts, MIT, commit 345f0a07), extracted via vendor/channel-pack from dsh-our-free-model. Below is an introduction to its features, installation methods, and points to note.
What is this¶
One-sentence positioning: A DSH plugin that integrates free model channels into DSH’s LLM layer, allowing users to use models from these channels without writing their own adaptation code.
It solves the problem that login methods for free channels vary (browser, phone number, WeChat scan, OAuth callback), and account quotas and rate limiting strategies are inconsistent, requiring a separate adaptation layer to integrate directly into DSH. The plugin packages this adaptation layer into the pack.js single-file runtime, mounted on the host’s entry points for credentials, commands, and LLM.
Core Features¶
Supported channels: 13 noted in the README, covering CodeArts (Huawei Cloud), WorkBuddy (Domestic/International), LobsterAI, Qoder, TRAE, Cline, Loomy, Raccoon, MiniMax Code, ZCode, Gemini, etc.
- Browser Login: Channels like CodeArts and WorkBuddy use browser login, which the plugin provides the flow for.
- Account Pool: Rotation, rate limiting, cooldown, balance sorting, OAuth refresh; credentials are stored in DSH’s credentials store.
- Daily Check-in:
auto-checkin.tsis responsible for scheduling check-ins to earn points, writing results toauto-checkin.json. - Model Blacklist:
dead-model-store.tsrecords models that have gone offline upstream to avoid repeated retries. - Local OpenAI-Compatible Gateway:
openai-gateway/provides a local OpenAI-format endpoint for external clients.
The App layer (client) is configured for the web platform with immediately: true, allowing browser pages to read and write account and model status via /api/channel-pack.
Installation and Enablement¶
The official installation command is in the README; execute it according to the profile corresponding to your account:
dsh plugin --profile desktop add link:<repository-directory>
Note: When installing via link, pack.js resolves @deepseek-ai/* based on the real path, whereas the packages provided by the host are inside app.asar and not in the profile dependencies. This may cause an error like ERR_MODULE_NOT_FOUND: @deepseek-ai/dsh-credentials at startup. If you encounter this issue, you need to copy the plugin entity into profiles/iso/node_modules/ to allow Node to find the profile’s module resolution path by traversing the directory upwards.
Do not enable together with dsh-our-free-model: Both will register the same-named providers like buddy/zcode/lobsterai and share the $DSH_HOME/channel-pack state directory; mounting them simultaneously will cause them to conflict. The correct sequence is: disable OFM first -> install this plugin -> re-login or import accounts using a backup.
Typical Usage¶
After installation, simply use the models of the corresponding channels in DSH; the login process follows each channel’s browser flow. A few useful details:
- The ref for account credentials looks like
BUDDY_ACCOUNT_AB12CD34; to keep the original 31 accounts, you need to keep the directory name consistent with the credentialRef; renaming requires re-login. src/backup.tsprovides export/import; export a copy before migrating.- The state file is at
$DSH_HOME/channel-pack/state.json, which can be overridden byDSH_CHANNEL_PACK_STATE_DIR. - The Gemini channel requires you to provide your own OAuth client: set environment variables
CMDC_PAK_GOOGLE_CLIENT_IDandCMDC_PAK_GOOGLE_CLIENT_SECRET(create a “Desktop App” type client in Google Cloud Console and register the redirect URIhttp://localhost:<port>/oauth-callback). The repository does not include any Google credentials internally.
Applicable Scenarios and Notes¶
Suitable for those already running multi-channel models on DSH who want to skip the adaptation layer, or who want to merge and manage free channels with existing model pools.
Points to note:
- This plugin runs with the permissions of the current DSH process and can read files and credential stores accessible to the host process. Please check the source code and license (MIT marked in README) before installing, and do not deploy directly to a production environment.
- The quota and availability of upstream free channels are determined by the upstream, and the plugin has an account pool and error retries internally, but it does not guarantee that a specific channel will always be available.
- The captcha supply system for ZCode (
captcha-*.ts) is the most fragile; it may require manual updates after the upstream makes changes. - After modifying source code in
src/, you must repack;index.jsmountspack.js.
Conclusion¶
The value of dsh-free-ai lies in converging the entire set of cumbersome tasks of integrating free model channels—login, rate limiting, and check-ins—into a single plugin, allowing DSH users to simply install and log in to use. The plugin directory page is at https://www.skillhub.cn/plugins/JiangHuai24/dsh-free-ai, and the source code is at https://github.com/JiangHuai24/dsh-free-ai.