dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
OpenRouter free-models browser & one-click model config for DeepSeek Harness (DSH) — newest-first, local search, platform tabs. DSH 免费模型浏览器:按最新排序、本地搜索、一键添加到模型列表
dsh-model-list 是一个 DeepSeek Harness(DSH)插件: 浏览 OpenRouter 的官方模型目录(openrouter.ai/models 同款数据),一键把其中任何模型—— 包括免费变体——添加到 DSH 模型列表。
PLATFORMS 注册表让后续平台接入只需一行)。拉取逻辑在宿主侧完成,tab 是主要入口。localStorage(默认关闭)。rgba(0,0,0,.32) 蒙版 + blur(12px) saturate(1.2)、
color-mix(bg-layer-1 78%) 玻璃面板 + border-l2 细描边 + 14px 圆角 + 0 16px 48px rgba(0,0,0,.28) 投影、
border-l1 分隔线;主按钮与选中的 tab / 二级 tab / 筛选 chip 用实心 button-primary-fill,
输入框 bg-base、卡片 bg-layer-2、状态色走 state-* 令牌。https://openrouter.ai/api/frontend/v1/models/find?active=true&fmt=cards&order=newest——
分别以 variant=standard 与 variant=free 各取一次(两者都是一模型一卡、无分页),
并从响应信封的 data.analytics 联表出每个模型的周调用量(近 7 天 token 数)。
浏览器侧按官方筛选集做本地筛选:搜索、变体下拉、输出模态 tab(带计数)、排序
(周调用量 / 发布时间 / 上下文大小 / 输入价格 / 输出价格 / 模型名称),以及筛选组
(输入模态、有折扣、上下文长度档位、提示词价格档位、输出价格档位、系列、支持参数、
供应商、厂商)。卡片按官方版式:作者头像、名称、周用量、折扣徽标、描述两行截断、
底部规格行(by 厂商 / 上架日期 / 上下文 / $x/M input tokens / $x/M output tokens)。GET /api/v1/key)。确定后:
.credentials.yaml(OPENROUTER_API_KEY);settings.yaml 里的 OpenRouter 路由(llm-pi-ai 命名空间——已有
openrouter / openrouter-free / baseURL 指向 openrouter.ai 的路由时并入,原样保留其
apiKeyEnv 与已有模型条目;否则新建 openrouter-free 路由,openai-completions 协议 +
https://openrouter.ai/api/v1);agent-default-model 命名空间)。
完成后模型立即出现在对话框底部的模型选择器中,无需重启宿主。$DSH_HOME/dsh-model-list.json(6 小时新鲜窗口)。| 脚本 | 作用 |
|---|---|
npm run check | tsc -b 类型检查(host + client 两个 program) |
npm run build | 清理 lib/,tsc -b,tsdown 打包 lib/index.js(宿主,ESM)+ lib/client.js(浏览器,__ModuleLoader__ 工厂) |
npm run watch | tsdown watch 模式 |
npm run verify | 模拟宿主模块加载器校验 lib/client.js(工厂形状 + seed 外部依赖) |
npm run test:ops | 宿主逻辑离线单测(find/cards 规范化、周用量联表、路由识别、配置写入编排、数据文件往返含 v1 旧缓存拒绝) |
npm run smoke | 直连真实 OpenRouter models/find 的冒烟测试 |
npm run release | check + build + verify,然后 npm version patch 并 git push --follow-tags |
npm run publish:npm | check + build + verify,然后 npm publish --access public |
# 本地开发(link 工作区;lib/ 重新构建后自动生效)
dsh plugin --profile web add ./dsh-model-list
# 已发布:npm / tarball / GitHub
dsh plugin --profile web add dsh-model-list
dsh plugin --profile web add github:you/dsh-model-list#<sha>
dsh --profile web --dump-config # 确认分层
dsh --profile web # 启动(宿主半边需要重启后加载)
本地开发依赖:宿主经原生 Node ESM 加载
lib/index.js,因此插件目录必须能解析@deepseek-ai/schemastery与@deepseek-ai/dsh-settings。在插件目录里执行一次pnpm install,或直接使用仓库内已提交的lib/构建产物(本仓库提交lib/,与 dsh-jenkins 一致)。
OPENROUTER_API_KEY,弹框中有提示),src/client/components/FreeModelsSection.tsx:在 PLATFORMS 追加 { id, labelKey },
并在下方按 id 挂载面板组件。src/client/components/OpenRouterPanel.tsx 作为起点;ops 请求带上
platform: '<id>'。src/host/ops.ts:扩展 runOp 的平台分发(按平台 API 实现拉取/过滤,映射到
RouteModelProfile,并在 model-config.ts 里补该平台的凭据引用与路由命名)。├── src/host/*.ts # 宿主半边:/dsh-model-list/api 路由(按平台分发 op)、
│ # OpenRouter find/cards 拉取 + analytics 周用量联表(10 次重试)、
│ # 缓存存储、模型配置写入(settings + credentials 服务)
├── src/client/*.tsx # 浏览器半边:settings.section 平台 tab 外壳(含「在菜单中显示」
│ # 开关)、sidebar.footer.action 入口按钮、官方筛选/排序/卡片、
│ # 添加到模型列表弹框
├── lib/index.js # 宿主半边构建产物(tsdown,ESM),已提交
├── lib/client.js # 浏览器半边构建产物(tsdown → __ModuleLoader__ 工厂),已提交
├── scripts/ # verify-client.mjs、test-ops.mts(离线单测)、smoke-openrouter.mts(真实冒烟)
├── tsdown.config.ts # node 半边 + client bundle 包装
├── cordis.patch.yml # 组合包 patch:按包名引用的插件行
└── package.json # dsh.bundle + dsh.client(web) 清单 + peerDependencies
settings.update('llm-pi-ai', …) 会经过 llm-pi-ai 的
schema 校验(不合法的配置在写入处被拒绝),适配器实时重注册路由——添加模型
后无需重启宿主。apiKeyEnv、额外字段)会被保留:
添加模型只重写该路由的 models 数组(按 id 合并,同 id 覆盖)。dsh-model-list.json)。