实时显示峰谷档位与今日已用金额
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ZiqiaoFang/dsh-liangwen-tide该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 13 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意要求 Node:>=20(dsh 本身要求 Node ≥ 22.19)未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
>=20(dsh 本身要求 Node ≥ 22.19)以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-liangwen-tide(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/7 19:26:44
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 6 处,展示前 6 条)
- 发起网络请求lib/index.js:364
const response = await fetch(url, { - 发起网络请求lib/index.js:538
const response = await fetch(url, { - 读取本地文件lib/index.js:753
bytes = readFileSync(fileURLToPath(new URL(`./assets/${file}`, import.meta.url))) - 发起网络请求lib/client.js:753
const response = await fetch(`${POLICY_ROUTE}?refresh=1`, { - 发起网络请求lib/client.js:793
const response = await fetch(USAGE_ROUTE, { - 发起网络请求lib/client.js:837
const response = await fetch(ACCOUNT_ROUTE, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 显示峰谷档位
- 显示今日已用金额
- 峰谷时段跟随官方定价
DeepSeek Harness 的峰谷指示器 + 当日已用金额:峰时「梁文峰」、谷时「梁文谷」,峰谷时段与价目表自动跟随官方定价页。一个 DSH Web GUI 插件,显示峰谷潮汐和当日花费。
README
由 DeepSeek 最新模型翻译生成dsh-liangwen-tide
DeepSeek Harness 的峰谷指示器 + 当日用量:峰时显示「梁文峰」,谷时显示「梁文谷」,胶囊上还带一行今日已用金额。峰谷规则与价目表自动跟随官方定价页更新,不写死在代码里。
DeepSeek API 按峰谷分时计价,这个插件把当前档位做成一颗常驻小胶囊:
- 峰时 → 橙红点 + 梁文峰(距谷 h:mm:ss)
- 谷时 → 青绿点 + 梁文谷(距峰 h:mm:ss)
- 后面跟 今日 ¥x(当日已用,北京时间自然日,全部会话合计)
- 再跟 余额 ¥y(直接查 DeepSeek 官方 GET /user/balance,不是估算)
- 鼠标悬停出自绘信息卡:北京时间、是否周末全天谷时、当前时段表、距下次换挡倒计时、策略来源与同步时间,以及当日用量的完整明细(峰/谷分档、命中/未命中/输出 token、分模型金额、美元对照、昨日对照、价格来源),最后是 API 平台 段落:余额(赠金/充值拆分)、官方今日/本月花费与 token、以及没取到时缺了什么凭证
挂载在两个官方 list 插槽上(样式全部用 --dsw- 主题变量,跟随亮/暗主题):
| 插槽 | 位置 | 表现 |
| conversation.session.header.utilities | 会话标题右侧 | 完整胶囊 |
展开完整文档(README 剩余 1 节)
dsh-liangwen-tide
DeepSeek Harness 的峰谷指示器 + 当日用量:峰时显示「梁文峰」,谷时显示「梁文谷」,胶囊上还带一行今日已用金额。峰谷规则与价目表自动跟随官方定价页更新,不写死在代码里。
DeepSeek API 按峰谷分时计价,这个插件把当前档位做成一颗常驻小胶囊:
- 峰时 → 橙红点 + 梁文峰(距谷 h:mm:ss)
- 谷时 → 青绿点 + 梁文谷(距峰 h:mm:ss)
- 后面跟 今日 ¥x(当日已用,北京时间自然日,全部会话合计)
- 再跟 余额 ¥y(直接查 DeepSeek 官方 GET /user/balance,不是估算)
- 鼠标悬停出自绘信息卡:北京时间、是否周末全天谷时、当前时段表、距下次换挡倒计时、策略来源与同步时间,以及当日用量的完整明细(峰/谷分档、命中/未命中/输出 token、分模型金额、美元对照、昨日对照、价格来源),最后是 API 平台 段落:余额(赠金/充值拆分)、官方今日/本月花费与 token、以及没取到时缺了什么凭证
挂载在两个官方 list 插槽上(样式全部用 --dsw- 主题变量,跟随亮/暗主题):
| 插槽 | 位置 | 表现 |
| conversation.session.header.utilities | 会话标题右侧 | 完整胶囊 |
| sidebar.footer.action | 侧栏底部(设置旁) | 宽侧栏=名称+今日+余额(省掉倒计时,悬停里仍有);56px 轨道=只有一个状态点 |
两个位置共用一个秒级时钟,所以无论有没有打开会话,都能看到现在是哪一「峰/谷」。
当日已用金额
「今日 ¥x」优先用 DeepSeek 平台官方用量(配了 DEEPSEEK_PLATFORM_TOKEN 时),否则退回宿主半的本地账本估算。本地账本的口径写清楚如下:
| 问题 | 口径 |
| 算哪些调用 | 会话事件流里已结算的 assistant/message 与 assistant/attempt(含失败/被重试的那次);正在跑的那次在结算前不计 |
| token 从哪来 | 事件自带的 provider usage;assistant/message 优先用自己的 data.usage,缺失时取流里最后一个 usage chunk(与宿主 tokenUsage 投影同口径) |
| 命中/未命中怎么分 | 宿主是互斥计数:inputTokens 已经是「未命中」(适配器把 DeepSeek 的 prompt_tokens 减掉了命中部分),cacheReadTokens 是「命中」,两者不再互相剪 |
| 同一 step 重复报告 | 取最新一份替换而不是累加;llm/retry-started 之后重试的那次另算一笔(真实计费) |
| 按哪一档计价 | 按调用发生时刻的峰/谷档位逐次计价,跨峰谷切换不会漂移;周末全天按谷时 |
| 用哪套价格 | 官方定价页的中文页(人民币)为主口径,英文页(美元)作对照;都在同一次抓取里解析 |
| 哪一天 | 北京时间(UTC+8)自然日,按事件时间归档;重启后按事件时间重新归账 |
| 历史怎么补 | 启动时经 ctx.sessionQuery 列会话 + 读日志补一次(活着的会话直接读内存日志,零 IO);不按会话创建时间过滤(长驻会话几天前创建、今天还在用,按创建时间过滤会让今日花费凭空少一大截),改由「事件时间视界」(最近 7 天)决定算不算 |
| 模型怎么认 | 事件流里的 request/context;插件是会话中途才加载时,这类事件在启动前就写进日志了,此时用会话自己的路由快照 session.requestContext().model 兜底 —— 否则这些调用会被记成「未匹配价格」(就是「计价模型获取失败」的表现) |
| 会话日志 | 会话日志是 zstd 多帧容器,不自己解析,一律走宿主的 sessionQuery.readSession |
隐私:只读 token 计数与模型名,全部留在进程内存里——不落盘、不外发,也不写任何自定义存储。
与宿主自身口径的一致性:本插件的折叠逻辑对齐 @deepseek-ai/dsh-token-meter 的 tokenUsage 投影;实测拿真实会话日志跑,命中/未命中/输出三项与该投影缓存的差异 < 0.3% (差异来自两次快照之间仍在追加的调用)。
悬停里还会写清当前金额是按哪套价格算的、以及有没有「没匹配到价格的模型」(这类调用只记 token、不计金额,并如实标注)。
API 平台余额与官方用量
胶囊上的 余额 ¥y,以及可选的官方今日/本月用量,都是宿主半直接问 DeepSeek 平台,不走本地估算:
| 数据 | 接口 | 凭证 | 说明 |
| 余额 | GET https://api.deepseek.com/user/balance | DEEPSEEK_API_KEY | 官方文档接口,稳定;返回 balance_infos[](总额/赠金/充值),人民币优先 |
| 官方用量 | GET https://platform.deepseek.com/api/v0/usage/amount?month=&year= 与 .../usage/cost?... | DEEPSEEK_PLATFORM_TOKEN(网页登录的 userToken) | 控制台自己用的私有接口,官方不承诺稳定;返回逐日/逐模型的 tokens 与金额 |
显示优先级:
1. 余额:/user/balance 成功就显示;没配 Key / 失败 → 胶囊不显示,悬停写明原因。
2. 今日金额:官方用量成功 → 胶囊和悬停都用平台官方口径;否则用本地账本。
3. 峰谷拆分与 token 明细始终来自本地账本(官方接口不按峰谷给),两套口径可能略有差异,悬停会标注。
配置 userToken(想用官方用量才需要)
API Key 只能查余额,查不到控制台里的用量。官方用量需要浏览器登录后的 userToken:
1. 浏览器登录 <https://platform.deepseek.com>;
2. 打开开发者工具 → Application/应用 → Local Storage → https://platform.deepseek.com;
3. 找到 userToken,复制它的值(一长串);
4. 写进 ~/.dsh/.env:
DEEPSEEK_PLATFORM_TOKEN=粘贴到这里
也可以写进 ~/.dsh/.credentials.yaml 的 refs: 下(键名同上)。不要把 token 写进仓库、 README、聊天记录或截图。
5. 刷新页面;页面还没变就重启一次 dsh web。
凭证的解析顺序:config 直给(apiKey / platformToken,不推荐,会落盘)→ ctx.credentials(含 ~/.dsh/.credentials.yaml、环境变量、.env)→ process.env。
API Key 默认用宿主机模型那把 DEEPSEEK_API_KEY,所以「设置 → 模型」里填过就不用再配。
平台用量接口是私有接口,字段可能改;改版时 /account 会返回 error,胶囊自动退回本地账本,峰谷指示不受影响。userToken 过期时悬停会写「平台登录凭证已失效」,重新登录再换一个即可。
不想让插件访问平台:在 config 里设 trackAccount: false,/account 连凭证都不读。
自动更新峰谷策略与价目表
官方把规则写在定价页正文里(2026-09 的两语版本):
EN: Peak hours are 01:00 - 04:00 and 06:00 - 10:00 UTC, Monday through Friday (all other hours are off-peak).
ZH: 高峰时段为北京时间周一至周五 9:00 - 12:00、14:00 - 18:00(其余为空闲时段)。
插件按这条链路自动跟上:
宿主半(lib/index.js) ├─ 启动即抓 + 之后每 6 小时抓官方定价页中英文两版 ├─ lib/policy.js 解析:按优先级试多种句式 → 识别时区/周末规则 → 归一化到 UTC 分钟 ├─ 同一份页面里再解析价目表:人民币(中文页)主口径 + 美元(英文页)对照 ├─ 交叉校验:两页一致=高置信;只有一页=中置信;两页打架=取英文页并标 conflict ├─ 任何一步失败(离线/超时/改版/解析不出)→ 保留上一次结果或内置兜底,只记错误 ├─ 会话事件订阅 + 启动补历史 → 当日账本(lib/usage.js) ├─ 余额 /user/balance + 平台用量 amount+cost → 带 TTL 的探测缓存(lib/platform.js) └─ 三条只读路由(都过 composition 的信任围栏): GET /liangwen-tide/policy 峰谷策略 + 价目表来源 GET /liangwen-tide/usage 本地账本:当日用量与金额 GET /liangwen-tide/account API 平台余额 + 官方用量浏览器半(lib/client.js) ├─ 页面加载即取策略,之后每 30 分钟一次(宿主侧另有 10 分钟节流,不会反复打官方页) ├─ 页面加载即取用量,之后每 20 秒一次(宿主侧只读内存账本,不打网络) ├─ 页面加载即取余额/官方用量,之后每 20 秒一次(宿主侧余额缓存 60s、用量缓存 5min) ├─ 官方策略落到 localStorage:宿主机离线/重启也不会退回旧口径 └─ 全程取不到 → 峰谷用内置兜底(与 lib/policy.js 的 BUILTIN_POLICY 一致),金额不显示
安全性上刻意保守:解析只认「HH:MM - HH:MM」区间 + 明确的时区/周末措辞;归一化后要求 1–6 个窗口、互不重叠、总覆盖 ≤ 16 小时;任何一项不满足就不采纳 (宁可继续用旧策略,也不吃进半懂不懂的规则)。悬停提示里能看到当前用的是哪一层、多久前同步的、以及为什么没同步上。
关掉 / 调整
在 profile 自己的 cordis.patch.yml 里按行 id 覆写(profile 层在 bundle 层之后应用):
- id: liangwen-tide
config:
autoUpdate: false # 关掉抓取,恒用内置策略/价格 trackUsage: false # 关掉当日账本与 /usage 路由(不读会话日志) trackAccount: false # 关掉余额/官方用量探测与 /account 路由(不读凭证、不联网) refreshHours: 12 # 抓取间隔(默认 6,最小 0.25) timeoutMs: 15000 # 单次抓取超时毫秒(默认 10000) balanceRefreshSeconds: 60 # 余额缓存秒数(默认 60,15–3600) platformRefreshMinutes: 5 # 官方用量缓存分钟数(默认 5,1–1440) apiKeyRef: DEEPSEEK_API_KEY # API Key 的凭证名 platformTokenRef: DEEPSEEK_PLATFORM_TOKEN # 平台 userToken 的凭证名 urls: # 自定义文档地址 en: https://api-docs.deepseek.com/quick_start/pricing zh: https://api-docs.deepseek.com/zh-cn/quick_start/pricing
安装
推荐:patch 方式(profile 是 patchReload: live)
node tools/install.mjs
或者 bundle 方式(等价于官方 dsh plugin add,写进 profile 依赖+装配层;需重启 dsh)
node tools/install.mjs --bundle
看现状 / 卸载
node tools/install.mjs --status
node tools/install.mjs --uninstall
脚本做两件事(等价于 dsh plugin --profile web add link:<本包目录>,只是不依赖 pnpm):
1. 在 ~/.dsh/profiles/web/node_modules/ 放一个软链,指向本包(Loader 靠它解析 dsh-liangwen-tide);
2. 把装配行写进 ~/.dsh/profiles/web/cordis.patch.yml(默认),或写进 profile 的 dependencies + dsh.profile.bundles(--bundle)。
写文件前会留一份 .bak-dsh-liangwen-tide;两种方式互斥,脚本切换时自动撤销另一种。
注意:装配层(patch)的增删是热生效的,但插件代码本身不是——宿主半(抓取 + 路由)在 dsh web 进程启动时装载,改完宿主半要重启一次 dsh web;只改浏览器半刷新页面即可。重启前浏览器半会走「内置兜底 / 本机缓存」,不会报错。
若机器上装了 pnpm,也可以直接用官方命令(从 GitHub 装):
dsh plugin --profile web add github:ZiqiaoFang/dsh-liangwen-tide
本地目录:
dsh plugin --profile web add link:./dsh-liangwen-tide # 相对路径按「你执行命令的目录」解析
换挡弹窗(人像 + 光芒)
档位真的翻转的那一刻,从胶囊弹出一张抠像人像(进入谷时 → 图一 / 进入峰时 → 图二),背后是旋转光芒,下面一条紧凑说明条带实时倒计时;停留 6 秒后自动收起。
| 项目 | 做法 |
| 触发 | 只在真实换挡且刚过点 60 秒内弹;页面刚打开不弹;标签页被挂起后恢复不补弹(避免突然蹦出几小时前的图) |
| 位置 | 挂载在根级悬浮层 shell.overlay(会话标题栏有 overflow 裁切,弹窗必须挂在它祖先之外),再用 getBoundingClientRect() 贴住胶囊 |
| 方向 | 胶囊在标题栏右端(上方是窗口顶边、右方是窗口右缘)→ 默认向下弹;下方空间不够自动翻到上方;水平与胶囊右对齐并夹进视口留白。这段是纯函数 placePopup(),有单测 |
| 人像 | 抠像后的 webp(带 alpha、边缘羽化),由宿主半 GET /liangwen-tide/asset/<valley\|peak> 下发(白名单 + 只读 + 进程内缓存,不把 base64 塞进 bundle) |
| 光芒 | 三层纯 CSS:柔光球(呼吸)+ 双层反向旋转光芒 + 入场闪光环;颜色跟档位走(谷=青绿、峰=琥珀)。强度由 --lwt-glow 控制 |
| 交互 | 悬停暂停倒计时;点人像或 ✕ 立即关;人像周围透明区不挡点击;prefers-reduced-motion 时不播动画 |
| 胶囊信息卡 | 悬停胶囊时在 body 上绘制一张 position: fixed 信息卡(不依赖原生 title,也不受侧栏/悬浮层层叠影响);底色用 --dsw-alias-bg-layer-2(与主题面板一致),文字用 --dsw-alias-label-primary,aria-description 保留完整文案给读屏器 |
| 图片尺寸 | 人像高 170px("小"),光芒"中" —— 按你确认的方案 |
| 当场演示 | 不用等真换挡:Ctrl+Shift+Alt+T(macOS 为 ⌘+Shift+Option+T)连按即可在峰↔谷之间交替弹出(第 1 下弹"当前档位的相反档",之后每按一下翻一面);控制台 __liangwenTide.preview('peak'\|'valley')、.hide()、.state()(state 带锚点/定位诊断)。胶囊的悬停提示里也写了这个快捷键。刻意避开了 ⌘/Ctrl+Shift+T——那是浏览器「重新打开刚关闭的标签页」的默认绑定,浏览器先吃到事件、页面拦不住,按一下会既弹窗又重开标签页 |
| 关掉 | config.celebrate: false(宿主半连资源路由都不注册) |
图一/图二是你提供的两张图抠出来的(抠像工具与管线在 demo 目录)。
demo 里还留了插画/线稿/漫画三种风格化方案可选,但按你的决定默认用原图;若日后要彻底规避版权,把 lib/assets/ 换成原创形象即可,代码不用动。
改了代码什么时候生效
- 只改浏览器半(lib/client.js):dsh-client-hmr 会热重建 bundle,刷新页面即可,不用重启(实测:实例启动后再改代码,运行中的服务端就已经下发新 bundle)。
- 改了宿主半(lib/index.js 等):宿主半在 dsh web 启动时装载,得重启一次。
给别人用
运行时零依赖:宿主半只用 Node 内建能力,浏览器半只用平台内置的 react 种子模块,所以「要给别人什么」就是一个包——npm pack 出来 35KB、10 个文件:
dsh-liangwen-tide-1.4.0.tgz
└── package/
├── package.json # dsh.bundle.patch + dsh.client + dshhub 元数据 ├── cordis.patch.yml # 装配行 ├── lib/ # 宿主半、浏览器半、时段解析、价目表、账本 ├── tools/install.mjs # 没有 pnpm 时的安装兜底 ├── README.md └── LICENSE
里面不含:你的会话数据、你的机器路径、任何凭据,也不含测试与开发依赖(package.json 的 files 已过滤,npm pack 时再确认一次 tar tzf 即可)。
四条通道
1. npm 包:你 npm publish(包名 dsh-liangwen-tide)→ 对方 dsh plugin --profile web add dsh-liangwen-tide。需要你有 npm 账号,对方有 pnpm + 网络。
2. Git 仓库:本包已开源在 <https://github.com/ZiqiaoFang/dsh-liangwen-tide> → 对方 dsh plugin --profile web add github:ZiqiaoFang/dsh-liangwen-tide。
本包没有 prepare 构建脚本,所以不需要 pnpm 的 allowBuilds。
3. 压缩包:npm pack 得到 tgz,直接发给对方(微信/邮件都行)→ 对方 dsh plugin --profile web add ./dsh-liangwen-tide-1.4.0.tgz。
4. 直接拷目录(最省事,对方不需要 pnpm):把整个目录给对方 → 对方在该目录里跑 node tools/install.mjs。
通道 1–3 都走官方 dsh plugin add(内部是 pnpm + 自动把本包登记进 dsh.profile.bundles);通道 4 用本包自带的脚本做同样两件事(node_modules 软链 + 装配行),已在没有 pnpm 的机器上验证过。
对方需要什么
- DeepSeek Harness,web profile:这是 Web UI 插件,依赖 dsh.client 双半机制与 conversation.session.header.utilities / sidebar.footer.action 两个官方插槽。
- Node ≥ 20;若走 dsh plugin add 则还需要 pnpm。
- 想看「今日金额」:composition 里要有 session-query(官方 web profile 自带)。没有也能用——自动降级为「只统计本次运行内发生的调用」,峰谷指示完全不受影响。
- 联网(可选):用来抓官方定价页同步峰谷与价格;离线时用内置兜底,照样能用。
兼容与降级
实测环境:@deepseek-ai/dsh 0.1.5-rc.2 的 web profile。package.json 里 dshhub.compatibility 声明 dsh >=0.1.5-rc.1、node >=20。缺失能力一律降级、不报错:
| 缺什么 | 会怎样 |
| connection 服务 | 三条路由都不上浏览器信任围栏(只读;余额/用量不含凭证) |
| sessionQuery 服务 | 用量只算实时,提示气泡里写明「会话索引不可用」 |
| 官方页面抓不到 / 改版 | 时段与价格退回上一次成功的或内置兜底,路由仍 200 |
| 插槽不存在 | slots.inject 等不到就不挂载,不抛错 |
想改个名字再发
包名出现在三处,必须同步改:package.json 的 name、lib/client.js 里
window.__ModuleLoader__.load({ id })、cordis.patch.yml 里的 name(浏览器半 bundle 的 id
必须等于包名,模块图按包名索引)。路由前缀 lib/index.js 的 POLICY_ROUTE/USAGE_ROUTE 与 lib/client.js 的两个同名字符串也要一起改。
文件结构
dsh-liangwen-tide
├── package.json # dsh.bundle.patch(装配层)+ dsh.client.platform(浏览器半) ├── cordis.patch.yml # 装配行 + 可用 config 说明 ├── lib/ │ ├── index.js # 宿主半:抓官方文档、解析时段+价格、订阅会话事件、余额/官方用量探测、挂三条只读路由 │ ├── policy.js # 峰谷解析层:句式表 / 时区 / 周末规则 / 校验 / 交叉校验 / 定档 │ ├── pricing.js # 价目表解析层:中英文表格 → 单价;token 约定与计费 │ ├── platform.js # API 平台层:余额 /user/balance + 控制台用量 amount/cost 的纯解析 │ ├── usage.js # 当日账本:事件折叠(水位线/替换/重试)、补历史、出报表 │ └── client.js # 浏览器半:__ModuleLoader__ bundle(时钟 + 两个插槽 + 策略/用量/余额同步) ├── tools/install.mjs # 安装/卸载/status └── test/ ├── fixtures.mjs # 从官方页真实抓下来的规则句与价目表片段(各测试共用) ├── policy.test.mjs # 峰谷解析自检(句式变体 + 非法输入) ├── pricing.test.mjs # 价目表与计费自检(真实表格 + 互斥 token 约定 + 坏数据) ├── platform.test.mjs # 平台余额/官方用量解析自检(信封/40003/今日本月/坏数据) ├── usage.test.mjs # 账本自检(定档/日归档/替换/重试/补历史/上限/失败) ├── tide.test.mjs # 浏览器半自检(判定/文案/注册/策略与用量采纳与拒绝/缓存) ├── pill.test.mjs # 胶囊显示自检(锁定时钟:逐档/逐边界/一天逐分钟核对) ├── host.test.mjs # 宿主半自检(本地 stub 站:策略/用量/余额/官方用量/缓存/降级) └── live-check.mjs # 联网自检:真去抓官方页跑一遍完整解析链路
浏览器半只依赖平台内置种子模块 react,无第三方依赖;宿主半只用 Node 内建能力。
自检
npm test # 离线全套(policy + pricing + platform + usage + client + pill + host)
npm run test:live # 联网跑一次官方页面,顺便校验内置兜底(时段与价格)是否过期
已知限制
- 策略解析依赖官方页面「某句话的措辞」。官方大改写句式时,test:live 会先失败,这时按提示补 lib/policy.js 的句式表即可(内置兜底期间 UI 照常可用)。
- 宿主侧缓存只在内存:重启 dsh web 后要重新抓一次(首次请求可能先看到内置策略,一两秒后变成官方策略);浏览器侧另有 localStorage 缓存顶着这段时间。
- 「设置 → 插件」页只列 profile 依赖,默认的 patch 方式不会出现在那里;想让它出现就用 --bundle 并重启 dsh。
- 本地账本算出的当日金额是按官方价目表推算的账,不是 DeepSeek 账单;官方调价、未知模型、失败重试等边界下可能与实际扣费有差异(提示气泡里会标出「没匹配到价格」的调用)。配了 DEEPSEEK_PLATFORM_TOKEN 后,胶囊和悬停优先显示平台官方用量,本地金额只作峰谷拆分参照。
- 平台用量接口是 platform.deepseek.com 的私有接口,官方不承诺稳定;改字段时 /account 会报错,自动退回本地账本,不影响峰谷。userToken 会过期,需重新登录获取。
- 余额与官方用量都有缓存(默认 60 秒 / 5 分钟),不是逐笔实时;余额查的是 API Key 所属账户,不是网页登录账户(两者可能不是同一个)。
- 账本只在内存:重启 dsh 后靠补历史重建。补历史覆盖「活着的会话 + 近 36 小时内创建的会话」,更早创建、今天又被继续使用的会话可能漏算(提示气泡会写补历史的状态)。
- 档位显示依赖浏览器时钟(按 UTC 判定,与系统时区无关);时钟明显不准会让显示跟着不准。
仓库:<https://github.com/ZiqiaoFang/dsh-liangwen-tide> · MIT © 2026 ZF预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
ZiqiaoFang/dsh-liangwen-tide
实时显示峰谷档位与今日已用金额
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目