🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

底部信息栏 songoao25/dsh-bottom-info-bar

DeepSeek Harnessv1.21.10
songoao252 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness(DSH)插件:把输入框下方的统计行换成服务商与模型、余额或订阅额度、高峰/低谷价格,以及会话花费。

52/100
综合分
55
GitHub 星标
7,985
npm 周下载
—/5
用户评分

数据截至 2026/11/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-bottom-info-bar
npm 源 · dsh-bottom-info-bar 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · model
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v1.21.9,当前版本为 v1.21.10
L5 · 运行时冒烟等级说明 →
数据截至 2026/10/29·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 2 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-bottom-info-bar @ 1.21.10
✓Node 引擎要求 >=22.13.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 09:04:36

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 97 处,展示前 53 条)
  • 读取本地文件
    lib/index.js:102
    const entries = readdirSync(join(dshHomeDir(), 'profiles'), { withFileTypes: true })
  • 读取本地文件
    lib/index.js:139
    try { return readFileSync(file, 'utf8') } catch { return null }
  • 读取本地文件
    lib/index.js:147
    if (existsSync(marker)) {
  • 读取本地文件
    lib/index.js:149
    try { isDirectory = statSync(marker).isDirectory() } catch { return null }
  • 读取本地文件
    lib/index.js:195
    if (existsSync(join(layout.commonDir, 'refs', 'remotes', remote, candidate))) return candidate
  • 读取本地文件
    lib/index.js:226
    if (!existsSync(buildScript)) return gitCommand
  • 发起网络请求
    lib/index.js:290
    return fetch(UPDATE_REGISTRY_URL, {
  • 发起网络请求
    lib/index.js:737
    inFlight[key] = src.fetch(arg).then(function (result) {
  • 删除本地文件
    lib/index.js:1390
    rmSync(filePath, { recursive: filePath === USAGE_ARCHIVE_DIR, force: true })
  • 删除本地文件
    lib/index.js:1392
    rmSync(LEDGER_CLEAR_MARKER_FILE, { force: true })
  • 写入本地文件
    lib/index.js:1594
    if (opts.ensureDir) mkdirSync(opts.ensureDir, { recursive: true, mode: 0o700 })
  • 写入本地文件
    lib/index.js:1607
    try { renameSync(filePath, opts.backupPath) } catch (err) { }
  • 写入本地文件
    lib/index.js:1609
    renameSync(tmp, filePath)
  • 写入本地文件
    lib/index.js:1617
    mkdirSync(DATA_DIR, { recursive: true, mode: 0o700 })
  • 写入本地文件
    lib/index.js:1629
    try { chmodSync(DATA_DIR, 0o700) } catch (err) { }
  • 写入本地文件
    lib/index.js:1631
    if (existsSync(USAGE_JOURNAL_FILE)) chmodSync(USAGE_JOURNAL_FILE, 0o600)
  • 发起网络请求
    lib/index.js:2014
    const res = await fetch(REMOTE_PRICING_URL, { headers, signal: timeoutSignal(10000) });
  • 发起网络请求
    lib/index.js:2337
    const res = await fetch(freshBalanceURL(prov.balanceAPI), {
  • 请求外部主机opencode.ai
    lib/index.js:2436
    const res = await fetch('https://opencode.ai/zen/go/v1/usage', {
  • 发起网络请求
    lib/index.js:2436
    const res = await fetch('https://opencode.ai/zen/go/v1/usage', {
  • 发起网络请求
    lib/index.js:2470
    const res = await fetch(COMMAND_CODE_API_BASE + path, {
  • 请求外部主机api.fireworks.ai
    lib/index.js:2787
    const accRes = await fetch('https://api.fireworks.ai/v1/accounts', {
  • 请求外部主机api.fireworks.ai
    lib/index.js:2794
    const summaryRes = await fetch('https://api.fireworks.ai/v1/accounts/' + encodeURIComponent(accountId) + '/billing/summary?granularity=DAILY', {
  • 请求外部主机api.fireworks.ai
    lib/index.js:2804
    const usageRes = await fetch('https://api.fireworks.ai/v1/accounts/' + encodeURIComponent(accountId) + '/billingUsage', {
  • 请求外部主机sts.amazonaws.com
    lib/index.js:2883
    const stsRes = await fetch('https://sts.amazonaws.com/?' + query, { headers: headers, signal: timeoutSignal(HTTP_TIMEOUT_MS) });
  • 请求外部主机api.cloudflare.com
    lib/index.js:2902
    const res = await fetch('https://api.cloudflare.com/client/v4/accounts/' + encodeURIComponent(accountId) + '/billing/usage/paygo', {
  • 读取本地文件
    lib/version.js:19
    const pkg = JSON.parse(readFileSync(PACKAGE_FILE, 'utf8'))
  • 读取本地文件
    lib/self-update.js:71
    if (lstatSync(base).isSymbolicLink()) return null
  • 读取本地文件
    lib/self-update.js:74
    if (existsSync(cursor) && lstatSync(cursor).isSymbolicLink()) return null
  • 读取本地文件
    lib/self-update.js:74
    if (existsSync(cursor) && lstatSync(cursor).isSymbolicLink()) return null
  • 读取本地文件
    lib/self-update.js:260
    try { names = readdirSync(dir) } catch { return }
  • 读取本地文件
    lib/self-update.js:266
    try { info = lstatSync(full) } catch { continue }
  • 删除本地文件递归
    lib/self-update.js:289
    rmSync(backupDir, { recursive: true, force: true })
  • 写入本地文件
    lib/self-update.js:290
    mkdirSync(backupDir, { recursive: true })
  • 读取本地文件
    lib/self-update.js:295
    if (!source || !target || !existsSync(source)) continue
  • 写入本地文件
    lib/self-update.js:296
    mkdirSync(dirname(target), { recursive: true })
  • 写入本地文件
    lib/self-update.js:297
    copyFileSync(source, target)
  • 删除本地文件递归
    lib/self-update.js:301
    rmSync(backupDir, { recursive: true, force: true })
  • 写入本地文件
    lib/self-update.js:307
    mkdirSync(dirname(target), { recursive: true })
  • 写入本地文件
    lib/self-update.js:309
    writeFileSync(temp, file.data)
  • 写入本地文件
    lib/self-update.js:310
    renameSync(temp, target)
  • 删除本地文件
    lib/self-update.js:331
    rmSync(target, { force: true })
  • 发起网络请求
    lib/self-update.js:355
    const fetchImpl = config.fetch || ((...args) => fetch(...args))
  • 删除本地文件递归
    lib/self-update.js:462
    rmSync(join(backupRoot, name), { recursive: true, force: true })
  • 写入本地文件
    lib/ledger-store.js:156
    mkdirSync(dir, { recursive: true, mode: 0o700 })
  • 写入本地文件
    lib/ledger-store.js:157
    chmodSync(dir, 0o700)
  • 写入本地文件
    lib/ledger-store.js:165
    function permissions() { for (const name of [file, file + '-wal', file + '-shm']) { if (existsSync(name)) chmodSync(name, 0o600) } }
  • 读取本地文件
    lib/ledger-store.js:165
    function permissions() { for (const name of [file, file + '-wal', file + '-shm']) { if (existsSync(name)) chmodSync(name, 0o600) } }
  • 读取本地文件
    lib/ledger-store.js:226
    if (!existsSync(path)) continue
  • 读取本地文件
    lib/ledger-store.js:239
    } else if (existsSync(archive) && readdirSync(archive).some(name => name.endsWith('.jsonl'))) {
  • 读取本地文件
    lib/ledger-store.js:239
    } else if (existsSync(archive) && readdirSync(archive).some(name => name.endsWith('.jsonl'))) {
  • 读取本地文件
    lib/ledger-store.js:242
    const temps = readdirSync(dir).filter(n => n.startsWith('usage-records.json.tmp.')).sort((a, b) => statSync(join(dir, b)).mtimeMs - statSync(join(dir,
  • 读取本地文件
    lib/ledger-store.js:242
    const temps = readdirSync(dir).filter(n => n.startsWith('usage-records.json.tmp.')).sort((a, b) => statSync(join(dir, b)).mtimeMs - statSync(join(dir,
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:opencode.ai、api.fireworks.ai、sts.amazonaws.com、api.cloudflare.com、huggingface.co

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

3 张 · 点击查看大图

功能亮点

  • 显示服务商与模型
  • 显示余额或订阅额度
  • 显示高峰低谷价格
v1.21.102026-10-29
· 1.21.10 (2026-10-29) · Bug Fixes · recognize Volcengine Ark and price DeepSeek Flash models (#257) (7f05de1)
原文(未汉化)
v1.21.92026-10-25
· 1.21.9 (2026-10-25) · Bug Fixes · keep exhausted subscription quota windows visible (#253) (076cdc7)
原文(未汉化)
v1.21.82026-10-17
· 1.21.8 (2026-10-17) · Bug Fixes · restore native button switches and density toggle on DSH 0.2.1 (#250) (655212c)
原文(未汉化)
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
底部信息栏 加入内测群 DeepThinking 问题和需求群里反馈解决得最快——扫码进内测群,直接说遇到的问题或者想要的功能,我们会优先安排。二维码有有效期,扫不动了就在 issue 里说一声。 DeepSeek Harness 插件:把输入框下方那行统计栏换成一行信息栏——服务商与模型、真实余额或订阅额度、高峰/空闲定价,以及本会话已经花了多少。 信息栏完整模式 它显示什么 信息栏跟随当前会话,按服务商自动选择三种口径之一(互斥,不用手动切):余额制显示官方接口的真实余额,订阅制显示各额度窗口剩余额度与重置倒计时(额度用尽时窗口仍显示 0%,不会从信息栏消失,并标红提示「低」),云账单制显示官方账单接口的本月真实花费。之外还有本会话/今天/近 30 天/累计四档花费,以及时间、自定义文字等通用项。这四档都来自插件自己的账本,从插件开始运行那一刻起记账:装上之前(或清除账单之后)已经发生的调用不在其中,把鼠标停在花费上会写明统计起点;要整场会话的权威数字,请以服务商的余额或账单为准。余额制下把鼠标停在余额上,会展开「充值余额 / 赠金余额」两行明细,赠送的那部分不再是糊涂账。 DSH 0.2.1-rc.1 提供新版原生统计按钮时,原生那一行在上、插件账户信息在下。点击插件信息行的任意字段仍可切换完整/简洁,保留原来的高度收合与淡出动画:完整显示原生行,简洁把它收起。
展开完整文档(README 剩余 1 节)
底部信息栏

加入内测群 DeepThinking

问题和需求群里反馈解决得最快——扫码进内测群,直接说遇到的问题或者想要的功能,我们会优先安排。二维码有有效期,扫不动了就在 issue 里说一声。

DeepSeek Harness 插件:把输入框下方那行统计栏换成一行信息栏——服务商与模型、真实余额或订阅额度、高峰/空闲定价,以及本会话已经花了多少。

信息栏完整模式

它显示什么

信息栏跟随当前会话,按服务商自动选择三种口径之一(互斥,不用手动切):余额制显示官方接口的真实余额,订阅制显示各额度窗口剩余额度与重置倒计时(额度用尽时窗口仍显示 0%,不会从信息栏消失,并标红提示「低」),云账单制显示官方账单接口的本月真实花费。之外还有本会话/今天/近 30 天/累计四档花费,以及时间、自定义文字等通用项。这四档都来自插件自己的账本,从插件开始运行那一刻起记账:装上之前(或清除账单之后)已经发生的调用不在其中,把鼠标停在花费上会写明统计起点;要整场会话的权威数字,请以服务商的余额或账单为准。余额制下把鼠标停在余额上,会展开「充值余额 / 赠金余额」两行明细,赠送的那部分不再是糊涂账。

DSH 0.2.1-rc.1 提供新版原生统计按钮时,原生那一行在上、插件账户信息在下。点击插件信息行的任意字段仍可切换完整/简洁,保留原来的高度收合与淡出动画:完整显示原生行,简洁把它收起。原生两个按钮保留自己的点击行为,点开是 Harness 的明细弹窗;也可以在插件设置页分别隐藏这两个原生按钮。上下文圆环继续保留现有明细和插件设置。

旧宿主仍保留点击信息栏切换完整/简洁:完整显示旧统计行,简洁收起它;插件字段在两种模式下一致。兼容方式通过实际扩展入口判断,不依赖版本号猜测。

安装

最推荐:打开 DSH 的插件页 → 添加插件,在「包名或地址」里填 npm 包名——DSH 会直接从 npm 下载已发布的版本,不用敲命令,也不用构建:

dsh-bottom-info-bar

习惯用终端?命令行装的是同一个包:

dsh plugin --profile web add dsh-bottom-info-bar

想跑默认分支上的最新代码而不是已发布的版本,就在同一个输入框里填仓库地址:

https://github.com/songoao25/dsh-bottom-info-bar

然后重启 DSH(插件在宿主启动时组合,只刷新页面不够)。桌面客户端请使用插件 → 添加插件;它的配置由客户端管理,不能通过命令行安装。其他装法(含 Windows PowerShell)与排障见 docs/INSTALL.md。

上下文占用圆环保留原生悬浮提示,点击可打开统计面板。提示和面板都显示在底栏外层,避免出现时改动底栏内部。

设置

插件设置都在插件 → bottom-info-bar,改完自动保存。插件信息和提醒信息保留各自的开关与配色。新版的原生信息为两个原生按钮各提供一个开关(会话统计 / 用量统计),可以分别隐藏;旧统计行的逐字段控件不再显示,也不计入搜索结果和启用数量,旧设置仍保留供旧宿主使用。旧宿主继续显示原生字段控件。重置插件字段或颜色不会改动 Harness 原生按钮的偏好。

插件信息:按计费方式分块

「插件信息」里再按计费方式分块——你用哪种服务,就只看哪一块,哪几项有数据的说明写在块标题旁。时区、自定义文字、订阅窗口方向、账单数据是独立设置区:

时间与日期:只设时区

密钥填在 DSH 的设置 → 模型;订阅类(Codex、OpenCode、小米 Token Plan、Command Code、MiniMax)读本机登录,MiniMax 必须用 Subscription Key。列表里没有的服务商只会显示未适配提示,绝不借用别家的数据。

花费与更新

账本需要 DSH 内部运行环境为 Node.js 22.13 或更新版本。账目和历史会话保存在本机磁盘,按需分批读取,导出直接下载。升级会迁移旧账,但保留旧文件供恢复核对;详见 账本存储与恢复。

每次模型响应记一条(用量 × 单价,单价在响应完成时锁定),重启不丢。插件每次随 DSH 启动检查一次新版本:全自动更新(默认)下载好等你重启生效,手动更新只提示不下载;新版有问题可以在设置页回滚到上一版。账本只记 token 与金额,不记对话内容;数据存放在本端 DSH_HOME 下的 dsh-bottom-info-bar/ 目录(默认 ~/.dsh/dsh-bottom-info-bar/,可用 DSH_BOTTOM_INFO_BAR_DATA_DIR 覆盖),卸载不删——要清零去设置页的账单数据里导出或清除。

卸载与回退

在 DSH 插件页移除(或 dsh plugin --profile web remove dsh-bottom-info-bar)后重启 DSH:原生统计栏会自动恢复,插件代码不留残留。账本是有意保留的——想彻底清零,先在设置页「账单数据」里导出或清除,再卸载。只想退回上一版的话,在有新版本等待重启时、以及更新失败后,设置页的更新区会给出回滚到上一版。细节见 docs/INSTALL.md。

语言

插件内置简体中文、繁体中文、英语、日语、韩语、西班牙语、葡萄牙语、法语、德语、意大利语、俄语、印地语和印度尼西亚语。默认跟随 DSH 的语言;也可以在本插件设置页的语言中单独选择,选择会保存在当前浏览器。墨西哥西班牙语、巴西葡萄牙语等地区变体使用对应的内置语言;不支持的语言显示英语。

开发

- 构建:npm run build
- 测试:node tests/run-all.mjs
- 贡献:CONTRIBUTING.md

许可证

MIT © 2026 songoao25

节假日计价已覆盖国务院公布的 2026 年中国放假调休日期。后续年份需在年度通知公布后更新日历;未收录年份使用周一至周五/周末规则。调休上班的周末仍为空闲价,已冻结的历史费用保持不变。
预览分享卡片长什么样 ↓songoao25/dsh-bottom-info-bar
分享 · DeepSeek Harness Hub
songoao25/dsh-bottom-info-bar

DeepSeek Harness(DSH)插件:把输入框下方的统计行换成服务商与模型、余额或订阅额度、高峰/低谷价格,以及会话花费。

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部