🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

模型花园 mrdevlorx/dsh-model-garden

DeepSeek Harnessv1.0.0
mrdevlorx6 天前有提交已提供中文文档扫描:含敏感能力

可搜索、可排序的模型选择器,用于 DeepSeek Harness Web UI——服务商分组、收藏、models.dev 价格、上下文窗口、按任务实时 token 花费,还有本地模型筛选…

37.1/100
综合分
7
GitHub 星标
243
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-model-garden
npm 源 · dsh-model-garden 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/11/01·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 6 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-model-garden @ 1.0.0
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 00:48:53

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 12 处,展示前 11 条)
  • 发起网络请求
    index.js:284
    const res = await fetch(url, {
  • 发起网络请求
    index.js:957
    return fetch(MODELS_DEV_URL)
  • 读取本地文件
    lib/pi-catalog.js:41
    if (existsSync(direct)) return direct;
  • 读取本地文件
    bin/refresh-models.mjs:54
    await readFile(path, "utf8");
  • 读取本地文件
    bin/refresh-models.mjs:58
    await readFile(legacySettingsPath, "utf8");
  • 读取本地文件
    bin/refresh-models.mjs:66
    for (const entry of await readdir(join(home, "profiles")).catch(() => [])) {
  • 读取本地文件
    bin/refresh-models.mjs:68
    const parsed = JSON.parse(await readFile(manifest, "utf8").catch(() => "{}"));
  • 读取本地文件
    bin/refresh-models.mjs:70
    const patch = await readFile(join(home, "profiles", entry, "cordis.patch.yml"), "utf8").catch(() => undefined);
  • 读取本地文件
    bin/refresh-models.mjs:134
    const raw = await readFile(settingsPath, "utf8");
  • 写入本地文件
    bin/refresh-models.mjs:229
    await writeFile(tmp, String(document), "utf8");
  • 写入本地文件
    bin/refresh-models.mjs:230
    await rename(tmp, settingsPath);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

2 张 · 点击查看大图

功能亮点

  • 搜索排序模型
  • 收藏模型
  • 实时比价与本地筛选
展开完整介绍(134 字)↓

可搜索、可排序的模型选择器,用于 DeepSeek Harness Web UI——服务商分组、收藏、models.dev 价格、上下文窗口、按任务实时 token 花费,还有本地模型筛选。一条命令安装:dsh plugin add dsh-model-garden。

README

由 DeepSeek 最新模型翻译生成
dsh-model-garden DeepSeek Harness Web UI(dsh web)的模型选择器,用表格样式的选择器替换原生 composer 模型位:可搜索、可排序、可按模型能力筛选,带价格、实时单任务成本、详情卡片,还能为每个子代理固定默认模型。 为什么做这个 原生选择器只是把模型列出来。Model Garden 回答的是你挑模型时真正关心的问题:现在花多少钱、哪些路由足够便宜、哪些模型能看图、哪些能调用工具、哪些已弃用、每个子代理该用哪个模型,并且让这些答案与服务商保持同步。 功能 选择器与列表 - 表格样式列表,按服务商分组:点 Name、Ctx 或 Price 排序(升序 → 降序 → 回到分组),分组可折叠,显示各服务商的模型数量 - 键盘优先:↑ ↓ 导航,Home/End 跳转,Enter 选中,Esc 关闭 - 即时搜索,覆盖名称、id、描述和服务商名称,还包括模型的事实:vision、tool calling、reasoning、structured output、attachments、open weights、temperature、interleaved、家族、知识截止日期、发布日期和 deprecated
展开完整文档(README 剩余 1 节)
dsh-model-garden

DeepSeek Harness Web UI(dsh web)的模型选择器,用表格样式的选择器替换原生 composer 模型位:可搜索、可排序、可按模型能力筛选,带价格、实时单任务成本、详情卡片,还能为每个子代理固定默认模型。

为什么做这个

原生选择器只是把模型列出来。Model Garden 回答的是你挑模型时真正关心的问题:现在花多少钱、哪些路由足够便宜、哪些模型能看图、哪些能调用工具、哪些已弃用、每个子代理该用哪个模型,并且让这些答案与服务商保持同步。

功能

选择器与列表

- 表格样式列表,按服务商分组:点 Name、Ctx 或 Price 排序(升序 → 降序 → 回到分组),分组可折叠,显示各服务商的模型数量
- 键盘优先:↑ ↓ 导航,Home/End 跳转,Enter 选中,Esc 关闭
- 即时搜索,覆盖名称、id、描述和服务商名称,还包括模型的事实:vision、tool calling、reasoning、structured output、attachments、open weights、temperature、interleaved、家族、知识截止日期、发布日期和 deprecated
- 收藏(⭐,持久保存)和隐藏模型/服务商黑名单(悬停时点 ✕,在 ⚙ 面板里管理,持久保存):黑名单不会改动你的 DSH 配置
- 本地 / 在线感知:按真实端点标记服务商是否为本地(回环地址 / RFC1918 / 局域网主机名,绝不按价格判断),并探测本地网关当前提供哪些模型

高级搜索(筛选面板)

点 Filters 按钮,选择器上方会打开一个双栏面板。每个选项都带匹配的模型数量,标题栏显示结果计数(Filters · 12 of 88):

| 分组 | 选项 |
| 范围 | 仅本地 · 仅在线 · 仅收藏 |
| 能力 | 工具调用 · 视觉 · 推理 · 推理强度等级 · 开放权重 · 结构化输出 · 附件 · 温度 · 交错 |
| 限制 | 上下文 ≥ 32K…1M · 输入价格 ≤ $0.50/$1/$3/$10 · 知识截止年份 · 家族 |
| 生命周期 | 仅已弃用 |
| 服务商 | 从下拉框选一个服务商(已配置 / 已隐藏,各自带模型数量) |

所有内容都在运行时从你的安装环境推导,不硬编码任何服务商、模型或家族名称:

- 服务商、数量和 hidden 标记来自实时目录和你的黑名单
- 能力数量、系列、知识截止年份、上下文大小和价格,都来自 models.dev 目录缓存
- 零匹配的选项会被禁用;整个分组在你的目录填不满时不渲染(纯本地部署仍会得到 Scope、Lifecycle 和 Providers)
- Context 阶梯只提供你的模型能达到的阈值;知识年份取自你的目录

筛选条件与文本搜索组合生效(AND)。Reset 始终可见(未设置任何条件时变暗),会清空所有筛选条件,但不动搜索文本。

详情卡片

鼠标悬停在某一行上,详情卡片会打开,作为选择器的固定伴随面板:左侧留白、1 px 接缝、底边对齐。窗口较窄时,卡片移到选择器上方,而不是悬在屏幕外,并且高度会被限制在视口内。

卡片是一张表格(Property | Value),分为几个区块:

- Model — 上下文、最大输出、推理强度、每 1M 的价格(输入 / 输出 / 缓存读取 / 缓存写入)
- Capabilities — 模态、工具调用、结构化输出、temperature、附件、开放权重、交错推理
- Lifecycle — 知识截止、发布日期、最后更新、弃用状态、系列、别名、规范 id
- Provider — 路由、models.dev 服务商与环境变量键、本地网关元数据、各来源的出处

事实数据合并自三个来源(DSH 适配器经 llm.resolveModelInfo、models.dev,以及本地网关的原始 /models 记录),并做了缓存,所以重启后第一次悬停也不会空白。

子代理默认模型

sub-agents 开关位于卡片标题栏的模型名旁边:

- 勾选后,这个 provider::model 会成为之后每个子代理运行的模型——spawn、fork、后台子进程、工作流智能体和冷恢复都算——无论会话本身用什么模型
- 悬停开关,卡片上方会显示简短说明
- 被固定的模型在列表里带 sub 徽标,一眼就能找到
- 固定状态重启后保留(DSH 0.2:插件自己的配置档条目;0.1:model-garden: 设置段),并在宿主侧对 meta.origin: "subagent" 的 agents.create / agents.resume 强制执行
- 主会话永远不受影响;正在运行的子进程保持原模型

推理强度

声明了推理等级的模型,会在输入框的模型名旁边得到一个紧凑下拉框——触发胶囊和菜单外观与选择器一致:

- 等级先从目录检测,再从缓存的详情卡片检测,并按需为选中模型拉取,所以胶囊不用悬停列表就会出现
- 选中模型时,从它声明的最深等级开始(none < minimal < low < medium < high < xhigh < max < ultra;数字 id 按数值比较,完全未知的名称回退到适配器的最后一项)
- 会话上已设置的强度永远不会被覆盖

价格与实时成本

- 模型价格来自 models.dev,按每 1M token 显示为 $input/$output,缓存 24 小时。订阅线路的目录条目如果全为零,就从其按量付费服务商解析出一个参考价格,这样套餐模型也能显示其 token 按 API 费率计算的价格;只有真正的本地模型保持无价格
- 实时逐任务用量(输入 / 输出 / 缓存)从会话日志读取,面板打开期间始终可见;每个模型的用量乘以它自己的价格,因此会话中途切换模型也能正确归属
- 会话成本明细——悬停成本数字:按模型汇总,以及带时间戳的步骤表,表头可排序,支持复制和 CSV 导出
- 上下文窗口实时来自宿主 llm 服务(含本地网关),models.dev 作为回退

同步、刷新与清理

- 自动同步——选择器打开时,若上次同步距今超过 6 小时就同步一次,之后保持打开期间每小时一次。自动同步只增不删(keepRemoved=1):服务商偶尔返回短列表,也绝不会删掉你的配置
- 手动 ⟳——从每个已配置 llm-pi-ai 服务商的实时 GET {baseURL}/models 重新同步,并把合并后的列表写回(增和删),通过当前配置档的配置编辑器保留注释
- 已弃用模型在行内显示永久可见的红色 ✕。点击后原地询问(“从 OpenCode Go 移除 MiniMax-M2.7?”),只从服务商已配置列表中删除该条目;线路的其他字段全部保留
- 目录重读——挂载期间每 5 分钟一次,本地新增的模型无需重开面板即可出现

外观与体验

- 基于 harness 设计 token(--dsw-),使用不透明表面——面板绝不让聊天文字透出;明暗主题跟随 harness,缺失的 token 回退到中性色
- 停靠式面板带 1 px 接缝:选择器上方的筛选面板、旁边的详情卡片,都限制在视口内
- 无构建步骤、无运行时依赖、无遥测

安装

一条命令——官方插件命令行会安装包并挂载它(包内带 dsh.bundle.patch 层,命令行会把它追加到配置档的 bundle 栈):

dsh plugin --profile <profile> add dsh-model-garden

然后重启 DSH 服务器,并强制刷新浏览器(Cmd/Ctrl+Shift+R)。

宿主侧需要 web 栈(webServer 服务)。在缺少它的 minimal/TUI 配置档中,插件按设计保持惰性——启动绝不会被阻塞。

从手动安装升级?先从配置档的 cordis.patch.yml 中移除旧的 model-garden 依赖和任何手写的 - insert: 行——否则会挂载两次。

从 GitHub 安装(最新 main)

命令行也接受 git 规格——同样的 bundle 协调,无需手动改补丁。适合运行未发布的提交:

dsh plugin --profile <profile> add github:mrdevlorx/dsh-model-garden
安装完成后,重启 DSH 并强制刷新,和普通安装一样。这里跟踪的是 main 分支;重新运行命令即可更新到最新提交。

验证

curl -s http://127.0.0.1:3080/model-garden/subagent-model
→ {"subagentModel":null} (host half is live)

手动安装(不用命令行)

把依赖加到配置档里,在配置档 package.json 的 dsh.profile.bundles 中列出 dsh-model-garden,重新安装,重启。包内的 bundle 补丁会插入 loader 行,不需要改 cordis.patch.yml。

工作原理

这个包是静态配置档插件,分两部分:

| 部分 | 文件 | 职责 |
| 客户端 | client.js | 注册 conversation.input.model 槽位(覆盖原生座位),渲染选择器、筛选面板、详情卡片和 effort 下拉菜单 |
| 宿主 | index.js | 在 harness 的 webServer 上提供同源 JSON 路由、目录/详情缓存,以及在 agents.create / agents.resume 上执行子代理约束 |
| 共享逻辑 | lib/refresh-core.js、lib/pi-catalog.js、lib/detail-core.js、lib/subagent-core.js | 无依赖、有单元测试的模块:服务商发现与合并、pi-ai 目录加载、详情卡片合并规则、子代理覆盖语义 |

宿主端点

GET /model-garden/cost?session=<id> real token usage of one session
GET /model-garden/cost-history?session=<id> usage steps attributed to their model
GET /model-garden/catalog { "provider::model": { local, context?, maxOutput? } } (10 min cache)
GET /model-garden/model-detail?provider=&model= merged adapter + models.dev + gateway detail (6 h host cache)
GET /model-garden/server-models live model inventory of local gateways
POST /model-garden/refresh-models re-sync provider lists (?keepRemoved=1 = additive)
POST /model-garden/remove-model delete one configured model from its route
GET /model-garden/subagent-model current sub-agent pin (or null)
POST /model-garden/subagent-model pin one route::model, {} clears it

所有路由都仅限同源:不声明 CORS 通配符,会改变状态的路由在动手之前先拒绝跨站请求,返回 403。服务商凭据通过宿主凭据服务(~/.dsh/.credentials.yaml)解析,进程环境变量作为兜底,并且只发往该服务商自己的 /models 端点。

状态存放位置

| 内容 | 位置 |
| 收藏、最近使用的模型、折叠的分组、隐藏的模型/服务商 | 浏览器 localStorage(dsh.modelgarden.) |
| 价格/能力缓存 | localStorage(dsh.modelgarden.prices.v5,24 小时) |
| 详情卡片 | localStorage(dsh.modelgarden.details,每个模型 24 小时) |
| 子代理固定项 | DSH 0.2:插件的配置档条目(配置档补丁);0.1:settings.yaml 的 model-garden: 段 |
DSH 0.2 迁移在前后两端都做了处理:服务商路由通过 ctx.configEditor 读取(0.1 则回退到旧版设置文档),再通过配置档的配置编辑器写回,同时保留配置档补丁里的 YAML 注释。

命令行(无需运行中的 DSH 即可刷新)

node node_modules/dsh-model-garden/bin/refresh-models.mjs \
[--dry-run] [--keep-removed] [--provider <id>] [--timeout-ms <ms>] \
[--profile <name>] [--settings <path>] [--home <dsh-home>]

在 DSH 0.2 上,工具读取当前配置档的 cordis.patch.yml(也可以传 --profile 指定);在 0.1 上读取 settings.yaml。写入会保留注释;--dry-run 只报告,不写入。

配置

无需任何配置。可调整的常量:

- MODEL_LIST_REFRESH_MS(客户端,5 分钟)——挂载期间重新读取目录的间隔
- AUTO_REFRESH_MS(客户端,60 分钟)/ AUTO_REFRESH_STALE_MS(客户端,6 小时)——自动增量同步
- PRICE_TTL(客户端,24 小时)、CATALOG_TTL(客户端,10 分钟)
- MODELS_DEV_TTL(宿主,24 小时)、MODELS_DEV_RETRY(宿主,2 分钟)、DETAIL_TTL(宿主,6 小时)、DETAIL_NEG_TTL(宿主,10 分钟)、DETAIL_ADAPTER_TIMEOUT(宿主,8 秒)
- REFRESH_TIMEOUT(宿主,每个服务商 15 秒)、REFRESH_HARD_CAP_MS(宿主,每轮 60 秒)、SERVER_MODELS_TIMEOUT(宿主,每次网关探测 5 秒)
- HIDDEN_PROVIDER_PREFIXES(客户端)/ SKIP_PREFIXES(宿主)——从选择器中排除的内部镜像路由
- PROVIDER_ALIASES / MODEL_ALIASES(客户端)——把 DSH 路由 id 映射到 models.dev id,用于改名路由和订阅路由

兼容性

- 基于 DeepSeek Harness 0.2.1(rc.4 和 rc.5)开发和测试,同时保留 0.1 的代码路径:0.2 上服务商路由通过 ctx.configEditor 读取,0.1 上通过旧版设置文档读取;写入走配置档的配置编辑器(0.2),回退到旧的深合并
- 客户端部分是纯 React,通过 window.__ModuleLoader__ 加载;没有构建步骤,也没有依赖
- 子代理覆盖依赖 meta.origin: "subagent" / parentAgent——和 dsh-subagent 用的是同一个接缝
- 费用端点通过会话门面读取持久会话日志(snapshotEvents(),回退到 ownEvents() / events)
- 能力、价格、系列和知识过滤需要 models.dev 目录;没有它,面板只提供你的数据能填上的那部分

槽位说明:客户端在注入列表里声明了 remote + remote.session。modelDirectories.directoryFor() 会访问 ctx.remote.session,而 cordis 代理把 ctx 绑定到调用方 fiber——不声明这些,槽位的注入工厂会抛错,原生选择器就会重新占位。

开发

node --test test/*.test.js
测试套件覆盖刷新合并逻辑、每个 HTTP 端点对 0.2 形状上下文的处理、子代理覆盖规则,以及一项结构测试:断言高级面板保留两个列容器(列容器丢失时,页面会渲染成一长串列表,而不会明确报错)。

致谢

- 定价与模型元数据:models.dev(OpenCode 也用这个来源)
- 设计 token、插槽与插件 API:DeepSeek Harness

许可证

MIT
预览分享卡片长什么样 ↓mrdevlorx/dsh-model-garden
分享 · DeepSeek Harness Hub
mrdevlorx/dsh-model-garden

可搜索、可排序的模型选择器,用于 DeepSeek Harness Web UI——服务商分组、收藏、models.dev 价格、上下文窗口、按任务实时 token 花费,还有本地模型筛选…

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部