Zum Hauptinhalt springen
K

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.

Installation

dsh plugin --profile web add github:kukonce/dsh-loomy

README

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),所以随便调都是免费的。

插件在三个时机调它:

  1. 启动 之后约 12 秒(等其它插件先安静下来);
  2. 每天本地零点,msUntilNextMidnight() 算出来的那一刻;
  3. 面板刷新时 —— 顺带当余额读取用,因为它是唯一一个一次返回四个数字加今日消耗的接口。

本地留一本账 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 被判失效

整个目录删掉 = 插件回到初始状态。


协议细节

node ~/.dsh/local-plugins/dsh-loomy/docs/verify/live-check.mjs

许可证

MIT。图标是占位图。Loomy / 讯飞 的名称和标识归各自所有者,本项目与讯飞无隶属关系。

Ähnliche Plugins