- Home
- Plugin
- Modelli e provider
- dsh-loomy
dsh-loomy
kukonce/dsh-loomy
Unofficial Loomy (iFlytek) model provider: signs in with an SMS code or by adopting the Loomy desktop app session already on the machine, registers one provider route per account from the live per-account catalog, and renews the daily 5000 free credits on startup and at local midnight. Unofficial: the endpoints and the desktop client's own application key pair were reverse-engineered from the Loomy desktop app, and automated traffic may conflict with Loomy's account terms. On first start it silently imports the login the desktop app keeps in a plain-text auth-session.json (on Windows it scans every C:\Users\Public\Loomy\*\userData folder and takes the most recently updated session), keeps sessions in $DSH_HOME/dsh-loomy/accounts.json, claims the daily credits at startup and every local midnight, and sends chat requests to loomyad.xunfei.cn.
Installazione
dsh plugin --profile web add github:kukonce/dsh-loomyREADME
dsh-loomy
把 Loomy(讯飞 Loomy 桌面端)的账号接入 DeepSeek Harness,作为 模型提供方使用。
一个 Loomy 账号在 DSH 里长成一条独立的模型路由:
@loomy/dsh-loomy/loomy ← 第一个账号
@loomy/dsh-loomy/<id> ← 每个账号一条
快速安装
dsh plugin --profile desktop add github:kukonce/dsh-loomy
装完重启 DSH。第一次启动会自动尝试导入本机 Loomy 桌面端的登录态;没有的话用
/loomy login <手机号> 或设置面板里的「Loomy」分区登录。
登录用手机短信验证码,或者直接复用本机 Loomy 桌面端已有的登录态 —— 不需要 API Key, Loomy 本身就没有 API Key 这种东西。账号的「每日赠送 5000 积分」由插件在启动时和每天 本地零点自动刷新。
装到 DSH 里
插件放在 ~/.dsh/local-plugins/dsh-loomy,然后在某个 profile 里登记两处:
1. ~/.dsh/profiles/<profile>/package.json —— 加依赖和 bundle:
{
"dependencies": {
"@loomy/dsh-loomy": "file:C:/Users/<you>/.dsh/local-plugins/dsh-loomy"
},
"dsh": {
"profile": {
"bundles": [
// …原有条目…
"@loomy/dsh-loomy"
]
}
}
}
2. 装依赖(用 DSH 自带的 pnpm,在 profile 目录里跑):
cd ~/.dsh/profiles/<profile>
node <dsh>/dsh-runtimes/dsh-primary-runtime/dependencies/pnpm/bin/pnpm.mjs install --ignore-scripts
然后重启 DSH。新增的 bundle 是在启动时加载的,热重载不会把一条新的 bundle 拉进来。
装好之后:设置里多一个「Loomy」分区,命令里多一个 /loomy。
登录
第一次启动时,插件会自己去找本机 Loomy 桌面端的登录态并导入(前提是你在 Loomy 客户端里 登录过)。找不到就什么都不做,等你手动登录。
三种方式,等价:
/loomy import 导入 Loomy 桌面端已有的登录(最快)
/loomy login 13800138000 发送短信验证码
/loomy login code 123456 用验证码换 session
也可以在「设置 → Loomy」里点。
登录态存在 ~/.dsh/dsh-loomy/accounts.json,目录权限 0700、文件 0600。它是明文的 ——
Loomy 的 session 本身就是一个不加密的 bearer 串,没有任何一层能把它变成不可读;能读你用户目录
的进程就能读它。介意的话退出登录即可(/loomy logout)。
每日 5000 积分是怎么回事
Loomy 的积分分两个池子:
| 池子 | 额度 | 来源 |
|---|---|---|
| 每日赠送(daily) | 5000 / 天 | 每日重置,优先消耗 |
| 长期 / 永久(permanent) | 不固定 | 注册奖励、新手任务、兑换码 |
让每日池回到 5000 的是 POST /api/v1/points/first-login,不是「读一下余额」。它名字叫
"首次登录",实际行为是「开始今天的计费周期」:同一个 dailyCycleDate 内重复调用是幂等的
(返回 alreadyProcessed: true),所以随便调都是免费的。
插件在三个时机调它:
- 启动 之后约 12 秒(等其它插件先安静下来);
- 每天本地零点,
msUntilNextMidnight()算出来的那一刻; - 面板刷新时 —— 顺带当余额读取用,因为它是唯一一个一次返回四个数字加今日消耗的接口。
本地留一本账 daily-grant.json 记住「今天领过没有」,避免重启后又问一遍;面板上的按钮强制重来。
注意:这里没有任何「假装已领取」的逻辑。能不能真的拿到 5000 由服务端判定,插件只是把 官方客户端的那个调用照做了一遍。
模型
目录是按账号实时拉的(GET /api/v1/models),不是写死的表 —— 你的账号能用哪些模型,
选择器里就只有哪些。这台机器上当前是 9 个(见 docs/models.md)。
目录里有 3 个模型(Hy-Image-3.5-preview、doubao-seedream-5-lite、qwen-image-3.0-pro)的
type 是 image —— 它们的地址和对话接口相同,但对对话请求一律返回 404「该模型暂未开放」
(2026-11-11 实测)。所以模型选择器里不会出现它们:能被选中的只有真正能回答对话的 6 个。
/loomy models 会把它们列出来并标 [不支持对话],免得你以为是插件漏了。
/loomy models 列出当前账号的模型、能力和上下文长度
命令
/loomy status 账号、积分、模型数量一览
/loomy login <手机号> 发验证码
/loomy login code <验证码> 验证码换 session
/loomy import 导入桌面端登录
/loomy logout [id] 退出(账号 id 省略时取第一个)
/loomy models [id] 当前账号的模型目录
/loomy credits [id] 积分明细(每日/长期/今日消耗)
/loomy claim [id] 立刻领取今日赠送额度
/loomy tasks [id] 新手任务进度(一次性 10000 积分池)
/loomy claimtask <任务名> 完成一个新手任务并领取
新手任务奖励不会自动领 —— 那是每个账号只有一份的长期积分,什么时候花应该由你决定。
为什么这样做
为什么要发两个认证头
同一个 host 上的两组接口读不同的头,而且失败时返回的是 HTTP 200 + 错误码,不是 401:
/api/v1/models、/points/*这些读token: <session>;/api/v1/chat/completions读Authorization: Bearer <session>(方案名大小写敏感)。
所以插件两边都发。注意错误信息 缺少 token 容易误导 —— 它说的是「缺 Authorization」,
不是「缺 token」。完整矩阵见 docs/protocol.md。
为什么要垫高 max_tokens
这些是推理模型,思考过程和正文共用同一个 max_tokens 预算。实测给 200 tokens 时,
预算全被思考吃掉,正文为空、finish_reason: length —— 用户看到的是「模型没回答」,
实际是被截断了。所以适配器给 max_tokens 兜了个 1024 的下限。
为什么每个账号一条路由
模型目录和积分余额都是按账号算的,而模型选择器是按 provider 分组的。两个账号挤一条路由, 在界面上就变成「一个账号,模型列表一直在变」。
已知限制和风险
- 这是非官方集成。 没有公开 API,所有接口都是照官方桌面客户端的行为逆出来的,随时可能变。
- 账号风险和合规。 用插件调用等同于用 Loomy 客户端调用,但自动化流量可能触发风控。请自己判断 是否符合你账号的协议条款。
- 会话认证。 session 是 bearer 串,没有 refresh 接口。失效了只能重新登录(错误码
100002)。 插件会把它标成「登录已失效」并提示重登,不会假装还能用。 - 生图模型不提供。 目录里有 3 个
type: image的生图模型,它们不接受对话请求,插件既不会 在选择器里提供它们,也没有实现生图调用 —— 这里只做对话。 - 点数由服务端计费。 插件不预测也不拦截消耗;余额以服务端返回为准。
- 单机单用户。 账号表、日志、缓存都在
~/.dsh/dsh-loomy/下,没有多用户隔离。
文件都在哪
~/.dsh/dsh-loomy/
accounts.json 账号表(含 session,明文,0600)
catalog.json 模型目录缓存(目录接口挂了时兜底)
daily-grant.json 每日领取账本
expired.json 哪些账号的 session 被判失效
整个目录删掉 = 插件回到初始状态。
协议细节
- docs/protocol.md —— 主机、认证头矩阵、信封格式、SSE 事件、错误表、未知项
- docs/models.md —— 模型目录快照
- docs/verify/live-check.mjs —— 可重跑的协议自检(47 项)
node ~/.dsh/local-plugins/dsh-loomy/docs/verify/live-check.mjs
许可证
MIT。图标是占位图。Loomy / 讯飞 的名称和标识归各自所有者,本项目与讯飞无隶属关系。
Plugin correlati
dsh-our-free-model
ebony-vinyl/dsh-our-free-model
dsh-routing-suite
yjh051108/dsh-routing-suite
dsh-connect-workbuddy
dingminhua/dsh-connect-workbuddy
dsh-workbuddy-connect
corrinehu/dsh-workbuddy-connect