← 返回列表
未验证
一个 DeepSeek Harness 配置文件包,将 DeepSeek…
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/15 · 已提供中文文档
DeepSeek 非高峰时段提醒、账户余额以及 DeepSeek Harness Web UI 的实时会话成本估算
综合分
29
GitHub 分
29
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add Webificio/dsh-deepseek-cost-watch该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
信任档位:已验证本站已于 0 天前真实安装成功
- 是什么
- dsh 原生插件 · ui
- 装得上吗
- 本站已真实安装成功(非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 10 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/25
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/24(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成dsh-deepseek-cost-watch
一个 DeepSeek Harness 配置文件包,将 DeepSeek 的非高峰时段表、账户剩余余额和实时成本估算放入 Web UI。
它用单个永久、可安装的包取代了两个一次性的动态插件:无需打包器、无需构建步骤、无依赖,仅两个小型 JavaScript 文件。
功能
1. 非高峰徽章(全框架浮层)
应用右下角的浮动卡片:
┌─────────────────────────────────────┐
│ ● DeepSeek off-peak – │
│ [−50%] Discount active │
│ Ends in 1h 42m 07s │
│ Balance $8.28 │
│ ─────────────────────────────────── │
│ Peak UTC: Mon–Fri 01:00–04:00 · │
│ 06:00–10:00 │
│ Local time (UTC+02:00): │
│ 03:00–06:00 · 08:00–12:00 │
│ Outside those windows every model │
│ costs half. │
└─────────────────────────────────────┘
* 实时状态 — 非高峰时段显示绿色(−50%),高峰时段显示琥珀色(PEAK),每秒刷新一次。
* 倒计时 — 距离下一次高峰/非高峰切换。
* 余额 — DeepSeek 账户剩余额度,直接来自官方 GET /user/balance 端点。悬停可查看赠送/充值拆分及读取时间;点击该行可立即刷新。
* 双时区时间表 — 固定的 UTC 时间窗口,以及转换到你浏览器时区的相同窗口,当窗口在本地跨越午夜时包含 (+1d) 标记。
* 可折叠 — 按 – 将其收缩为 PEAK · 18m 04s / OFF-PEAK −50% 胶囊;点击胶囊可再次展开。
2. 成本估算(输入框下方)
在自带的 token 计数器旁边,输入框上方:
* 折叠状态: 一个彩色圆点加上当前打开的 Session 的估算花费 — ● ≈ $0.1414。绿色表示你即将发出的请求按非高峰计费,琥珀色表示高峰。
* 展开状态(点击): 完整明细,以正常页面流显示,因此不会与输入框或徽章重叠:
Estimated total $0.1414
Balance $8.28
Peak (01-04, 06-10 UTC, Mon-Fri) $0.1414 · 5.95M tok
Off-peak $0.00 · 0 tok
Uncached input 114.46k tok
Cache read (hit) 5.77M tok
Output 60.35k tok
Model DeepSeek-V4.1-Flash · $0.1414
Right now peak · changes at 10:00 UTC
Estimate from the official DeepSeek rates (2026-09-15): cache hit /
cache miss / output, with off-peak at half the peak rate. Not a billed amount.
该估算是感知历史的:Session 日志中的每个已计费请求都按该请求发生时生效的费率卡定价,因此跨越费率档位变化的 Session 会被拆分
在高峰和非高峰时段之间正确计价,而不是完全按今天的费率计价。
3. 余额
与 DeepSeek 平台在充值页面显示的相同数字,无需离开应用:
* 由 Host 读取,浏览器从不读取:API 密钥保留在 Host 进程中,仅发送到
api.deepseek.com。
* 解析方式与模型路由完全一致——使用存储的凭据(DEEPSEEK_API_KEY,即
Models 页面写入的引用),如果失败,则使用启动环境。
* 在插件激活时刷新一次,每 5 分钟刷新一次,并在你点击该行时按需刷新。
Host 会缓存答案 60 秒,因此多个浏览器标签页永远不会重复调用。
* 降级而不是中断:没有凭据时显示 no API key,API 不可达时显示
unavailable,两者都会在工具提示中说明原因。低额度(is_available: false)
会将金额显示为琥珀色。
要求
* 带有 web 配置文件的 DeepSeek Harness(一个附带 dsh plugin 和 dsh.bundle
配置文件包的版本——0.1.5-rc 或更高版本)。
* PATH 中有 pnpm(dsh plugin 会转发给它)。
* 从 GitHub 安装时,PATH 中有 git。
安装
从 GitHub 安装:
dsh plugin --profile web add github:Webificio/dsh-deepseek-cost-watch
从本地检出安装(将 owner/repo 替换为你自己的 fork 后,同样的命令也可用于
你的 fork):
dsh plugin --profile web add /absolute/path/to/dsh-deepseek-cost-watch
任一命令都会将包安装到 web 配置文件中,并自动将其追加到
dsh.profile.bundles(该包声明了 dsh.bundle.patch,因此 dsh plugin
会将其识别为配置文件层)。
然后重启配置文件——包是在配置文件启动时组合的,因此请停止正在运行的
dsh web 并重新启动:
dsh web
重新加载浏览器页面。你应该会在右下角看到非高峰卡片,并且当打开的 Session
至少计费一次请求后,费用行会出现在编辑器停靠栏中。
验证安装
cat "${DSH_HOME:-$HOME/.dsh}/profiles/web/package.json"
dsh-deepseek-cost-watch 必须出现在 dsh.profile.bundles 中。如果没有出现,说明插件
是作为普通依赖安装的;请重新运行 add 命令并查看 pnpm 的输出。
卸载
dsh plugin --profile web remove dsh-deepseek-cost-watch
之后重启配置文件。两个占用项和两条 Host 路由都会随包一起消失。
工作原理
一个配置文件行,同一个包的两半:
| 半部分 | 入口 | 贡献内容 |
| --- | --- | --- |
| Host | lib/host.js(main) | Connection 载体上的两条只读 Fetch 路由:GET /api/deepseek-cost-watch/report?sessionId=…(将实时 Session 日志折算为费用估算)和 GET /api/deepseek-cost-watch/balance(使用存储的密钥读取账户余额)。 |
| 浏览器 | lib/client.js(exports["./client"]) | 一个 Cordis 客户端插件,声明两个插槽:shell.overlay(带余额行的徽章)和 conversation.composer.dock(费用行)。 |
| --- | --- | --- |
browser (client.js) host (host.js)
──────────────────── ──────────────
shell.overlay ─┐
off-peak badge │ in-process: local peak/off-peak math (no round trip)
balance row │
conversation. ─┤
composer.dock │
cost line ─────────┤ fetch ─────────▶ GET /api/deepseek-cost-watch/report
│ ctx.sessions.get(id).snapshotEvents()
│ → foldUsage() → JSON
└ fetch ─────────▶ GET /api/deepseek-cost-watch/balance
ctx.credentials.resolve('DEEPSEEK_API_KEY')
→ api.deepseek.com/user/balance → JSON
折叠逻辑有意放在 Host 上:只有 Session 日志记录了每个请求何时被计费,而浏览器的
tokenUsage 投影只携带聚合的 token 总量,没有时间戳。余额在 Host 上读取则是出于另一个
原因:API 密钥绝不能到达浏览器。叠加层的实时时钟完全不需要 Host 往返,因此它每秒根据
已发布的时段表在本地重新计算。
插件注册的一切——两个 Fetch 路由、样式表、余额轮询,以及两个插槽占用者——都归插件的
fiber 所有,因此停止、更新或移除该包会撤回所有这些内容。
文件
dsh-deepseek-cost-watch/
├── package.json # name, exports, dsh.bundle.patch, dsh.client.platform
├── cordis.patch.yml # the one profile row this bundle inserts
├── lib/host.js # Host half: rates, schedule, session-log fold, balance, both routes
├── lib/client.js # Browser half: hand-written module-loader bundle
├── test/smoke.mjs # dependency-free checks for both halves
├── README.md
└── LICENSE
余额、凭据和端点
| 设置 | 默认值 | 位置 |
| --- | --- | --- |
| 凭据引用 | DEEPSEEK_API_KEY | 存储的凭据(Models 页面)或启动环境 |
| API 基础 URL | https://api.deepseek.com | DEEPSEEK_BASE_URL,与模型适配器读取的变量相同 |
| 余额端点 | GET /user/balance | — |
| Host 缓存 | 60 秒 | lib/host.js 中的 BALANCE_TTL_MS |
| 浏览器轮询 | 5 分钟,外加点击刷新 | lib/client.js 中的 BALANCE_REFRESH_MS |
该密钥仅用于一个请求:针对配置的基础 URL 发送 Authorization: Bearer 。它从不被
记录,从不被路由返回,也从不发送到浏览器。
价格,以及如何更新它们
费率表位于 lib/host.js 的顶部,以每 1,000,000 个 token 的美元为单位,
每个桶(缓存命中、缓存未命中、输出)写作 [off-peak, peak]:
export const RATE_TABLES = [
{
id: 'deepseek-flash',
name: 'DeepSeek-V4.1-Flash',
models: ['deepseek-flash', 'deepseek-v4-flash'],
cacheHit: [0.003, 0.006],
cacheMiss: [0.15, 0.3],
output: [0.6, 1.2],
},
]
* RATE_AS_OF 和 RATE_SOURCE 会打印在展开面板中,因此过期的费率表在 UI 中可见,而不是悄无声息。
* 当 DeepSeek 发布新定价时更新这些数字,然后重启 profile。
* 只有 deepseek-official 路由会被计价。其他任何内容都会被计入并报告为未计价,而不是进行猜测。
* 时间表(PEAK_WINDOWS)为 UTC:周一至周五 01:00–04:00 和 06:00–10:00,其他所有时段为半价非高峰时段。
* 显示的数字是估算值,而非账单:它使用所配置模型的标价,而积分、折扣或提供商侧的价格变动对它来说是不可见的。
开发
没有构建步骤。编辑 lib/host.js 或 lib/client.js 并重启 profile。
npm test # node test/smoke.mjs — 无依赖
冒烟测试会使用两张费率卡对一个合成的 Session 日志进行计价,测试报告路由(200 / 400 / 404),针对打桩的 DeepSeek API 驱动余额路由(成功、缓存、?refresh、HTTP 错误、无法访问、缺少凭据),然后使用桩模块加载器加载浏览器 bundle,并断言它注册了模块 id、占用了两个 Slot 位置、注入了样式表、轮询余额,并渲染带有剩余额度的徽章。
lib/client.js 是一个手写的 bundle,采用 Harness 的客户端模块加载器格式(window.__ModuleLoader__.load({ id, factory })),这就是该包不需要打包器的原因。有两个细节至关重要:
* 注册的模块 id 必须等于 package.json 中的包名,并且
* bundle 必须保持自包含——React 来自运行时的模块表(require('react')),不导入其他任何内容。
限制
* 成本行仅对 Host 仍保留在内存中的 Session 显示,即你当前打开的对话。冷启动或已归档的 Session 不会从磁盘重新读取。
* 估算值涵盖 Session 日志中已计费的助手请求;子代理 Session 在其各自的对话中计价。
* 浏览器部分针对 Web profile(dsh.client.platform: "web");TUI 和无头 profile 仅加载 Host 路由。
* 余额需要 Host 进程能够对外访问 DeepSeek API;在代理后面时,将 DEEPSEEK_BASE_URL 设置为可访问的源。当无法读取时,该行会说明情况,插件的其余部分继续正常工作。
* 余额是账户的额度,而非每个 Session 的数字,并且它的新鲜度仅取决于上次读取的时间(5 分钟,或一次点击)。
许可证
MIT — 参见 LICENSE。