npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dsh-free-model

v0.2.3

Published

dsh 插件(DeepSeek Harness / cordis bundle)· 模型接入 —— 把 CodeArts、CodeBuddy / WorkBuddy、LobsterAI、Qoder / Qoder CN、TRAE、Cline、Loomy、Raccoon、MiniMax Code、ZCode、Gemini、OfficeAce、Accio Work 十五个账号渠道接进 dsh 的模型选择器,并保留数据看板、运行日志与本地网关(含局域网中继)。上游 2.1.0 的匿名免费车道、EAC 协付车道、

Readme

模型接入 (dsh-free-model)

DSH 插件(DeepSeek Harness · cordis bundle)· English

npm dsh plugin license

Ebony-Vinyl/dsh-our-free-model 2.1.0(提交 7e3a1da)的精简 fork。 只保留「把外部账号接进来」这一条车道:十五个账号渠道 + 数据看板 + 运行日志 + 本地网关。 上游的匿名免费车道、EAC 协付车道、聚合渠道、省 Token、路由与发布/更新通道全部移除。

⚠️ fork 父仓库已走到 2.3.0,但它的后续改动几乎全在被删掉的那些车道里; 渠道与模型数据以真上游为准(见下文「出处与致谢」)。

| | | | --- | --- | | npm | dsh-free-model(与仓库同名) | | 设置页入口 | 模型接入(英文界面 Model Access) | | loader 条目 id | our-free-model(设置命名空间与状态目录挂在这个 id 上,不随包名变化) | | 状态目录 | ~/.dsh/our-free-model/(0600) |

安装

命令行(纯 dsh web)——推荐

dsh plugin --profile web add dsh-free-model

装完重启一次 dsh:宿主半身在进程内,重启才加载新的 index.js;浏览器半身刷新页面即可。 --profile 填你实际用的 profile 名(默认 web)。

桌面端(DSHEAC AIO):用应用内的插件管理器安装。桌面端启动 web 前有一道 profile 闸门, 只放行 dsh 自己在 .dsh-module-fallback 下生成的链接,profile 里出现其它符号链接或 junction 会直接 拒绝启动(PROFILE_UPGRADE_REQUIRED)——所以不要用 link: 依赖、不要手建 junction。

从上游版本切换过来:上游包名是 dsh-our-free-model。两者的 loader 条目 id 都是 our-free-model, 不能同时装:

dsh plugin --profile web remove dsh-our-free-model
dsh plugin --profile web add dsh-free-model

状态目录与条目 id 在本 fork 里没变,所以账号、密钥、出口地址在切换时不会丢。

卸载 / 回滚

dsh plugin --profile web remove dsh-free-model          # 卸载
dsh plugin --profile web add dsh-our-free-model         # 回滚到上游 2.1.0

⚠️ 不要再手工把仓库拷进 node_modules/<包名>/。2026-10-11 实测:这么装的副本会在插件管理器 下一次 pnpm install(装/卸任何别的插件都会跑)时被按 lockfile 顶替,甚至直接清掉。要长期固定就用 registry(本包),或在命令行 web profile 里用 file: 依赖。

快速上手

  1. 重启后进 设置 → 模型接入,逐个渠道点登录(浏览器授权,账号池与积分查询都在同一张卡上)。
  2. 每个渠道卡里可以逐模型开/关,也能「全部显示 / 全部隐藏」——默认可能全是关的,关着的模型 不会出现在模型选择器里。
  3. 回到聊天输入框上方的模型选择器,渠道模型按产品分组出现;选一个即可开始用。

保留了什么

四个设置页(上游九页 → 四页):

| 页面 | 作用 | | --- | --- | | 白嫖模型接入 | 十五张渠道卡:CodeArts、CodeBuddy / WorkBuddy(国内 + 国际)、LobsterAI、Qoder / Qoder CN、TRAE、Cline、Loomy、Raccoon、MiniMax Code、ZCode、Gemini、OfficeAce(华为云 ModelArts,云端直连、无需装客户端)、Accio Work(阿里,标准 OAuth + PKCE,可脱离 IDE)。浏览器登录、账号池、续期、积分查询与一键领取、每日自动签到、逐模型开关、余额查询。 | | 数据看板 | 渠道包自己的逐请求 Token 账本:今日 / 全部消耗、平均生成速度、首字延迟、缓存命中率、成功率、账号透视、模型性能表。 | | 运行日志 | 逐条请求明细:结果、耗时、首字、速度、Token 细分;失败行悬停看原因。 | | 网关设置 | 渠道包的本地 OpenAI 兼容网关(开关、端点、密钥、模型数)+ 本插件的局域网中继(可选绑定地址/端口、独立中继密钥、轮换)+ 出口代理分区(订阅分流或单个 http/socks5 出口)。 |

移除了什么,以及为什么

| 移除 | 原因 | | --- | --- | | 免费模型页:匿名 opencode 车道 + Kilo 免费池 | 第三方灰产通道(伪装客户端 + 池化公共凭据),随时可能失效或改协议。 | | EAC 模型页:GitHub 授权协付车道 | 依赖仓库方网关与 star 授权。 | | 聚合渠道页(76 家自带 Key 的提供商) | 与插件自己的模型适配器(src/adapter.js)绑定,随它一起移除。 | | 省 Token页 | 压缩管线(RTK / 提示词瘦身 / 本地应答)跑在同一个适配器里。 | | 路由页(combo 降级链) | 由同一个适配器提供。 | | 公告中心、自更新、热重载 | 上游发布清单签名验不过;一个 fork 也不该让别人替你换掉本机字节。 | | 本地转发(18899)与局域网转发 | 转发的正是被删掉的那条车道。 | | packages/standalone/(独立 Web 产品)、worker/(EAC 的 Cloudflare 授权网关)、feed/ + catalog/(公告源与发布清单) | 三块卫星全部 import 被删车道,留着就是一套永远跑不起来的代码。 |

规模变化:src/ 从 58 个模块 → 5 个(store/key/chan-relay/egress/trust),宿主 index.js 从 2343 行 → 684 行,浏览器半身 client.js 从 5992 行 → 2531 行,离线测试从 45 个套件 → 16 个。 界面里所有 animation 与 @keyframes 也已删除。

配置

唯一的状态文件是 ~/.dsh/our-free-model/settings.json(0600)。本 fork 只读这三个键:

{
  "egress": {
    "enabled": false,
    "mode": "subscription",
    "url": "",
    "mihomoPath": ""
  },
  "chanGateway": {
    "relay": { "enabled": false, "host": "127.0.0.1", "port": 18326, "key": "" }
  }
}

2.1.0 写下的其它键(enabled、forward、tokenSaver、aggregate、combos、 announcementsAcked…)会被原样保留但不再生效——JsonStore 把文件合并到默认值之上, 所以你已有的出口地址与中继密钥在升级时不会丢。

HTTP 面

全部经信任围栏,前缀 /api/our-free-model:

GET  /summary              四个页面要的文档(settings.egress / channels / version / outlet)
GET  /outlet               当前出口节点与延迟(读数,失败也只是缺读数)
GET  /egress/url           订阅地址本身——只在页面点「显示/复制」时读
POST /settings             只接受 egress 分区
GET  /chan-gateway         中继与网关状态(不含密钥)
POST /chan-gateway/apply   改绑定地址/端口
GET  /chan-gateway/key     中继密钥(按需读)
POST /chan-gateway/rotate  轮换中继密钥

数据看板与运行日志不经过这里:渠道包自己持有逐请求账本,浏览器半身直接走 shell 的 connection RPC(usage.tokenLedger / usage.tokenLedgerHistory)。

安全

  • 凭据:账号 token 进渠道包自己的凭据目录(~/.dsh/.credentials.yaml,0600),页面永远拿不到明文;订阅地址按凭据对待,只在点「显示」时读取,常规 payload 里只有打码后的 host。
  • 局域网中继是唯一对外监听:默认关;开启后必须用独立的中继密钥(与本机网关密钥不通用)。能连上这台机器的人都能消耗你的渠道额度——只在可信网络启用,必要时用防火墙限制来源网段。
  • 信任围栏:插件路由优先级高于内核 /api,所以内置了与内核一致的准入检查——优先复用 composition 的 connection 服务,缺失时退回结构化围栏(Host 必须回环、拒绝跨站标记、Origin/Referer 必须同源)。
  • 出网面审计:见 SECURITY-AUDIT.md——结论是直连各渠道厂商、无第三方中转、无遥测;含 13 家域名与 TLS 证书主体、两处不带凭据的第三方调用、本地暴露面与已知风险。 复跑:node scripts/egress-audit.mjs --tls(只读,--json 出结构化结果)。

测试

npm test                            # 16 个离线套件,无需网络、不花额度
node scripts/host-smoke-test.mjs     # 只跑宿主 HTTP 面
node scripts/client-lint.mjs         # 只跑浏览器半身(字典键一一对应 + CSS 规则可达)

| 套件 | 覆盖 | | --- | --- | | client-lint | 浏览器半身:注册、双语字典键一一对应且无冗余、每条 CSS 规则可达、发出的 ofm_* 类都有定义 | | client-render | 四个页面用宿主形状的 payload 真渲染一遍(终态树,防「引用了已删组件」) | | host-smoke | 宿主 HTTP 面全量:四个页面的数据、出口校验、中继密钥生成/轮换/落盘、被删路由必须 404 | | trust / chan-relay / egress | 三个宿主模块各自的契约 | | channel-pack / channel-network | 渠道包挂载、十五个 provider 注册、积分、图片计价、代理与 OAuth 生命周期 | | channel-model-metadata | 选择器读到的模型元数据:WorkBuddy 五档档位、Loomy spark-x 窗口(远端与兜底两条路径都测)、档位声明顺序与默认档不翻转 | | channel-catalog / channel-catalog-heal | 目录落地广播、got 与 complete 分离、冷启动有界预热;以及残缺目录能否自愈(真装配适配器,先残缺后完整) | | channel-gateway-source | 网关自造消息的 source.kind 落在 dsh-llm 的模块增强词汇表内(真起网关 + 真 HTTP 请求,从 stream() 入参读回合成消息) | | channel-cline-dev | Cline 的 models.dev 目录:Accept-Encoding: br, gzip、ETag/条件请求、304 回退成上次结果(不许变空表)、超时 60s、supportsImage: false 保真 | | channel-officeace-lock / channel-officeace-login | 移植渠道 OfficeAce:登录闭环真走 RPC(authorize URL → poll → 换 token → 落库);锁定分道的判定与执行逐条断言(未锁定逐字走旧路径、锁定+只剩永久桶必须抛错不回落)| | channel-accio | 移植渠道 Accio:真走 RPC 完成回调式登录(授权页 → 本地回调 → 换 token → 按账号 ref 落库),并断言自动续期表覆盖 accio / officeace(漏一项 = 静默不续期且零日志)|

上游的 45 个套件里,其余的都在测被删掉的车道,已一并移除。测试只在仓库里跑(npm 包不含 scripts/)。

渠道包

vendor/channel-pack/ 是一个完整子项目(有自己的 package.json、TypeScript 源码、 测试与构建脚本),pack.js 是它的打包产物:

npm run channel-pack      # 从 vendor/channel-pack/src 重新打包(需要 esbuild)

来源、授权与改造说明见 vendor/channel-pack/NOTICE.md;挂载时关闭了上游 OpenCode 账号接入。

出处与致谢

这个插件的两层来路不同,都是别人的劳动,这里如实写清。

① 宿主与整体形态:Ebony-Vinyl/dsh-our-free-model(fork 父仓库)

本仓库是它的精简 fork。宿主半身、内置渠道包的改造、以及本 fork 沿用至今的目录结构都出自它:

| 它做了什么 | 在哪 | | --- | --- | | 整个插件的原始实现(宿主 + 浏览器半身 + 渠道包挂载) | Ebony-Vinyl/dsh-our-free-model | | 把渠道包内置进 vendor/,并统一改名为 channel-pack(去掉上游代号) | 提交 7bc8068(2026-10-07,作者 Ebony-Vinyl)—— 本 fork 直接继承 | | 在挂载时关闭上游 OpenCode 账号接入(本 fork 保留该开关) | 同上 | | 许可与版权 | MIT,© 2026 Ebony-Vinyl(见本仓库 LICENSE) |

⚠️ 它不是渠道与模型数据的数据源 —— 它自己没有固定节奏地从下面的真上游刷新那段副本, 所以我们查模型列表一律去 ②。

宿主半身(index.js / client.js / src/*.js)的骨架出自它 —— 那是本 fork 的起点。 ⚠️ 截至当前版本,我们还没有从它的 2.2/2.3 取过宿主侧修复:那些改动集中在 被本 fork 删掉的车道与页面上(免费车道、EAC、桌面壳、插件升级页),取不进来。 将来若它有落在保留车道上的宿主修复,按「改动即回写」的规矩单独移植。

另外,有一处两条上游给了不同答案的地方值得说明:网关自造消息的来源身份,父仓库用 { kind: 'plugin:dsh-openai-gateway' },而 gitee 上游用「裸 kind + declare module 增强」。 本 fork 采用了后者 —— 因为 dsh-llm 0.2 已删掉共享的 plugin 包装 (原文「no shared catch-all plugin kind」),且全仓约 20 处 MessageSourceMap 增强 一律是裸 kebab-case,没有任何 plugin: 前缀先例。判断依据与实测见 vendor/channel-pack/src/openai-gateway/messages.ts 的注释。

② 渠道与模型数据:Jet 的渠道包(真上游)

vendor/channel-pack/ 里十五个账号渠道的登录、账号池、凭据续期、积分领取、 模型黑名单与 OpenAI 网关全部出自同一个上游项目 —— 那才是本插件真正的价值所在:

  • Gitee 仓库:iJetLi/deepseek-harness-codearts(上游现已更名为 dsh-providers-hub)
  • 作者:Jet(iJetLi)
  • 许可与版权:MIT,© 2026 Jet(见 vendor/channel-pack/LICENSE)
  • 本 fork 吸收的提交:345f0a07b22713c0ae189ca7d8b97ec4f64626c6(2026-10-06),出处与再构建步骤见 vendor/channel-pack/NOTICE.md

我们在这个副本上做的是外科手术式跟进:当前版本的模型档位、spark-x 上下文窗口、 档位展示顺序,以及目录完整性/广播/冷启动预热,都是逐条对齐 Jet 上游的实测结论移植过来的 (每条改动的依据都写在对应源码注释里)。没有他这份实现,这个插件不存在。

也谢谢 fork 父仓库与真上游的其它贡献者:两边都是多人协作的项目, git log 里那些实测记录(浏览器抓包、真实账号复测、错误码归因)才是这些渠道能跑通的真正原因。

许可

本仓库 MIT(见 LICENSE); 渠道包部分见 vendor/channel-pack/LICENSE(© Jet)与 NOTICE.md。 所有渠道账号、额度与积分规则归各提供商所有,请遵守各自的服务条款。