diff --git a/src/components/usage/providerLabel.ts b/src/components/usage/providerLabel.ts index 894bf2357..f5c8ab36a 100644 --- a/src/components/usage/providerLabel.ts +++ b/src/components/usage/providerLabel.ts @@ -15,6 +15,7 @@ const SESSION_PROVIDER_APPS: Record = { "Grok Build (Session)": "grokbuild", "MiniMax Code (Session)": "mcode", "Pi (Session)": "pi", + "Antigravity (Session)": "agy", }; export interface UsageProviderLabel { diff --git a/tests/components/usageProviderLabel.test.ts b/tests/components/usageProviderLabel.test.ts index 2d0b02cb8..cb40e5404 100644 --- a/tests/components/usageProviderLabel.test.ts +++ b/tests/components/usageProviderLabel.test.ts @@ -1,3 +1,5 @@ +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; import { describe, expect, it } from "vitest"; import type { TFunction } from "i18next"; import { @@ -20,6 +22,23 @@ describe("getUsageProviderLabel", () => { ); }); + it("translates every placeholder name the backend can return", () => { + // 后端 provider_name_coalesce 里的占位名,新增应用时漏了前端对照表就会原样显示英文全名 + const rust = readFileSync( + resolve(__dirname, "../../src-tauri/src/services/usage_stats.rs"), + "utf8", + ); + const names = [...rust.matchAll(/THEN '([^']+ \(Session\))'/g)].map( + (m) => m[1], + ); + expect(names).toContain("Antigravity (Session)"); + for (const name of names) { + expect(getUsageProviderLabel(name, t).shortLabel).toBe( + "usage.sessionProvider.short", + ); + } + }); + it("keeps real provider names as-is", () => { expect(getUsageProviderLabel("DeepSeek", t)).toEqual({ label: "DeepSeek",