DeepSeek Status
在 VS Code 状态栏显示 DeepSeek 账户余额、消耗趋势、API 调用价格与峰谷(高峰 / 空闲)时段。
所有信息都集中在状态栏这一个区域里,不打开额外页面:悬停看详情,单击出快速操作。
状态栏区域
状态栏文本
$(server) DS: ¥12.34 ☀️ # 余额 + 当前时段符号
$(server) DS: ¥12.34 ☀️ ↓9.60/天 # statusBarDisplay = balanceWithTrend
$(warning) DS: ¥1.20 ☀️ # 刷新失败(降级展示旧数据)
$(error) DS: ¥0.00 ☀️ # 账户余额不足(官方 is_available = false)
$(warning) DS: 未配置 # 未配置 API Key
悬停提示(分区排版)
### 🤖 DeepSeek 状态 ¥100.62
🔄 [立即刷新] · ⏰ [刷新频率] · 🌐 [DeepSeek 开放平台]
最后更新 刚刚 · 每 30 秒刷新 · 密钥 系统安全存储
---
### ☀️ 高峰时段 距切换到空闲时段:约 23 分钟
*高峰时段 周一至周五 09:00–12:00、14:00–18:00(北京时间)*
**📉 消耗趋势 今日消耗 ¥3.02 · 约 ¥3.02/天 · 预计可用 33.3 天(2026/10/17)**
---
**📊 API 调用价格**(元 / 百万 tokens) · 💱 [更新价格表] · 🔗 [官方定价页]
*单价顺序:输入(缓存命中)/ 输入(缓存未命中)/ 输出*
| 模型 | ☀️ 高峰 ✔ | 🌙 空闲 |
|:--|--:|--:|
| `deepseek-flash` | `0.04 / 2 / 8 ` | `0.02 / 1 / 4 ` |
| `deepseek-v4-pro` | `0.3 / 9 / 27` | `0.15 / 4.5 / 13.5` |
### 当前按 ☀️ 高峰 价格计费
价格表来自内置价格表 · 更新于 2026-09-14
---
👉 单击状态栏打开快速操作
排版规则
- 每个信息块之间用空行分隔(Markdown 单换行会被合并成一段,这是可读性最大的杀手)
- 标题与数值合并成一行
### 大号标题(### 🤖 DeepSeek 状态 ¥100.62、### ☀️ 高峰时段 距切换到空闲时段:约 23 分钟)—— Markdown 无法只放大行内片段,所以整行做标题
- 余额、时段倒计时、当前计费时段、消耗趋势整行这些需要一眼看到的信息加粗放大,其余为普通文字
- 价格表压缩为「模型 × 时段」两行,单价按
缓存命中 / 缓存未命中 / 输出 顺序用 / 分隔,避免 6 行大表格;标题与价格类按钮同行,「单价顺序」说明单独一行
- 价格单元格内用等宽字体(行内代码)+ 不换行空格(U+00A0)填充,把三项单价补齐到相同宽度,因此
2 与 4.5、8 与 13.5 会竖向对齐(Markdown 表格只能整格对齐,普通空格会被 HTML 折叠)
- 操作按钮前置于彩色图标,用
· 分隔:账户类(🔄 立即刷新 / ⏰ 刷新频率 / 🌐 DeepSeek 开放平台)另起一行跟在余额标题后,价格类(💱 更新价格表 / 🔗 官方定价页)与价格表标题同一行。⚠️ 图标用 emoji 而不是 $(codicon):codicon 是单色字形(跟随文字颜色),Markdown 里无法只给图标上色
- 数值列右对齐(表格
--:),当前计费时段对应的列打 ✔,无需自己推算
- 异常信息(请求失败、数据过期、余额不足、低余额、Key 失效)集中在顶部引用块,正常时不占空间
- emoji 用于分区标识(🤖 📊 ☀️ 🌙)与按钮图标(🔄 ⏰ 🌐 💱 🔗),行内不再堆叠装饰性 emoji
- 价格表详细程度可切换:
full(默认,三项单价全列)、summary(仅输出价)、none(不显示)
单击状态栏
- 未配置 API Key 时:直接弹出输入框,输入即保存到系统安全存储并立即刷新余额
- 已配置时:打开快速操作菜单 ——
立即刷新余额 / 更新价格表 / 设置刷新频率 / 设置 API Key / 迁移明文 API Key / 清除 API Key / 打开 DeepSeek 开放平台 / 打开官方定价页 / 打开扩展设置
- API Key 无效时(HTTP 401):菜单首项会变成「⚠️ 重新设置 API Key」
菜单标题栏会同时显示当前摘要,例如 ¥12.34 · ☀️ 高峰时段 · 距切换到空闲时段:约 2 小时 13 分钟。
功能
- 消耗趋势:只累计「余额下降量」,充值不会被误当作消耗;以「天」为最小计量单位——同一天内的多次采样只算作 1 天(如「今日消耗 ¥3.02 → 约 ¥3.02/天」),不做小时级外推,并据此给出预计可用天数
- 价格表与模型列表自动 / 手动更新:每次激活扩展(打开窗口)时强制检查一次,运行期间按**每月(30 天)**周期检查;也可随时手动触发。点「立即刷新」时也会顺带检查。内容与线上一致时不打扰你,只有真的变了才提示
- 峰谷判定:按北京时间,高峰为周一至周五(不含法定节假日)09:00–12:00、14:00–18:00,其余时段——含周末与法定节假日全天——均为空闲(空闲价为高峰价的一半)。节假日会在悬停提示的标题里标注节日名(如「🌙 空闲时段(中秋节)」)
- 健壮性:请求超时 + 指数退避重试(区分 401 / 429 / 5xx / 网络错误);刷新失败时降级显示上次余额并标注可能过期;支持多币种(¥ / $ 等)
- 提醒:使用 VS Code 原生通知(低余额、账户余额不足、进入空闲时段、价格表更新结果、API Key 操作、首次刷新失败)
命令
| 命令 |
说明 |
DeepSeek: 快速操作(余额 / 价格 / 设置) |
打开快速操作菜单(等同单击状态栏) |
DeepSeek: 立即刷新余额 |
立即请求一次接口,并顺带检查价格表 / 模型列表(自动刷新进行中时会排队执行) |
DeepSeek: 立即更新价格表 |
忽略更新周期,立刻从官方定价页更新模型与价格 |
DeepSeek: 设置刷新频率 |
快速选择 30 秒 ~ 1 小时 |
DeepSeek: 设置 API Key(安全存储) |
输入 Key,保存在 VS CodeSecretStorage |
DeepSeek: 迁移明文 API Key 到安全存储 |
把旧版明文配置迁移到安全存储并清除明文 |
DeepSeek: 清除 API Key |
删除安全存储与旧版明文配置中的 Key |
DeepSeek: 打开充值页 |
在浏览器打开 DeepSeek 充值页 |
DeepSeek: 打开开放平台(API Key / 用量 / 充值) |
在浏览器打开 platform.deepseek.com |
API Key
读取优先级:环境变量 DEEPSEEK_API_KEY → 安全存储(SecretStorage) → 旧版明文配置。
0.0.x 版本曾把 Key 明文保存在 settings.json。首次检测到时会询问是否迁移;选择「稍后」后不再打扰,可随时用命令手动迁移。
配置
| 配置项 |
默认值 |
说明 |
refreshIntervalSeconds |
300 |
自动刷新间隔(秒),最小 30 |
endpoint |
官方余额接口 |
查询地址 |
requestTimeoutMs |
10000 |
单次请求超时(毫秒) |
maxRetries |
2 |
可重试错误的额外重试次数 |
tooltipPricing |
full |
悬停价格表:none / summary / full |
statusBarDisplay |
balanceWithSlot |
状态栏内容:balance / balanceWithSlot / balanceWithTrend |
statusBarAlignment / statusBarPriority |
right / 999 |
状态栏位置与排序 |
lowBalanceThreshold |
5 |
低余额阈值(元),0 关闭 |
notifyOnLowBalance |
true |
低余额提醒 + 状态栏警示底色 |
notifyOnOffPeakStart |
true |
进入空闲时段时提醒 |
pricingAutoUpdate |
true |
是否定期自动更新价格表 |
pricingUpdateIntervalDays |
30 |
价格表与模型列表的检查周期(天),默认每月;每次激活扩展还会强制检查一次 |
extraHolidayDates |
[] |
补充法定节假日(YYYY-MM-DD),用于跨年兜底 |
pricingSourceUrl |
官方定价页 |
自动更新使用的页面地址 |
apiKey |
空 |
⚠️ 已弃用:明文 Key,仅用于兼容旧配置(请用命令迁移到安全存储) |
价格表更新
自动:每次激活扩展(打开窗口)时强制检查一次(内容没变就静默);运行期间每 6 小时比对一次时间戳,超过 pricingUpdateIntervalDays(默认 30 天)才真正抓取;配置变更、以及**手动点「立即刷新」**时也会顺带检查。
模型名与价格都以官方页面为准:解析成功后会覆盖内置表并缓存到 globalState,因此新模型上线后无需等待扩展发版。
手动(三个入口):
- 命令面板 →
DeepSeek: 立即更新价格表
- 单击状态栏 → 快速操作菜单里的「更新价格表」
- 悬停提示 → 价格表标题行的「💱 更新价格表」链接
- 点「立即刷新」(命令 / 菜单 / 悬停提示)→ 顺带按周期检查一次
解析策略:官方页面没有公开 JSON 接口,因此采用「尽力解析 + 严格校验」——
- 只有解析结果满足 空闲价 = 高峰价 ÷ 2 这一官方规则时才会被采纳
- 成功 → 缓存到本地(
globalState)并覆盖内置表,同时弹出通知
- 失败 → 保留现有价格表(手动触发时才提示失败原因)
- 悬停提示会显示价格表来源(
内置价格表 / 官方页面)与更新日期,距更新日期超过 45 天(多次更新都没成功)会提示手动更新
项目结构
src/
extension.ts 入口:命令注册、刷新调度、快速操作菜单、Key 迁移、价格表更新
config.ts 配置读取与校验
state.ts 共享运行时状态
statusBar.ts 状态栏控制器
statusText.ts 状态栏文本与悬停提示的纯函数渲染层
deepseekClient.ts 接口请求(超时 / 重试 / 错误分类 / 币种解析)
balanceHistory.ts 余额采样与消耗趋势估算
apiKeyStore.ts API Key 读取(环境变量 / 安全存储 / 旧版明文)
pricing.ts 内置价格表 + 运行时生效价格表 + 峰谷计算
pricingUpdate.ts 定价页抓取与解析、快照缓存
htmlText.ts HTML 表格文本提取工具
holidays.ts 中国法定节假日(峰谷判定用)
format.ts 格式化工具
test/ 单元测试(node:test,共 66 个用例)
scripts/ 开发辅助脚本(图标生成、激活冒烟测试)
resources/ 扩展图标
开发
npm install
npm run compile # 编译到 dist/
npm run watch # 监听编译
npm test # 编译并运行单元测试
npm run package # 打包 .vsix
调试:在本工作区按 F5 启动扩展开发宿主。
测试覆盖:峰谷边界、节假日(含调休与长假跨天倒计时)、趋势估算(按自然日计量、含充值场景)、请求重试与错误分类、币种解析、状态栏文案与悬停提示排版(标题/按钮/价格表对齐)、定价页解析与校验。