deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
在 DSH Web 侧边栏底部显示 DeepSeek API 账户余额、是否可用,以及当前处于高峰 / 空闲计费时段和距下一次切换的倒计时。
total_balance 与币种;悬停查看赠送余额 / 充值余额明细。本插件是「组合包」(bundle):package.json 声明 dsh.bundle.patch,cordis.patch.yml 插入插件行。安装即把它加入某个 profile 的 bundles 列表。
把 profile 依赖指向本地目录,改完构建即可生效:
dsh plugin --profile web add /path/to/dsh-deepseek-balance
pnpm build # 产出 lib/
add 会以 link: 链接该目录,并自动把包名追加进 profile 的 dsh.profile.bundles。验证层已生效再启动:
dsh --profile web --dump-config # 应能看到 dsh-deepseek-balance 层
dsh web
link: 安装不执行构建脚本,不需要下面的 allowBuilds 授权——产物由你手动 pnpm build 生成。Host 侧改动(src/index.ts)需重启 dsh web;客户端改动(src/client/index.ts)构建后刷新页面即可。
dsh plugin --profile web add github:Jianwen-Xu/dsh-deepseek-balance
git 安装拉取的是源码,需要在安装时构建出 lib/。本包已声明 prepare 脚本(= tsdown),pnpm 会在安装后自动运行它。
但 pnpm ≥ 10 默认拒绝执行 git 依赖的构建脚本,首次 add 会因此失败(缺少 lib/)。按提示把 pnpm 打印的包键写进该 profile 的 pnpm-workspace.yaml:
allowBuilds:
dsh-deepseek-balance: true
然后重新执行 add。⚠️ 这项授权等于允许该包的代码在安装时于你机器上执行,请只对可信来源授权,并用 commit 锁定内容:
dsh plugin --profile web add github:Jianwen-Xu/dsh-deepseek-balance#<sha>
不想授权就改成 tarball 安装(产物在打包时已构建好):
pnpm pack && dsh plugin --profile web add ./dsh-deepseek-balance-1.0.0.tgz
插件按以下顺序解析 DEEPSEEK_API_KEY:
ctx.credentials.resolve('DEEPSEEK_API_KEY')(推荐:在 Web 的 Models 设置页保存,或写入 ~/.dsh/.credentials.yaml)。DEEPSEEK_API_KEY(兜底)。缺失时接口返回 {"ok":false,"code":"no-api-key"},UI 显示红色状态点。
pnpm install
pnpm build # 产出 lib/index.js(Host 侧,ESM)+ lib/client.js(浏览器侧,__ModuleLoader__ 包装)
两个产物都来自
src/。lib/不入库,不要直接改它:pnpm build会覆盖,克隆后也必须先构建。
build与prepare是同一个命令:前者供手动/CI 调用,后者供dsh plugin add <git-url>时由 pnpm 自动触发。
CI(.github/workflows/ci.yml)在每次 push 和 PR 上跑 pnpm install --frozen-lockfile && pnpm build,并校验两份产物的契约:Host 侧必须导出 name / inject / apply,浏览器侧必须以包名向 window.__ModuleLoader__ 注册。
GET /deepseek-balance(精确匹配)
| 参数 | 说明 |
|---|---|
refresh=1 |
跳过 60s 缓存,强制向上游请求一次 |
响应示例:
{
"ok": true,
"isAvailable": true,
"display": { "currency": "CNY", "totalBalance": "17.49", "grantedBalance": "0.00", "toppedUpBalance": "17.49" },
"peakHour": false,
"peakLabel": "空闲",
"nextLabel": "高峰",
"nextSwitchAt": 1789347657403,
"fetchedAt": 1789125085432
}
失败时返回 ok:false 且带 code(no-api-key / http-error / no-balance-info / fetch-error)与 message。
kind: 'exact' 注册,并挂在 ctx.effect 上,插件卸载时自动注销。IncomingMessage,没有 req.query,查询串从 req.url 解析。Cache-Control: no-store,防止浏览器缓存让手动刷新失效。getTimezoneOffset(),在东八区宿主上会算错)。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。