kelingfeng9/dshcj--packages-dsh-token-cost ↗★ 0
dsh-token-cost
Live DeepSeek token usage and CNY cost panel for the DSH Web chat header
同名包的其他仓库
安装
此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗
说明文档
阅读完整 README ↗DSH 插件:Token 用量费用 + 实时思考视图
两个面向 DeepSeek Harness Web 客户端(0.2.x,桌面版内置的 Web UI)的插件。它们都是纯客户端 UI 插件,宿主侧只有一个空的 apply(),用来让 Loader 拥有插件条目并把客户端 bundle 注入 window.__DSH_BOOT__。
公开索引: · 落地页:
| 插件 | 作用 | 入口 |
|---|---|---|
dsh-plugin-token-cost | 实时 Token 计量、按模块拆分、按 DeepSeek 官方 API 定价动态计算人民币费用 | 会话标题栏 ¥0.0401 |
dsh-plugin-live-think | 实时思考工作视图、逐步回放、英文思考自动翻译成中文 | 会话标题栏 思考 2 |
1. dsh-plugin-token-cost
标题栏的胶囊按钮显示当前会话的估算费用,生成中会带绿色脉冲点;点击打开右侧面板。
- 账户余额:标题栏同时显示
余额 ¥12.34;面板顶部显示账户余额(充值钱包 + 赠送钱包)、更新时间和刷新按钮。通过宿主ctx.remote.account.getBalance读取平台账户,页面加载、面板打开后每 30 秒、以及每轮结束时刷新。 - Token 计费桶:缓存未命中输入、缓存命中输入、缓存写入、输出,四项互不重叠。
- 实时生成:正在流式生成时,用已到达的文本估算输出 token 与新增费用,并明确标注“预计新增”;provider 的
usage到达后立即以真实值替换。 - 上下文构成:系统提示 / 工具定义 / 对话消息的启发式估算条形图,另有窗口占用。
- 按轮次统计:每轮的输入、输出与费用,当前轮以
≈标记估算值。 - 价格表:内置 Flash 与 Pro 的高峰/空闲价,可展开查看。
计价规则
价格来自 DeepSeek API 官方“模型 & 价格”页(人民币 / 百万 tokens,2026-11 抓取):
| 模型 | 输入·缓存命中 | 输入·缓存未命中 | 输出 |
|---|---|---|---|
| DeepSeek-V4.1-Flash-1017 | 0.02(空闲)/ 0.04(高峰) | 1 / 2 | 4 / 8 |
| DeepSeek-V4-Pro-0813 | 0.15 / 0.30 | 4.5 / 9.0 | 13.5 / 27.0 |
- 高峰时段:北京时间周一至周五
09:00–12:00、14:00–18:00;其余时间与周末为半价。 - 面板按请求事件时间自动判断高峰/空闲。点击价格胶囊可在
自动 → 高峰 → 空闲之间切换,用于中国法定节假日(插件不内置节假日表)。 - 缓存写入没有单独价格,按缓存未命中计价。
- 输出 token 已包含推理 token;若 provider 上报了
reasoningTokens,会在“输出”磁贴下单独显示。
数据来源
tokenUsage、contextBreakdown、contextPressure三个 session projection;- 账户余额来自宿主
accountRemote(ctx.remote.account.getBalance),浏览器只提交客户端版本、语言和时区偏移,不接触凭据; - Chat target 中每个
assistant-step的usage(按 turn/step、模型路由、事件时间); - 实时阶段用
assistant-step.blocks中已到达的文本按中英字符混合比例估算。
2. dsh-plugin-live-think
点击标题栏 思考 N 打开一个常驻右侧的思考工作视图,工作过程中可以一直开着。
- 实时流:按 turn/step 展示推理块,正在生成的步骤带脉冲和光标,自动跟随到底部;向上滚动会暂停跟随,滚回底部恢复。
- 英文自动翻译(默认开启):检测为英文的推理会按句子/段落切块(约 420 字符一块)调用 Google 翻译的公开 CORS 端点,中文逐块替换英文;Google 不可用时自动回退 MyMemory。未完成的尾部保持原文,翻译完成后整段变为中文。每张卡片可单独切回“看原文”,顶栏“中文 / 原文”可整体切换。
- 只在可见时翻译:长会话里只翻译进入视口附近的卡片,避免一次打开上百个步骤时发起数百个请求;滚动到旧步骤会自动补译。
- 内置思考行也翻译:聊天里
思考 …折叠行展开后,正文同样自动译成中文,并在顶部提供“看原文 / 机翻 / 重试”。折叠时的一行预览仍保留模型原始英文(聊天行没有暴露摘要插槽),展开后即为中文。 - 逐步回放:切到“回放”后从第一步开始逐字显示,可暂停/上一步/下一步/重播,
1× / 2× / 4×调速;回放使用中文译文(若已翻译)并保留原文入口。 - 原文始终保留:翻译只影响面板显示,不写入会话、不改变模型上下文。
翻译与隐私
- 翻译在浏览器里直接请求翻译端点,不需要 API Key,也没有经过 DSH 宿主的转发;按 Bing Edge → Google → MyMemory 的顺序回退,Bing 优先是因为它在国内网络通常可达,Google/MyMemory 作为备用。
- 这意味着被判为英文的推理文本会发送给 Bing / Google / MyMemory 中实际可用的那个服务;涉及私有代码或敏感信息时,把顶栏切到“原文”即可停止该视图继续发起翻译请求。原文和模型上下文不受影响。
- 结果按文本块缓存在页面内(最多 600 条),同一段不会重复请求;请求全局串行并限速约 190ms/次。
- 机器翻译可能改变 Markdown、公式和代码格式,已知限制会显示“机翻”标记。
从公开索引安装(推荐)
- 打开 DSH 侧边栏 Plugins;
- 右上角 More(Experimental plugins)→ 开启 Custom plugin markets;
- 进入 Discover,添加
https://kelingfeng9.github.io/dshcj/index.json; - 搜索
Token Cost/Live Think并安装。
索引使用固定 commit 的 Git 源,不需要 npm;安装后 bundle 会自动插入自己的 Loader 行。如果之前装过同名的本地开发版,先执行下面的卸载,避免两套按钮。
本地开发安装(可选)
本地开发版使用内部名 dsh-token-cost / dsh-live-think,市场版是 dsh-plugin-token-cost / dsh-plugin-live-think,两者不要同时安装。
克隆仓库后,安装脚本会把两个包软链接进 profile 的 node_modules,并在 cordis.patch.yml 末尾追加一段带标记的 insert 配置:
cd dshcj
node tools/install.mjs --profile desktop
脚本会:
- 备份
~/.dsh/profiles/ /cordis.patch.yml; - 创建
node_modules/dsh-token-cost、node_modules/dsh-live-think两个软链接; - 替换自己上次写入的
# >>> dsh-local-plugins块(幂等,可重复运行)。
安装后刷新页面即可。 DSH 会热重载 profile 的 cordis.patch.yml,客户端启动图会在下一次页面请求时重新生成;刷新后会话标题栏会出现 ¥… 和 思考 两个按钮。若你的版本没有监听 profile 补丁(刷新后仍不出现),再退出并重新打开 DeepSeek Harness。
卸载:
node tools/install.mjs --profile desktop --uninstall
发布到插件市场
DSH 没有官方商店;市场是自定义索引源。本仓库已经准备好发布结构:
node tools/build-publish.mjs # dist/packages/dsh-plugin-*(可发布的 bundle)
MARKET_COMMIT= node tools/build-market-index.mjs # market/index.json + docs/index.json
公开索引默认使用 Git 源(固定 commit + 子目录),不需要 npm 账号;也可以改成 npm 源。
发布名是 dsh-plugin-token-cost / dsh-plugin-live-think(dsh-token-cost 在 npm 已被占用)。
把 docs/ 托管到 GitHub Pages,在 Plugins → Discover 添加索引 URL 即可。
完整步骤、npm 可选路径、Git 源和上架检查见 PUBLISHING.md。
市场安装的 bundle 会自动插入自己的 Loader 行;如果之前用
tools/install.mjs装了本地版,先执行node tools/install.mjs --profile desktop --uninstall,避免旧名和新名两套按钮同时出现。
目录
dsh-plugins/
├── packages/ # 本地开发包(名字给本机 profile 用)
│ ├── dsh-token-cost/
│ └── dsh-live-think/
├── dist/packages/ # 构建出的市场 bundle(发布名)
│ ├── dsh-plugin-token-cost/
│ └── dsh-plugin-live-think/
├── market/ # format 1 索引 + 图标(托管的静态站点根)
├── tools/
│ ├── install.mjs # 本地幂等安装/卸载
│ ├── build-publish.mjs # 源码 → 可发布 bundle
│ ├── build-market-index.mjs # 生成 market/index.json
│ └── extract-runtime.js # 从 app.asar 抽取 0.2.1 运行时,用于隔离验证
├── docs/ # GitHub Pages 市场索引(index.json + icons)
├── PUBLISHING.md # 发布到 npm/Git + Discover 的完整步骤
└── LICENSE
本地验证
两个插件在独立的 0.2.1 Web profile 上做过端到端验证(真实账号、真实流式生成、真实 usage、真实翻译):
# 1. 从已安装的 app.asar 抽取同版本运行时(约 200MB)
node tools/extract-runtime.js ./.dsh-lab/runtime
# 2. 首次启动会创建 profile
cd ./.dsh-lab
DSH_HOME="$PWD/home" node runtime/dsh/node_modules/@deepseek-ai/dsh/lib/bin.js --profile web --port 6099
# 3. 把插件装进这个测试 profile(另一个终端)
cd dshcj
node tools/install.mjs --profile web --dsh-home ./.dsh-lab/home
已知限制
- 费用是估算:官方账单以 DeepSeek 控制台为准;失败请求、重试和 provider 未上报的 usage 只能按残差估算。
- 余额是平台账户钱包:使用 API Key 而非 DeepSeek 账号登录时,
accountRemote 不可用,面板会显示“API Key 模式,余额请在控制台查看”;余额刷新有最长约 30 秒的延迟,且可能落后于实际计费。 - 节假日:没有内置中国法定节假日表,节假日请手动把价格胶囊切到“空闲”。
- 推理 token:部分 provider 响应不带
reasoningTokens,此时“输出”磁贴显示“含推理与回答”。 - 翻译依赖公共端点:Bing / Google / MyMemory 都可能限流或不可达;失败时会保留已翻译部分并显示“翻译失败 / 重试”,重试只补未完成的片段。折叠状态下的英文摘要无法翻译,因为聊天行没有暴露摘要插槽。
- 回放只针对已进入窗口的步骤:极老的历史需要先在对话里向上加载。
- 两个插件都是纯客户端:不新增模型工具、不写会话、不改变 KV cache;翻译是独立的浏览器请求。
实现要点
- 客户端 bundle 采用 DSH 的懒 CJS 工厂格式(
window.__ModuleLoader__.load({id, factory})),无需构建步骤,直接由宿主的/plugins路由提供。 - 通过
ctx.slots.inject('conversation.session.header.actions', ...)把按钮注册进 Chat 的会话标题栏;useChat/useSession/useProjection是 slot 标准 kit 提供的响应式数据源。 - 两个插件都声明了
exports.inject = ['slots', 'locale'],因此会等待槽位与词典服务就绪;槽位由ui-conversation声明,数据由ui-chat提供,卸载任一上游插件都不会让本插件崩溃(按钮不渲染)。 - 样式使用
body[data-ds-dark-theme]切换亮/暗色,不依赖固定的深色背景。