KhalilYamber/dsh-tidewatch

dsh-tidewatch

DeepSeek 峰谷时刻悬浮徽章 · dsh plugin:实时峰谷档位、下一阶段倒计时、本次会话 API 花费(含三段历史价格档)| A floating tide badge for DeepSeek Harness: live peak/off-peak phase, countdown and session cost.

未分類cost-trackingdeepseekdeepseek-harness

dsh-tidewatch

DeepSeek Harness 的峰谷时刻挂件。一枚停在界面右下角的潮汐立绘,随时告诉你此刻是峰期还是谷期、距下一次切换还有多久、本次会话花了多少钱。

这是什么

DeepSeek 自 2026-08-17 起对 API 实行峰谷分时定价:峰期价目是谷期的两倍,周末与中国法定节假日全天按谷价。这意味着同样一次调用,落在不同钟点,账单可能差一倍。

dsh-tidewatch 把这件事摊开在你眼前:现在是什么档位、距离切换还有多久、这一场对话已经花了多少钱。金额按每次调用实际发生的时刻计价,回看历史会话也不会被当前价目重算。

它卖的是「口径可核对」:峰谷窗口、周末、法定节假日、调休、三段历史价格全部写在代码里,并配一条全年逐小时的口径比对脚本作为复核手段。

两种形态,随时切换

同一个版本内置两种界面形态,峰谷判定、会话费用、Token 明细、账户余额完全一致,差别只在长在哪里、长什么样。装一份就都有,在面板里一键切换,立刻生效,不用重装、不用刷新。

形态长什么样适合谁
立绘挂件屏幕右下角一只立绘,可以拖到任意位置、松手吸附到左右边缘。点一下弹出漫画气泡,再点一下翻页看本次会话开销。峰期与谷期用不同立绘喜欢有角色的、想看立绘随时段变化的
胶囊徽章嵌在官方输入框下方那行统计里,与官方条目并排,不占屏幕空间、不遮挡任何东西;点一下直接展开完整面板喜欢极简的、不想被浮层挡住的

切换形态

打开面板(点立绘出气泡 →「详情 ›」;胶囊形态直接点徽章)→ 面板底部「形态」一行,选「立绘挂件」或「胶囊徽章」。切换即时生效,偏好会被记住。

两种形态同时挂载、只渲染被选中的那一个;没被选中的不跑余额轮询与计时器,也不会在界面上留下占位。

特性

分类能力
峰谷官方峰谷窗口判定;秒级倒计时到下一阶段;周末与法定节假日全天谷期;调休上班的周末同样全天谷期
计费三段历史价格时代(基础价 / 首版峰谷价 / V4.1 Flash 新价)按调用时刻选档;缓存命中与未命中分开计价;输出含推理 token
余额读取 DeepSeek 账户余额(充值 / 礼金 / 合计)与读数时刻
挂件右下角常驻立绘,可拖拽,松手吸附到较近的一侧,位置持久化;峰期与谷期换不同立绘
形态立绘挂件与胶囊徽章装在同一个版本里,面板里一键切换、即时生效,偏好会被记住
会话隔离每个会话各记各的账:新建会话从 ¥0.00 起算,切回旧会话恢复它自己的数字,多会话并发也不串账
气泡点立绘弹出漫画式对话气泡(大圆角 + 指向头顶的尖角);点气泡翻页。收起只有两条路:约 5 秒后自己淡出,或点插件之外的任何地方
交互点立绘出气泡、点气泡翻页;完整面板从气泡的「详情 ›」进入;面板右上角 ✕、再点立绘、或点外部都会收起
编辑器面板内置气泡编辑器:增删页与行、改模板文案、拖拽排序(也可点 ↑↓)、模块库(☆ 收藏常用行,一键插入)、一键恢复默认
泡泡玩法一行内用 A || B 并列随机、写成 img:https://… 渲染成图片(在线图与 data URI 均可)
观感跟随 GUI 亮暗主题(--dsw-* 变量);复用 DSH 官方 UI 原语;合成提示音(无音频素材)
账号通道实测账号内置通道自带 usage,按 token 精准计价;只有这条通道确实拿不到用量时,才退回余额差值估算,金额标「(估算)」
诊断用量异常时(一条结算事件都没收到,或有事件但一条不带用量)气泡底部出现一行排障信息;正常会话里不显示
不适用时当前模型不是 DeepSeek 时显示「不适用」,不拿 Flash 价硬凑数字;同一会话里早先已计价的调用仍照常计入总额

安装

快速安装见上文「两种形态」。本节讲完整的前置条件与各种安装方式。

前置条件

  • Node.js ≥ 20
  • 带 dsh plugin 命令的 DeepSeek Harness
  • 桌面端用户请把下文的 --profile web 换成 --profile desktop(桌面端读取的是 desktop profile)

从 GitHub 安装(推荐)

dsh plugin --profile web add github:KhalilYamber/dsh-tidewatch

从 Release 安装(可固定版本、可离线)

到 Releases 下载对应版本的 tgz。界面语言二选一——两个包的功能与峰谷规则完全一致,只是界面文案不同:

版本文件界面语言
中文版dsh-tidewatch-<版本>.tgz中文
英文版dsh-tidewatch-en-<版本>.tgzEnglish

⚠️ 两个版本不要同时安装:它们会在同一个位置各挂一个挂件。换语言时先卸载旧的再装新的。

# 中文版
dsh plugin --profile web add ./dsh-tidewatch-1.28.8.tgz
# 英文版
dsh plugin --profile web add ./dsh-tidewatch-en-1.28.8.tgz

本地链接安装(改源码即时生效)

dsh plugin --profile web add link:/path/to/dsh-tidewatch

安装后重启 DSH(桌面端需完整退出再打开,热重载刷新不到客户端 bundle)。界面会按形态偏好出现:立绘挂在右下角,胶囊落在输入框下方的统计行。

升级与卸载

dsh plugin --profile web update dsh-tidewatch    # 或重新执行 add
dsh plugin --profile web list dsh-tidewatch      # 查看已安装版本
dsh plugin --profile web remove dsh-tidewatch    # 卸载

npm 渠道已暂停:npm 上只有一个 2026-08-22 发布的旧版本,价格与规则均已过时,请勿安装,也不要据它判断当前计价。

本仓库只保留当前版本的 tgz,历史版本在 GitHub Releases 里可以取到。

使用

  • 点立绘 → 面板开着时先收起面板,否则弹出气泡(再点不会收起,只会重置计时);点气泡 → 翻到下一页;约 5 秒后自己淡出,点插件外任意位置也会收起
  • 气泡里的「详情 ›」 → 完整面板
  • 点气泡里的「详情 ›」 → 展开完整面板:账户余额、本次会话 Token 与费用、当前档位价格、峰谷时段表(北京时间)、形态与币种切换、气泡编辑器、音效开关
  • 拖动挂件 → 移到任意位置;松手靠近左右边缘会自动吸附,位置记在 localStorage
  • 点「本次会话费用」行 → 展开分模型花费明细(各模型 token 与花费,合计等于各项之和)
  • 收起面板 → 点面板右上角 ✕、点挂件本身、或点面板外部

币种选择即时生效并记住;人民币 2 位小数,美元 4 位小数。

计费口径

峰谷时段(官方依据)

DeepSeek 官方自 2026-08-17 起实施峰谷分时定价:

时段(UTC)北京时间档位
01:00 – 04:0009:00 – 12:00峰
04:00 – 06:0012:00 – 14:00谷
06:00 – 10:0014:00 – 18:00峰
10:00 – 次日 01:0018:00 – 次日 09:00谷

谷期价格为峰期的一半。本插件按 UTC 窗口判定当前档位(官方英文页即按 UTC 小时书写),周几与法定节假日按北京自然日判定(官方中文页把周期锚在「北京时间周一至周五」上)。两种读法在当前窗口取值下等价:窗口均落在同一北京自然日内,且不成对跨越 UTC 日界。时段表展示一律按北京时间。

三段价格时代

价格按调用发生时刻选档,历史会话回看不会被当前价目重算。档位顺序为 缓存命中 / 输入未命中 / 输出(美元 / 1M tokens):

时代时间范围(UTC)deepseek-flash 档位
基础价2026-08-16 16:00 之前0.0028 / 0.14 / 0.28
首版峰谷价2026-08-16 16:00 ~ 2026-09-10 04:00峰 0.014 / 0.44 / 1.32,谷为峰的一半
V4.1 Flash 新价2026-09-10 04:00 起峰 0.006 / 0.3 / 1.2,谷为峰的一半

成本 = 输入未命中 × cacheMiss + 输出 × output + (缓存读 + 缓存写) × cacheHit;「输出」已含推理 token。账本以美元存储。

人民币数字另存一份官方中文定价页的原样数字用于展示,不做汇率换算:官网两个模型的隐含汇率并不相同(flash 约 6.67、pro 约 6.82),统一换算会让 pro 的元数字比官网低约 2%。会话总额同样按每个模型各自的官方汇率折算(有分模型账时逐模型换算,没有时退回统一汇率),所以 flash 与 pro 混用的会话也不会被拉偏。

周末与法定节假日

  • 周六 / 周日全天按谷期计价(官方公告:「周六、周日全天不再区分峰谷时段,统一按低谷时段价格收取调用费用」)
  • 中国法定节假日全天按谷期计价,无峰谷切换,也没有生效时间(官方定价页脚注:「高峰时段为北京时间周一至周五(不含中国法定节假日)……包括周末及中国法定节假日全天均为空闲时段」)
  • 调休上班的周末同样全天谷期(官方说明:「调休上班的周末、中国法定节假日全天均按空闲时段计费」)
  • 下一阶段的切换点 = 下一个工作日首次进入峰时

节假日表依据《国务院办公厅关于 2026 年部分节假日安排的通知》(国办发明电〔2025〕7 号,共 33 天):元旦 1/1–1/3、春节 2/15–2/23、清明 4/4–4/6、劳动节 5/1–5/5、端午 6/19–6/21、中秋 9/25–9/27、国庆 10/1–10/7。

兼容性

项目说明
DSH0.1.7-rc.2 及以上;已适配 0.2.0
模型峰谷档位与金额只对 DeepSeek 自家模型成立。换用其他提供商时金额显示「不适用」
官方 UI 原语优先使用 shell 模块表中的 @deepseek-ai/dsh-client-ui-primitives;模块表没有该包时自动降级到内置实现
主题跟随 GUI 亮暗主题
数据边界余额查询由 DSH 宿主执行;本插件不接触 API Key、不直接发 HTTP 请求、不落盘

模型名映射:现役 deepseek-flash(V4.1 Flash),别名 deepseek-v4-flash、deepseek-v4-flash-vision-exp、deepseek-v4.1-flash 均按现役 Flash 价计费。

工作原理

assistant/message 与 assistant/attempt 事件里的 usage 块
        │  lib/index.js:costUsage 会话投影(zod schema 校验)
        ▼
  token 桶 + 美元成本(按事件发生时刻的峰谷档位)
        │  同一投影视图里还带两样东西:
        │    · official:宿主采样的官方 tokenUsage 投影(账号通道兜底)
        │    · diag:用量诊断计数
        │  useProjection('costUsage')(浏览器端)
        ▼
  lib/client.js:挂件渲染(立绘 + 气泡 + 秒级倒计时)

挂件注册在 DSH 的根级浮层插槽 shell.overlay;数据由注册在 conversation.composer.dock 的探针经模块级 bridge 提供(根级插槽没有投影席位)。

文件结构

dsh-tidewatch
├── lib/
│   ├── pricing.js        # 纯函数:峰谷窗口、三段价格时代、节假日表、costOf
│   ├── index.js          # 宿主:costUsage 会话投影
│   ├── client.js         # 前端:挂件与面板(__ModuleLoader__ bundle)
│   └── assets/mascot/    # 挂件立绘原图(压缩后内嵌进 bundle)
├── cordis.patch.yml      # 装配行
├── docs/PORTING.md       # 移植到其他宿主的适配说明
├── scripts/              # 构建脚本(build.sh;英文版生成 build-en.mjs)
└── test/
    ├── verify.mjs        # 全套自检入口
    ├── client-fixture.mjs# 前端夹具:真实加载 lib/client.js 的假 React 环境
    ├── ui-smoke.mjs      # 布局冒烟:真实样式表 + 无头浏览器
    └── adapt-repro.mjs   # 宿主计费口径回归

开发与验证

# 构建(语法检查 + zod 依赖 junction)
DSH_CHECKOUT=<harness 源码根目录> bash scripts/build.sh

# 全套自检(128 项):峰谷数学、双份常量一致性、计费口径回归、用量双路读取、挂件钳位、随机并列、归属判据回归、峰谷立绘不重复、官方采样不跨会话、两种形态切换、空会话清桥
node test/verify.mjs

# 布局冒烟测试:用真实样式表在无头 Chrome 里渲染挂件/泡泡/面板并断言布局
# (无 Chrome 时自动跳过;这段覆盖纯逻辑测不到的层叠与定位问题)
node test/ui-smoke.mjs

DSH_CHECKOUT 在 Git Bash 下需用 Windows 形式路径(如 D:/DeepSeek-Harness/DSHAR工作目录/deepseek-harness-src):传 /d/... 会被 Node 解析成 D:\d\...,生成悬空 junction;插件为 link 安装时,坏链接会让下次启动装配失败。脚本在替换链接之前校验解析结果,坏路径当场报错。

已知限制

  • 价格表内置,官方调价后需手动同步 lib/pricing.js(计费)与 lib/client.js 的 DISPLAY_PRICES(展示)两处常量,并为旧价补一段历史档
  • 节假日表内置 2026 年,2027 年安排公布后需手动同步 CN_PUBLIC_HOLIDAYS(同样两处);过期后周一到周五一律按工作日计,法定节假日会被按峰期收费,面板会提示表已过期
  • V4 Pro 换价分界目前是哨兵值:官方声明计费方式保持不变,如有变动需把日期填回 V4_PRO_RETIRE_BOUNDARY
  • 失败或被重试的调用不计费,与官方 token-meter 口径一致;这是口径上限
  • 账号内置通道的两种口径:本机实测该通道(provider deepseek-account)的结算事件自带 usage,按 token 精确计价;若某次确实拿不到 usage,才退回「账户余额下降了多少」估算,金额后标注「(估算)」。余额属于账户级,多会话或多设备同时使用会一起下降,估算因此偏大;只累加下降、充值不抵消消耗
  • 官方投影采样的两处取舍:宿主侧用 sessionProjections.snapshot(session, ['tokenUsage']) 读取 DSH 官方的 tokenUsage 投影(对话页底部「351M tok · 缓存命中 97%」那行的来源),随视图下发供前端计价。官方投影只给累计总数,故这条路径按当前价目折算,无法精确到每次调用的历史档位;采样也只保留最近一次,多会话并发时以前台活跃的那个为准。这份采样只在「本会话收到过结算事件」时才随视图下发,空会话不会继承上一场的数字
  • 用量缺失时如实标注:拿不到任何用量又估算不出时,界面显示「未提供」而不是 ¥0.00,避免把「没有数据」呈现成「免费」。用量的读取口径与 DSH 官方 token-meter 一致:同时读 assistant/message 与 assistant/attempt,按 (turn, step) 替换,重试清槽;若结算事件里字段名对不上(totalTokens 有值而各分桶全空),同样按「未提供」处理,不会静默记成零
  • 不提供余额预警:早期版本有一个「余额低于阈值响一声」的功能,阈值写死且不可配置,属于半成品;DeepSeek 控制台本身可能已有余额提醒,故移除,不做重复建设

致谢

这个插件站在其他人的肩上:

  • dsh-cost-meter(MIT)—— 峰谷数学(isPeakHour / peakPhaseAt / tierFor / costOf)与会话投影结构的出发点,本仓库按其精简目标重写。
  • DeepSeek-Balance-Whale-Widget(MIT)—— 挂件的产品形态参考:右下角常驻、点击弹泡泡、提示音、余额预警这几项交互,是照着它做的。它的代码与本插件互相独立,未直接引入。
  • 「大肥鱼」形象 —— DeepSeek 蓝鲸吉祥物的社区拟人化二创,最早自百度 deepseek 吧的社区共创扩散开来;原始 OC「溟月」由社区创作者「上善无形」确立,本项目所用立绘来自小红书作者,原图存于 lib/assets/mascot/。形象版权归各自创作者所有,收到权利人要求将立即替换或移除。
  • DeepSeek Harness —— 插件运行其上的宿主;状态点、标签、悬浮提示、外点关闭等控件复用其官方 UI 原语。

版本说明

历次变更见 CHANGELOG.md,当前版本 1.28.8。

许可

MIT © 2026 KhalilYamber