dsh-ai-wallet

September 2, 2026 · View on GitHub

DSH(DeepSeek Harness)AI 钱包插件——可拖动悬浮球实时显示当前使用模型的余额 / 配额,点击展开多供应商余额面板。

功能

悬浮球(Floating Ball)

  • 固定悬浮于界面任意位置,自由拖动,位置自动记忆
  • 球面实时显示当前对话正在使用的模型对应的余额 / 配额(从最近一次模型调用推断,每 60 秒自动刷新)
  • 点击展开完整余额面板(Esc / 点击遮罩关闭)

余额面板

  • 一屏查看所有已配置供应商的金额余额或配额余量
  • 配额型供应商展示进度条 + 重置时间
  • 手动刷新 + 错误 / 未配置 Key 的友好提示

8 套内置主题

液态玻璃(默认)/ 浅色玻璃 / 磷光绿 / 赛博青 / Dracula / Nord 冰蓝 / 琥珀 / 羊皮纸——面板底部一键切换,主题与悬浮球位置持久化到服务端文件~/.dsh/dsh-ai-wallet.prefs.json),不随 DSH 端口变化丢失。

支持的供应商

ID名称类型需要的 Key
deepseekDeepSeek金额余额DEEPSEEK_API_KEY
zhipu智谱 GLM配额ZP_API_KEY / ZHIPU_API_KEY
zaiZ.ai (GLM 国际)配额Z_AI_API_KEY
moonshotMoonshot Kimi金额余额MOONSHOT_API_KEY
minimaxMiniMax配额MINIMAX_API_KEY
stepfunStepFun 阶跃星辰金额余额STEP_API_KEY
siliconflowSiliconFlow 硅基流动金额余额SILICONFLOW_API_KEY
openrouterOpenRouter金额余额OPENROUTER_API_KEY
xaixAI / Grok金额余额XAI_API_KEY

说明:

  • 供应商 API 以官方文档为准,字段可能随版本调整。
  • xai 使用社区维护的非官方 credits 端点(xAI 预付费 credits 无公开 API),若失效会显示错误。
  • 仅控制台查询、无公开余额 API 的供应商(通义千问、百川、Groq)暂不支持;OpenAI / Anthropic 普通 key 查不了用量,故未内置。

安装

dsh plugin --profile desktop add dsh-ai-wallet

重启 DSH 后生效。

配置(可选)

默认启用 deepseek + zhipu。在 profile 的 cordis.patch.yml 中覆盖:

- id: dsh-ai-wallet
  config:
    providers:
      - deepseek
      - moonshot
      - zhipu

providers 数组顺序即面板展示顺序,支持全部供应商 ID 中的任意子集。

自定义供应商(customProviders)

不在内置白名单、或走私有端点的供应商,可通过 config.customProviders 声明式接入,无需改源码。支持 quotabalance 两种类型,鉴权支持 bearer(默认)与 cookie

- id: dsh-ai-wallet
  config:
    providers:
      - deepseek
      - my-gateway
    customProviders:
      - id: my-gateway
        name: 内部网关
        kind: quota            # quota | balance
        url: https://your-gateway.example.com/api/profile/quota
        auth: cookie           # cookie | bearer
        keyNames: [GATEWAY_COOKIE]
        fields:
          level: data.status
          limits:
            # 单条配额可省略 items;多条时写响应里数组的路径
            # items: data.plans
            label: 月度配额
            remaining: data.remainingCny
            total: data.limitCny
            percentage: data.utilizationPercent
            resetTime: data.period.resetsAt

字段说明:

  • id / name:供应商标识与面板显示名。
  • kindquota(进度条 + 剩余/重置)或 balance(金额行)。
  • url:余额/配额接口地址。
  • authcookie 时把 keyNames 读到的值放进 Cookie 头;bearer(默认)放 Authorization: Bearer <value>
  • keyNames:读取凭据的环境变量名(.env / ~/.dsh/.credentials.yaml),按顺序尝试。
  • fields.limitsquota 响应的字段映射(均为到响应的点路径)。label 可为路径或常量文本;items 可选,指向响应里的数组以显示多条配额。
  • fields.rowsbalance 时的行映射,[{ label, path, suffix? }]

开发

  • lib/index.js — 服务端:/ds-balance/v1 余额聚合路由、/ds-balance/v1/prefs 偏好读写路由;PROVIDERS 注册表 + collect() 汇总;注入 sessionQuery 从 DSH 会话推断当前模型(assistant/message 事件 → source.provider/modelPROVIDER_ALIASES 映射)
  • lib/client.js — 客户端:悬浮球 + 面板渲染、主题系统、拖拽;当前模型与映射由服务端于 active.balanceProvider 下发,客户端只渲染不推断

新增供应商:在 lib/index.jsPROVIDERS 中加一项 { name, kind, keyNames, fetch(key) },或按上文通过 config.customProviders 声明式接入;两种方式客户端都无需改动。

许可

MIT