bowenliang123/dsh-context
bowenliang123/dsh-contextDSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
输入框下方的余额胶囊:显示 DeepSeek 账户余额、实时峰谷时段,以及本会话花费——每条请求都按发出时刻生效的峰谷单价计价,子智能体会话的花费汇总进父会话;Search 与 Fetch 只对 DeepSeek 搜索引擎计费,Tavily、Bing、Exa 等第三方引擎只计数不计费;余额刷新间隔可在插件设置页调整。
中文 | English
一个 DeepSeek Harness 的 Web 界面插件,在输入框下方显示一枚紧凑的胶囊:
¥12.34 · 谷时 · 本次 ¥0.0123
它同时显示账户余额(充值 + 赠送)、当前是高峰还是空闲时段,以及当前会话已经花掉多少钱。

单会话真实计价:每一条模型请求都按「该请求发出那一刻」的峰谷单价计价,而不是把整段会话的 token 总量乘以某一个时段单价。因此会话跨过 12:00、18:00、周末或法定节假日,总计依然准确。
| 显示 | 数据来源 | 刷新方式 |
|---|---|---|
| 余额(充值 + 赠送) | account.getBalance → 平台 get_user_summary | 挂载时、每 N 秒(默认 60,可配置)、每轮结束、点击手动 |
| 峰谷时段 | 本地时钟(北京时间) | 每 30 秒,无网络请求 |
| 本次消耗 | sessionCost Host 投影(逐请求真实计价);无投影时回退到 tokenUsage 估算 | 每条请求结算后实时更新 |
命中 × 命中价 + (未命中 + 缓存写) × 未命中价 + 输出 × 输出价(元/百万 token),单价取该请求 step 开始时刻的时段:| deepseek-flash | 空闲时段 | 高峰时段 |
|---|---|---|
| 输入,缓存命中 | ¥0.02 | ¥0.04 |
| 输入,缓存未命中 | ¥1 | ¥2 |
| 输出 | ¥4 | ¥8 |
只有 DeepSeek 自己的搜索接口按次数计费(¥5 / 1,000 次)。dsh-free-search 这类插件会把搜索路由到 Tavily、Bing、Exa、DuckDuckGo 等第三方引擎,这些引擎免费或走各自的额度,不应计入 DeepSeek 账单。插件从工具结果头部的引擎名判断:
Search (deepseek-tools):、Search (deepseek-official): → DeepSeek 搜索,计入 Search;Search (tavily):、Search (bing):、Search (exa): 等第三方引擎 → 显示为“第三方引擎搜索”,金额始终为 0;web_search(DSH 核心工具)按 DeepSeek Search API 计;advanced_search 按 1 次请求计;multi_search 混合多个引擎、无法拆分,因此不计费(宁少勿多)。其余口径:
web_search 按去重后的 query 数计费(与工具自身的并发 fan-out 规则一致);web_fetch 在页面返回 2xx 时计 1 次;No results found.、非 2xx 的抓取都不计费;Host 半边把持久会话日志折叠成一个对客户端可见的投影 sessionCost:
step/start 记录该 step 开始的毫秒时间戳,这个时刻就是本次请求的计费时间;assistant/message 带 Provider 返回的最终 usage;assistant/attempt 带被取消/重建的流里最后一个 usage。同一 turn+step 的后续样本会替换前一个,llm/retry-started 结束替换窗口,让重试的那次单独计费;request/header 提供 model,用于选择 deepseek-flash 或 deepseek-v4-pro 价目表;未知模型按 flash 计;如果该投影不可用(旧版 Host,或 profile 未挂载 sessionProjections),前端退回旧算法:整段会话的 tokenUsage 按当前时段统一估价,并在悬停提示里标明“估算”。
周末是按星期计算的,任何年份都成立。法定节假日每年公布,插件不假装知道所有年份:
当前北京时间年份只拉取一次,按顺序尝试直到某个源返回非空且年份一致的安排:
raw.githubusercontent.com/NateScarlet/holiday-cn,权威数据源);Host 在启动与每日检查时尝试,浏览器在页面加载时尝试;已加载过的年份不再重复请求。
跨年后会自动拉取新的一年;公告发布前数据源为空,插件保持“未知”并重试,不会当成“全年无假日”。
返回内容年份不一致、或数据源没有可用日期时,自动落到下一个渠道。
所有渠道都失败(离线或被墙)时保留内置的 2026 列表;2027-01-01 是内置列表中唯一确定的跨年日期。
目前 2027 的官方安排尚未发布(数据为空),所以 2027 年的工作日暂按高峰计,周末仍为空闲。
数据集只包含日期与节日名称,不携带任何账号信息。
会话把任务分给子智能体时,子智能体的模型调用发生在子会话里,各自有独立日志和独立的 sessionCost 投影。父会话的胶囊会把直接子会话的费用加进来:
subagentCatalog 投影列出每个子会话;sessions.refreshProjections),把它们的 sessionCost 汇总;含 N 个子会话 ¥x;投影尚未返回的子会话会单独标注为“未加载”,而不是悄悄按 0 计。只汇总当前会话的直接子会话;更深层的子会话、或另一个工作区里的智能体不计入。
打开 插件 → dsh-per-request-cost,在 Refresh rate(刷新频率) 中修改余额刷新间隔(10–3600 秒,默认 60),点击保存后立即生效,胶囊会马上按新间隔刷新。该值保存在当前浏览器本地,不写入 cordis.patch.yml,也不需要重启。
每轮对话结束时仍会额外刷新一次余额,这是间隔之外的补充,不受该设置影响。
需要 DeepSeek Harness 0.2.x,并已登录 DeepSeek 账号(余额来自账号会话,不是 API Key)。
方式一 — 插件管理页(Harness ≥ 0.2.1):打开 插件,选择从目录安装,指向本包目录即可,bundle 的 patch 会自动注册插件行。
方式二 — 手动 link 到 profile:
cd "$DSH_PROFILE_DIR" # 例如 ~/.dsh/profiles/desktop
pnpm add link:/absolute/path/to/dsh-per-request-cost
方式三 — 直接从 GitHub 安装(推荐):pnpm add github:Shad0wwa1ker/dsh-per-request-cost,然后把 dsh-per-request-cost 加进 profile 的 dsh.profile.bundles。
然后把 bundle 加入该 profile 的 package.json:
"dsh": { "profile": { "bundles": ["dsh-per-request-cost"] } }
刷新页面(或重启 Harness)一次,让浏览器加载新的客户端模块。Host 投影属于 Host 代码,需要下次启动 Harness 才生效;页面只需刷新。
刷新间隔在插件详情页修改(见「设置」)。价格表和内置节假日列表分别位于 index.js(计价与 Host 节假日)和 client.js(回退估算与时段显示)顶部,DeepSeek 调价时改那里即可。插件不保存任何凭据,除 UI 本来就有的余额查询和公开节假日数据集外不发任何请求。
FALLBACK_HOLIDAYS 或替换数据源地址。deepseek-v4-pro 使用 Pro 价目表,其余按 flash 计;自定义模型若计费不同会算偏。multi_search 混合多引擎无法拆分,不计费。index.js — Host 半边:向 ctx.sessionProjections 注册 sessionCost 投影,折叠逻辑、价目表、节假日列表都在这里;注册是可选的,没有投影注册表的 profile 也能正常加载。client.js — 通过 window.__ModuleLoader__ 注册的浏览器模块:注册输入框胶囊和 bundle 配置页,并通过 useSession / useProjection 标准 props 读取会话状态与两个投影。cordis.patch.yml — 插入 per-request-cost 插件行。locale/*.json — 插件管理页展示用的标题与描述(中/英)。仓库中不含 token、cookie、账号标识、余额或本机路径。余额通过 Harness 已登录的账号会话读取;插件本身不持久化任何账号数据。
MIT