在输入框旁查看并切换 Gemini 账号额度
31.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xinglan163/dsh-gemini-quota该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 12 处,展示前 12 条)
- 读取本地文件index.js:168
text = readFileSync(path, "utf8"); - 发起网络请求client.js:490
const res = await fetch(`${QUOTA_ROUTE}?account_id=${id}`, { - 发起网络请求client.js:523
const res = await fetch(POOL_ROUTE, { - 发起网络请求client.js:563
const res = await fetch(ACCOUNT_ROUTE, { - 发起网络请求client.js:828
const res = await fetch(QUOTA_ROUTE, { - 发起网络请求client.js:892
const res = await fetch(QUOTA_ROUTE, { - 发起网络请求client.js:916
const res = await fetch(ACTUAL_ROUTE, { - 读取本地文件selftest.mjs:94
readFileSync(join(homedir(), ".dsh", "gemini-web2api.env"), "utf8"), - 读取密钥环境变量selftest.mjs:269
process.env.DSH_QUOTA_SELFTEST_TOKEN = "wrong-token-from-env"; - 读取密钥环境变量selftest.mjs:273
delete process.env.DSH_QUOTA_SELFTEST_TOKEN; - 读取本地文件selftest.mjs:401
const source = readFileSync(new URL("./client.js", import.meta.url), "utf8"); - 读取本地文件selftest.mjs:453
const source = readFileSync(new URL("./client.js", import.meta.url), "utf8");
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(144 字)↓
为 DeepSeek Harness 添加 Gemini 网页端额度条:输入框旁显示 5 小时 / 每周剩余额度,只在选中 Gemini 模型时出现。数据来自本地 gemini-web2api-go 反代。· Gemini quota pill for DeepSeek Harness.
README
由 DeepSeek 最新模型翻译生成dsh-gemini-quota
在 DeepSeek Harness 输入框那一行显示一条 Gemini 额度小条,点一下弹出多号池面板。
Gemini 额度条:5h 37% / 7d 87%(悬停可看重置时间)
- 只在当前选中的模型属于 Gemini 时出现,切到 DeepSeek / Codex 自动消失;
- 鼠标悬停显示剩余量与重置时间(含账号),提示气泡跟随 DSH 主题配色(明暗主题与皮肤插件都会同步);
- 0.2.0 新增账号池面板:点一下额度条,逐个账号看 5h / 7d 剩余额度,并能直接 启用 / 停用(冷却)/ 检测登录态 / 保活 / 切号——不用切去反代后台网页;
- 0.3.0 新增降级守卫:额度耗尽时 Gemini 会静默换成更弱的模型却仍返回 200,额度条会染成警告色 + ⚠️,写明「请求 X,实际 Y」,并给一键换号;
- 0.3.1 修复额度条与账号不同步:多号池 + 额度感知选号时请求会在号之间改道,额度条过去可能一直显示另一个号的额度(数字看着挺正常,所以很隐蔽)。现在它跟反代调度器的结果一致 —— 也就是下一条请求会用的那个号;在面板里切号 / 启停之后立刻刷新,不用等下一个轮询周期;
- 数据来自本地 gemini-web2api-go 反代的 /admin/api/。
本插件是显示 + 控制层,不含反代本身。
展开完整文档(README 剩余 1 节)
dsh-gemini-quota
在 DeepSeek Harness 输入框那一行显示一条 Gemini 额度小条,点一下弹出多号池面板。
Gemini 额度条:5h 37% / 7d 87%(悬停可看重置时间)
- 只在当前选中的模型属于 Gemini 时出现,切到 DeepSeek / Codex 自动消失;
- 鼠标悬停显示剩余量与重置时间(含账号),提示气泡跟随 DSH 主题配色(明暗主题与皮肤插件都会同步);
- 0.2.0 新增账号池面板:点一下额度条,逐个账号看 5h / 7d 剩余额度,并能直接 启用 / 停用(冷却)/ 检测登录态 / 保活 / 切号——不用切去反代后台网页;
- 0.3.0 新增降级守卫:额度耗尽时 Gemini 会静默换成更弱的模型却仍返回 200,额度条会染成警告色 + ⚠️,写明「请求 X,实际 Y」,并给一键换号;
- 0.3.1 修复额度条与账号不同步:多号池 + 额度感知选号时请求会在号之间改道,额度条过去可能一直显示另一个号的额度(数字看着挺正常,所以很隐蔽)。现在它跟反代调度器的结果一致 —— 也就是下一条请求会用的那个号;在面板里切号 / 启停之后立刻刷新,不用等下一个轮询周期;
- 数据来自本地 gemini-web2api-go 反代的 /admin/api/。
本插件是显示 + 控制层,不含反代本身。你需要先自己跑一个 gemini-web2api-go。
注意:上游 v4.22.0 没有 GET /admin/api/quota 这个接口——它是本机对上游的本地补丁(internal/app/quota.go,上游升级会被覆盖,需备份)。没有它,额度条永远不显示(路由返回 502),但账号池面板仍然可用(它只依赖上游已有的 /admin/api/cookies)。
账号池面板里的逐号额度另需一个本地扩展:GET /admin/api/quota?account_id=N。
没打这个补丁时,面板会明确标出「按号查额度不支持」,不会拿自动选号的数字冒充某个账号。
前置条件
1. 一个在跑的反代,默认地址 http://127.0.0.1:8083;
2. 它的 admin token,放在下面任一位置(按优先级):
- token 配置项(直接写在 config 里,不推荐提交到仓库);
- 环境变量 GEMINI_WEB_ADMIN_TOKEN(可用 tokenEnv 改名);
- envFile 指向的文件里的 GEMINI_WEB_ADMIN_TOKEN=...;
- $DSH_HOME/gemini-web2api.env(默认 ~/.dsh/gemini-web2api.env)——推荐,机器相关的东西放这里。
install -m 600 /dev/null ~/.dsh/gemini-web2api.env
printf 'GEMINI_WEB_ADMIN_TOKEN=%s\n' '<你的 admin token>' > ~/.dsh/gemini-web2api.env
安装
在 DSH 侧边栏 插件 页里安装(输入包名即可):
dsh-gemini-quota
也可以走 CLI / 其他 spec 形式:
注册表包
dsh plugin --profile <profile> add dsh-gemini-quota
本地目录(开发用)
dsh plugin --profile <profile> add /path/to/dsh-gemini-quota
tarball / git
dsh plugin --profile <profile> add ./dsh-gemini-quota-0.2.0.tgz
dsh plugin --profile <profile> add github:xinglan163/dsh-gemini-quota
安装后默认启用。本插件没有任何依赖构建脚本,因此不会触发 pnpm 的 allowBuilds 审批。
配置
改组合包自带的 cordis.patch.yml,或在你 profile 的 cordis.patch.yml 里按 id: gemini-web-quota 覆盖:
| 项 | 默认 | 说明 |
| baseUrl | http://127.0.0.1:8083 | 反代地址 |
| providers | ["gemini-web"] | 哪些 DSH provider id 触发显示(决定门控) |
| matchModelPrefix | true | 额外按模型名 gemini- 兜底 |
| token | — | 直接给 admin token(优先级最高) |
| tokenEnv | GEMINI_WEB_ADMIN_TOKEN | 从哪个环境变量读 token |
| envFile | $DSH_HOME/gemini-web2api.env | 从该文件读 token |
| timeoutMs | 8000 | 上游超时 |
| readOnly | false | true = 面板只读,禁用一切账号动作 |
providers 必须和你在 llm-pi-ai 里给反代起的 provider 名一致(默认 gemini-web)。
账号池面板(0.2.0)
额度条点一下弹出面板(再点 / 点外面 / 按 Esc 关闭):
Gemini 账号池面板:逐号 5h / 7d 剩余额度,一行一个号,可 停用 / 检测 / 保活 / 切到此号
Gemini 账号池 1/2 启用 [刷新] [反代面板] [✕] ● Pro(FF导入) #1 [当前] 5h ▓▓▓▓ 100% 7d ▓▓▓ 80% 出口 直连 · 15 个 cookie · 上次成功 2 小时前 [停用][检测][保活][切到此号] ● 备用号 #2 5h ░░░░ 0% 7d ▓▓▓ 55% 出口 新加坡 · 失败 3 次 · 上次成功 1 天前 [启用][检测][保活][切到此号]
| 元素 | 含义 |
| ● 颜色 | 绿=在用;黄=待检测(还没成功用过);红=鉴权失败中(多半 cookie 过期);灰=已停用 |
| [当前] | 额度条上显示的正是这个号 —— 反代调度器下一个请求会挑的号(所以点完「切到此号」立刻就变) |
| 5h / 7d | 该账号自己的网页端额度(?account_id=N),失败时显示原因,不支持时显示 — |
| 第二行 | 出口代理、失败计数、cookie 个数、上次成功时间(悬停看完整 last_error) |
| 启用 / 停用 | 即"冷却"开关:停用的号不会被调度器选中 |
| 检测 | 真的去上游探一次登录态(/check),结果直接显示在下方 |
| 保活 | 刷新 cookie(/rotate,SAPISID 轮换),返回刷新了哪几个字段 |
| 切到此号 | 需点两次确认:启用目标号,并停用其余已启用的号 |
「切到此号」为什么要点两次:反代的调度器只按 (fail_count, last_used_at) 轮转,没有「活跃账号」这个开关,所以"让接下来的请求都走这个号"唯一诚实的实现就是 把别的号禁用掉——这是会一次改动多行的动作,值得一次确认。
「反代面板」按钮会新开 baseUrl/admin/(反代自带的 web 面板),加 cookie / 配代理这类不常做的事还是去那边。
降级守卫(0.3.0)
额度用完后,Gemini 会静默把你的模型换掉,但 HTTP 照样回 200。
你选了 4 Argon(付费号专属)。当账号 5 小时额度见底时,上游不报错,而是把这一轮转给更笨的 3.5 Flash-Lite 去答,然后正常返回成功。于是 DSH 以为用的是强模型, agent 还会理直气壮地说"我做完了"——issue #41 里管这叫「产生严重幻觉并破坏任务」。
额度条会整条染成警告色并加一个 ⚠️,悬停第一行就是原因:
⚠️ 最近一次请求被降级:请求 gemini-4-argon,实际 3.5 Flash-Lite 5h 额度:剩余 5%
账号:Pro(FF导入)
点一下:账号池面板
点开面板,顶部是告警条 + 一个按钮:切到额度最充足的号(两下确认,与行内「切到此号」同一套逻辑:启用目标号 + 停用其它已启用的号)。
判定规则(以及为什么这么判)
| 情形 | 判定 |
| 请求 gemini-4-argon,上游自报 4 Argon / 4 Argon High | ok |
| 请求 gemini-4-argon,上游自报 3.5 Flash-Lite | downgraded |
| 上游没自报显示名(生图 / 生视频 / 抽取失败) | unknown —— 不亮红灯 |
| 模型不在插件内置表里(例如将来新增) | unknown —— 不亮红灯 |
两个刻意的设计:
1. 判不了就说判不了。unknown 绝不等于"没问题"——把"看不见"伪装成"没降级",比漏报更糟(用户会开始无视这个红灯)。
2. 上游改名要容忍。Google 把 3.7 原地升级成 3.8 过(同一个 hex、显示名变了),所以 id→显示名是一张容错表,遇到改名不误报。
真相来自反代自己记录的 upstream_model(上游在响应帧里自报的显示名)。
不能靠响应体判断:反代回给客户端的 "model" 填的是你请求的那个,响应体本身在撒谎。
已知边界
- 判定表是插件内置的:反代新增模型后要更新插件(否则新模型一律 unknown,不误报);
- 每次在最近 5 条请求里找「最近一次可判定的」:最新一条是生图时会继续往前找,不会因为一条判不了的请求就把更早的降级藏起来;
- 它不能阻止这一次降级——那要在反代里做(上游 strict_model)。插件负责让你 知道,以及下一步换号。
宿主路由
| 路由 | 上游 | 说明 |
| GET /plugins/dsh-gemini-quota/quota[?account_id=N][?refresh=1] | GET /admin/api/quota | 额度条数据;account_id 是面板逐号查的入口 |
| GET /plugins/dsh-gemini-quota/pool | GET /admin/api/cookies | 账号池视图(健康度、失败计数、代理、cookie 摘要) |
| GET /plugins/dsh-gemini-quota/actual[?limit=N] | GET /admin/api/requests | 降级守卫:最近几次请求「请求的模型 vs 实际用的模型」(只回元数据,不含 prompt/正文) |
| POST /plugins/dsh-gemini-quota/account | POST /admin/api/cookies/{id}/{toggle\|check\|rotate} | 账号动作;switch 由插件编排(启用目标 + 停用其余) |
sapisid_tail 之类的摘要字段来自反代;完整 cookie 值不会出现在任何回给浏览器的数据里。
工作原理
- 宿主半(index.js)把反代 /admin/api/ 转成同源路由 /plugins/dsh-gemini-quota/。
为什么不让浏览器直连反代:反代的 CORS 预检没有 Access-Control-Allow-Headers,带 Authorization 的 fetch 会被浏览器拒;用 ?token= 又能过但会把 admin token 泄进前端产物。
- 四条路由都自带最小信任闸门(回环对端 + 回环 Host + 非 cross-site + 同源 Origin), POST /account 另有 readOnly 开关和入参校验。
- 面板的逐号额度是打开面板时才按需并发查(3 个 worker),一旦发现反代不支持 ?account_id=N 就立刻停手并如实标注,不白打上游。
- 路由同时下发 providers / matchModelPrefix:浏览器半拿不到 cordis config (client-modules 只传 { name: id }),所以门控范围必须由宿主告知。
- 降级判定必须在宿主半做:响应体里的 "model" 是「你请求的」(反代原样回填),真相只在上游自报的 upstream_model 里,而那个字段只有反代的 admin API 才给得出来。
自测
node --check index.js && node --check client.js
node selftest.mjs # 20 项:路由/闸门/token 链/字段映射 + 降级判定 7 情形(stub 上游)
+ 额度条渲染(降级亮灯 / 正常不误报)+ 浏览器半契约冒烟
node scripts/http-check.mjs # 真起一个 http server,用真 fetch 打一遍三条路由
反代没在跑时依赖上游的用例会标 SKIP 而不是失败。
疑难排查
| 现象 | 原因 |
| 悬停提示正常但条一直不出现 | 当前模型不在 providers 里;改配置或开 matchModelPrefix |
| 额度条染成警告色 + ⚠️ | 最近一次请求被静默降级(响应体里看不出来,悬停看「请求 X 实际 Y」) |
| 降级判定一直是 unknown(不亮灯) | 上游没自报显示名,或该模型不在插件内置表里——这是刻意的,不是故障 |
| 控制台/路由 503 no admin token | token 四个来源都没命中 |
| 502 upstream ... | 反代没跑、端口不对、或 admin token 无效 |
| 面板整行都显示 — 并提示「按号查额度不支持」 | 反代的 /admin/api/quota 没打 ?account_id=N 扩展(见文件头说明) |
| 403 forbidden | 不是从回环地址/同源访问的 |
| 点「停用」提示 403 readOnly | 宿主配置里把 readOnly 设成了 true |
| 切号后发现请求还是走旧号 | 调度器每请求取一次号;已在飞的请求不会中断,下一条新请求才走新号 |
| 改了 client.js 界面没变 | client-hmr 对 link: 安装不一定生效,刷新页面(Cmd+R)最稳 |
| 改了 index.js(宿主半)界面没变 | 宿主半没有 HMR:需要重启 DSH(或插件页关掉再开启该组合包) |
| 刚发布的新版装不上(Already up to date) | pnpm「最小发布年龄」保护:加 --config.minimumReleaseAge=0,或等一段时间 |
卸载
插件页关掉组合包,或 dsh plugin --profile <profile> remove dsh-gemini-quota。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
xinglan163/dsh-gemini-quota
在输入框旁查看并切换 Gemini 账号额度
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1