DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Free Model — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
F

dsh-free-model

Free Model

OpenRouter 免费模型浏览器插件(双界面):获取 OpenRouter 模型,筛选免费模型(价格为 0 或 :free),在设置选项卡中按最新顺序列出,并支持本地搜索和完整模型信息;一键创建可直接使用的 DSH 模型配置(settings.yaml 路由 + 已存储凭据)。Bili

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:jsoncode/dsh-free-model#f773ae7160a212b1056ce85cbe8345d848c54a1b
README兼容性版本

说明

OpenRouter 免费模型浏览器插件(双界面):获取 OpenRouter 模型,筛选免费模型(价格为 0 或 :free),在设置选项卡中按最新顺序列出,并支持本地搜索和完整模型信息;一键创建可直接使用的 DSH 模型配置(settings.yaml 路由 + 已存储凭据)。双语界面(zh/en),不使用硬编码路径,可发布到 npm / GitHub

兼容性与来源证明

Free Model 以 dsh-free-model 发布,当前版本为 0.1.1。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/8/27

版本

0.1.1stable
2026/8/27

相关插件

正在加载相关插件…

最新版
0.1.1
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 models-usage 分类下经过校验的插件。

Usage@linxin666/dsh-usagedsh Web GUI 的使用统计插件:检测各提供商余额和编码计划配额,并提供实时令牌使用记录,以及当前提供商的专属宠物气泡Whale Widgetdsh-whale-widgetDSH Web 界面右下角的 DeepSeek 余额小鲸鱼挂件:余额/今日已用/峰谷定价、自定义泡泡点击序列(文本/余额/今日/峰谷/图片/随机语句与并列加权选择)、逐行样式与字体、悬浮快捷编辑、音效与每轮消耗、自定义角色/动图/音效、吸附与翻转自定义Usage Stats@ychris12138/dsh-usage-statsdsh Web GUI 的令牌使用热力图、提供商余额和订阅配额Codex Connectdsh-codex-connect用于 DeepSeek Harness 的 ChatGPT OAuth 和 Codex 模型。

README

dsh-free-model

dsh-free-model logo

dsh-free-model is a DeepSeek Harness (DSH) plugin that browses OpenRouter's free models and adds any of them to your DSH model list in one click.

  • Platform tabs: the Settings entry hosts one tab per provider platform (OpenRouter today; the PLATFORMS registry makes future providers a one-line addition). All fetch/filter/sort logic runs host-side; the tab is the single entry point.
  • Free-model directory: fetches https://openrouter.ai/api/v1/models from the host, keeps only models priced 0 (prompt & completion) or flagged :free, and sorts them newest first (by OpenRouter created) so newly launched models surface on top. Results are cached in $DSH_HOME/dsh-free-model.json (6-hour freshness window; a failed refresh degrades to the cached list with a stale notice).
  • Full info per card: name, id (click to copy), created date, context window, max output, modalities, tokenizer, pricing, supported parameters, moderated / forced-reasoning flags, expandable full description — plus a local second-stage search (id / name / description / vendor). Layout adapts to narrow panels and mobile widths (stacked cards, single-column grids, full-screen sheet dialog).
  • "Add to model list" → one-click model config: the dialog takes an OpenRouter API token only when the platform has no stored credential yet (live-checked via GET /api/v1/key on demand). Confirming then
    1. stores the token through the host credentials service (.credentials.yaml, OPENROUTER_API_KEY),
    2. merges the model into the OpenRouter route in settings.yaml (llm-pi-ai namespace — reuses the existing openrouter / openrouter-free / openrouter.ai route when one exists, preserving its apiKeyEnv and model entries verbatim; otherwise creates openrouter-free with the openai-completions protocol and https://openrouter.ai/api/v1), and
    3. optionally sets it as the default model for new sessions (agent-default-model namespace). The model is selectable in the chat composer's model selector immediately — no host restart.
  • Robust fetching: every OpenRouter request retries up to 10 times (exponential backoff + jitter).
  • Bilingual UI (中文 / English), no hardcoded paths.

中文文档

Commands

ScriptWhat it does
npm run checktsc -b typecheck (host + client programs)
npm run buildclean lib/, tsc -b, then tsdown bundles lib/index.js (host, ESM) + lib/client.js (browser, __ModuleLoader__ factory)
npm run watchtsdown watch mode
npm run verifysimulate the host module loader against lib/client.js (factory shape + seed externals)
npm run test:opsoffline host-logic tests (free filter, sorting, route detection, config-write orchestration, store round-trip)
npm run smokelive smoke test against the real OpenRouter /models endpoint
npm run releasecheck + build + verify, then npm version patch and git push --follow-tags
npm run publish:npmcheck + build + verify, then npm publish --access public

Installation

# Local development (link the workspace; picks up rebuilds of lib/ automatically)
dsh plugin --profile web add ./dsh-free-model

# Published: npm / tarball / GitHub
dsh plugin --profile web add dsh-free-model
dsh plugin --profile web add github:you/dsh-free-model#<sha>

dsh --profile web --dump-config   # verify the layer
dsh --profile web                 # start (restart required for the host half to load)

Local development dependencies: the host loads lib/index.js through native Node ESM, so @deepseek-ai/schemastery and @deepseek-ai/dsh-settings must be resolvable from the plugin directory. Either run pnpm install inside the plugin directory, or use the committed lib/ build (this repository commits lib/, mirroring dsh-jenkins).

Usage

  1. Open Settings → 免费模型 / Free Models, pick the platform tab (OpenRouter).
  2. The list arrives newest-first (served from cache when fresh; hit 刷新 to force a refetch).
  3. Type in the search box to narrow the list locally.
  4. Click 添加到模型列表 / Add to model list on a model:
    • the token field appears only when the platform has no stored credential yet (otherwise the existing OPENROUTER_API_KEY is reused and noted in the dialog),
    • optionally tick 设为新会话的默认模型,
    • confirm — the config is written and the dialog shows the exact route/model to pick in the composer's model selector.

Adding a platform

  1. src/client/components/FreeModelsSection.tsx: append { id, labelKey } to PLATFORMS and mount the panel by id.
  2. Copy src/client/components/OpenRouterPanel.tsx as a starting point; ops carry platform: '<id>'.
  3. src/host/ops.ts: extend the runOp platform dispatch (fetch/filter per the platform's API, map its models onto RouteModelProfile, and teach model-config.ts the platform's credential ref and route naming).

Structure

├── src/host/*.ts      # Host half: /dsh-free-model/api route (platform-dispatched ops),
│                      # OpenRouter fetch+filter+sort (10 retries), cache store,
│                      # model-config writer (settings + credentials services)
├── src/client/*.tsx   # Browser half: settings.section shell with platform tabs,
│                      # per-platform panel (search, cards), add-to-model-list dialog
├── lib/index.js       # Host half build artifact (tsdown, ESM), committed
├── lib/client.js      # Browser half build artifact (tsdown → __ModuleLoader__ factory), committed
├── scripts/           # verify-client.mjs, test-ops.mts (offline), smoke-openrouter.mts (live)
├── tsdown.config.ts   # node half + client bundle banner wrapper
├── cordis.patch.yml   # Bundle patch: plugin row referenced by package name
└── package.json       # dsh.bundle + dsh.client(web) manifests + peerDependencies

Notes

  • OpenRouter free models still require an account token (daily rate limits apply); the dialog says so.
  • The write path is the sanctioned one: settings.update('llm-pi-ai', …) validates against the llm-pi-ai schema (a bad profile is refused where it is written) and the adapter re-registers routes live, so no host restart is needed after adding a model.
  • Manual edits to an existing OpenRouter route (custom apiKeyEnv, extra profile fields) are preserved: adding a model only rewrites that route's models array (merged by id, same id → replaced).
  • The plugin never touches settings/credentials files directly — everything goes through the host services; its own cache file (dsh-free-model.json) is the only file it writes.