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){