From 580f62a21673de4472eab52578a52753c1768bb6 Mon Sep 17 00:00:00 2001 From: Serhii Vecherenko Date: Sun, 9 Aug 2026 22:13:03 -0700 Subject: [PATCH] fix(agents-usage): update Kimi subscription credit multipliers --- packages/agents-usage/src/collectors/kimi.test.ts | 10 +++++++--- packages/agents-usage/src/collectors/kimi.ts | 8 ++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/agents-usage/src/collectors/kimi.test.ts b/packages/agents-usage/src/collectors/kimi.test.ts index a6f5b7791..178ebc9f0 100644 --- a/packages/agents-usage/src/collectors/kimi.test.ts +++ b/packages/agents-usage/src/collectors/kimi.test.ts @@ -39,9 +39,13 @@ describe("parseKimiUsage", () => { expect(session.resetsAt).toBe(Date.parse(SESSION_RESET)); }); - it("maps the membership level to the subscription plan name with its credit multiplier", () => { - const snap = parseKimiUsage(JSON.parse(USAGES_BODY), FAKE_NOW_MS); - expect(snap.plan).toBe("Allegretto 5x"); + it("maps paid membership levels to the current subscription credit multipliers", () => { + const body = JSON.parse(USAGES_BODY); + expect(parseKimiUsage(body, FAKE_NOW_MS).plan).toBe("Allegretto 2x"); + body.user.membership.level = "LEVEL_ADVANCED"; + expect(parseKimiUsage(body, FAKE_NOW_MS).plan).toBe("Allegro 5x"); + body.user.membership.level = "LEVEL_STANDARD"; + expect(parseKimiUsage(body, FAKE_NOW_MS).plan).toBe("Vivace 10x"); }); it("humanizes unknown membership levels and omits plan when absent", () => { diff --git a/packages/agents-usage/src/collectors/kimi.ts b/packages/agents-usage/src/collectors/kimi.ts index 5db346dbf..898ce6d81 100644 --- a/packages/agents-usage/src/collectors/kimi.ts +++ b/packages/agents-usage/src/collectors/kimi.ts @@ -56,7 +56,7 @@ export interface KimiUsagesResponse { * Subscription tier names shown on kimi.com/membership, keyed by the * `user.membership.level` enum the usages endpoint returns. Paid tiers above * the base carry the Kimi Code credit multiplier from the pricing page - * (Allegretto 5x / Allegro 15x / Vivace 30x), mirroring the Codex plan labels + * (Allegretto 2x / Allegro 5x / Vivace 10x), mirroring the Codex plan labels * ("ChatGPT Pro 20x"). Unknown levels fall back to a humanized form of the * enum ("LEVEL_SOMETHING" → "Something") so a new tier still shows a readable * name instead of nothing. @@ -65,9 +65,9 @@ const KIMI_PLAN_BY_LEVEL: Record = { LEVEL_FREE: "Adagio", LEVEL_TRIAL: "Andante", LEVEL_BASIC: "Moderato", - LEVEL_INTERMEDIATE: "Allegretto 5x", - LEVEL_ADVANCED: "Allegro 15x", - LEVEL_STANDARD: "Vivace 30x", + LEVEL_INTERMEDIATE: "Allegretto 2x", + LEVEL_ADVANCED: "Allegro 5x", + LEVEL_STANDARD: "Vivace 10x", }; function formatKimiPlan(level: unknown): string | undefined {