import { describe, expect, it } from "vitest"; import { registerSingleProviderPlugin } from "../../test/helpers/plugins/plugin-registration.js"; import plugin from "./index.js"; async function runKimiCatalog(params: { apiKey?: string; explicitProvider?: Record; }) { const provider = await registerSingleProviderPlugin(plugin); const catalogResult = await provider.catalog?.run({ config: { models: { providers: params.explicitProvider ? { "kimi-coding": params.explicitProvider, } : {}, }, }, resolveProviderApiKey: () => ({ apiKey: params.apiKey ?? "" }), } as never); return catalogResult ?? null; } async function runKimiCatalogProvider(params: { apiKey: string; explicitProvider?: Record; }) { const result = await runKimiCatalog(params); if (!result || !("provider" in result)) { throw new Error("expected Kimi catalog to return one provider"); } return result.provider; } describe("Kimi implicit provider (#22409)", () => { it("publishes the env vars used by core api-key auto-detection", async () => { const provider = await registerSingleProviderPlugin(plugin); expect(provider.envVars).toEqual(["KIMI_API_KEY", "KIMICODE_API_KEY"]); }); it("does not publish a provider when no API key is resolved", async () => { await expect(runKimiCatalog({})).resolves.toBeNull(); }); it("publishes the Kimi provider when an API key is resolved", async () => { const provider = await runKimiCatalogProvider({ apiKey: "test-key" }); expect(provider).toMatchObject({ apiKey: "test-key", baseUrl: "https://api.kimi.com/coding/", api: "anthropic-messages", }); }); it("uses explicit legacy kimi-coding baseUrl when provided", async () => { const provider = await runKimiCatalogProvider({ apiKey: "test-key", explicitProvider: { baseUrl: "https://kimi.example.test/coding/", }, }); expect(provider.baseUrl).toBe("https://kimi.example.test/coding/"); }); it("merges explicit legacy kimi-coding headers on top of the built-in user agent", async () => { const provider = await runKimiCatalogProvider({ apiKey: "test-key", explicitProvider: { headers: { "User-Agent": "custom-kimi-client/1.0", "X-Kimi-Tenant": "tenant-a", }, }, }); expect(provider.headers).toEqual({ "User-Agent": "custom-kimi-client/1.0", "X-Kimi-Tenant": "tenant-a", }); }); });