From 3e2a74d4d95c0da2140cc4837f78a1fe0ad950f7 Mon Sep 17 00:00:00 2001 From: hmo Date: Thu, 23 Jul 2026 22:52:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20SenseNova=E5=8D=A1=E7=89=87=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E6=B7=B7=E5=85=A5OpenCode=20Go=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - accounts.json移除key8/9/10(它们是同一SenseNova账户的3个模型视角,非OCG账号) 否则OCG采集器会把它们当OCG账户采集,前端归到OpenCode Go组 - /api/keys: 注册表外的用量条目(sensenova)以独立provider追加,不进OCG - 前端provider名映射补sensenova --- gateway/scripts/dashboard.py | 26 ++++++++++++++++++++++++ gateway/scripts/templates/dashboard.html | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/gateway/scripts/dashboard.py b/gateway/scripts/dashboard.py index a6c54f0..fdb3dae 100644 --- a/gateway/scripts/dashboard.py +++ b/gateway/scripts/dashboard.py @@ -1358,8 +1358,10 @@ def api_keys(): # 合并 keys_out = [] + _registry_kids = set() for a in accounts: kid = a.get("key_id", "") + _registry_kids.add(kid) raw_key = a.get("key", "") # Mask: 前8后4,不足12字符则不mask if len(raw_key) > 12: @@ -1371,10 +1373,12 @@ def api_keys(): "key_id": kid, "label": a.get("label", kid), "key_masked": masked, + "provider": "kimi" if kid == "key7" else "opencode_go", } # 附加用量 usage = usage_by_kid.get(kid) if usage: + entry["provider"] = usage.get("provider", entry["provider"]) entry["workspace_id"] = usage.get("workspace_id", "") for period in ["rolling", "weekly", "monthly"]: p = usage.get(period) @@ -1388,6 +1392,28 @@ def api_keys(): entry["last_update"] = usage.get("last_update_iso", "") keys_out.append(entry) + # 非注册表的用量条目(如 SenseNova key8/9/10:同一账户的模型视角, + # 不属于 OCG 注册表——2026-07-23 老爸:不要混进 OpenCode Go 卡片) + for kid, usage in usage_by_kid.items(): + if kid in _registry_kids: + continue + entry = { + "key_id": kid, + "label": usage.get("label", kid), + "key_masked": "(共享SenseNova账户)", + "provider": usage.get("provider", "other"), + "last_update": usage.get("last_update_iso", ""), + } + for period in ["rolling", "weekly", "monthly"]: + p = usage.get(period) + if p: + entry[period] = { + "usage_percent": p.get("usage_percent"), + "reset_in_sec": p.get("reset_in_sec"), + "status": p.get("status", "unknown"), + } + keys_out.append(entry) + return jsonify({ "ok": True, "count": len(keys_out), diff --git a/gateway/scripts/templates/dashboard.html b/gateway/scripts/templates/dashboard.html index a9b124c..4e8a102 100644 --- a/gateway/scripts/templates/dashboard.html +++ b/gateway/scripts/templates/dashboard.html @@ -416,7 +416,7 @@ document.getElementById('rdp-status-txt').textContent=fOn?'Connected':e4.rdp_ena groups[p].push(a); } // Provider names - var pn={opencode_go:'OpenCode Go',kimi:'Kimi'}; + var pn={opencode_go:'OpenCode Go',kimi:'Kimi',sensenova:'SenseNova'}; for(var gi=0;gi0){