From aeac4948844f5b3cd102ffdcc4ea587e7e76c2c2 Mon Sep 17 00:00:00 2001 From: kchantharuan Date: Wed, 13 May 2026 12:52:02 -0700 Subject: [PATCH] fix(cli): add NVIDIA NIM origin header --- packages/opencode/src/provider/provider.ts | 1 + .../test/kilocode/nvidia-headers.test.ts | 73 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 packages/opencode/test/kilocode/nvidia-headers.test.ts diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 4a0c81091f1..24c54c3663d 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -463,6 +463,7 @@ function custom(dep: CustomDep): Record { headers: { "HTTP-Referer": "https://opencode.ai/", "X-Title": "opencode", + "X-BILLING-INVOKE-ORIGIN": "KiloCode", // kilocode_change }, }, }), diff --git a/packages/opencode/test/kilocode/nvidia-headers.test.ts b/packages/opencode/test/kilocode/nvidia-headers.test.ts new file mode 100644 index 00000000000..1d6ad57d726 --- /dev/null +++ b/packages/opencode/test/kilocode/nvidia-headers.test.ts @@ -0,0 +1,73 @@ +import { expect } from "bun:test" +import path from "path" +import { Effect, Layer } from "effect" +import { provideTmpdirInstance } from "../fixture/fixture" +import { testEffect } from "../lib/effect" +import { Env } from "../../src/env" +import { Provider } from "../../src/provider/provider" +import { ProviderID } from "../../src/provider/schema" + +const it = testEffect(Layer.mergeAll(Provider.defaultLayer, Env.defaultLayer)) + +function withNvidiaKey(self: Effect.Effect) { + return Effect.gen(function* () { + const env = yield* Env.Service + yield* env.set("NVIDIA_API_KEY", "test-api-key") + yield* Effect.addFinalizer(() => env.remove("NVIDIA_API_KEY")) + return yield* self + }) +} + +it.live("nvidia provider includes KiloCode billing origin header", () => + provideTmpdirInstance(() => + withNvidiaKey( + Provider.Service.use((provider) => + Effect.gen(function* () { + const providers = yield* provider.list() + const headers = providers[ProviderID.make("nvidia")].options.headers + + expect(headers["HTTP-Referer"]).toBe("https://opencode.ai/") + expect(headers["X-Title"]).toBe("opencode") + expect(headers["X-BILLING-INVOKE-ORIGIN"]).toBe("KiloCode") + }), + ), + ), + ), +) + +it.live("nvidia billing origin header can be overridden from config", () => + provideTmpdirInstance((dir) => + Effect.gen(function* () { + yield* Effect.promise(() => + Bun.write( + path.join(dir, "opencode.json"), + JSON.stringify({ + $schema: "https://app.kilo.ai/config.json", + provider: { + nvidia: { + options: { + headers: { + "X-BILLING-INVOKE-ORIGIN": "CustomOrigin", + }, + }, + }, + }, + }), + ), + ) + + return yield* withNvidiaKey( + Provider.Service.use((provider) => + Effect.gen(function* () { + const providers = yield* provider.list() + const headers = providers[ProviderID.make("nvidia")].options.headers + + expect(headers["HTTP-Referer"]).toBe("https://opencode.ai/") + expect(headers["X-Title"]).toBe("opencode") + expect(headers["X-BILLING-INVOKE-ORIGIN"]).toBe("CustomOrigin") + }), + ), + ) + }), + ), +)