feat(KB-335): rename environment variables from KB_* to FUSION_*

- Rename all KB_* environment variables to FUSION_* prefix across CLI and dashboard
- Update CLI runtime files (native-patch.ts) and build configuration
- Update dashboard server, badge-pubsub, GitHub webhooks, and terminal service
- Update test files to use new FUSION_API_KEY and related env vars
- Update documentation in README, AGENTS.md, STANDALONE.md, and dashboard README
- Update changeset files with new environment variable names
This commit is contained in:
gsxdsm
2026-03-31 17:03:23 -07:00
parent a114446844
commit ab3dff2100
16 changed files with 102 additions and 83 deletions

View File

@@ -98,8 +98,8 @@ describe("createBadgePubSub", () => {
beforeEach(() => {
process.env = { ...originalEnv };
delete process.env.KB_BADGE_PUBSUB_REDIS_URL;
delete process.env.KB_BADGE_PUBSUB_CHANNEL;
delete process.env.FUSION_BADGE_PUBSUB_REDIS_URL;
delete process.env.FUSION_BADGE_PUBSUB_CHANNEL;
});
afterEach(() => {
@@ -111,24 +111,24 @@ describe("createBadgePubSub", () => {
expect(pubsub).toBeInstanceOf(InMemoryBadgePubSub);
});
it("returns RedisBadgePubSub when KB_BADGE_PUBSUB_REDIS_URL is set", () => {
process.env.KB_BADGE_PUBSUB_REDIS_URL = "redis://localhost:6379";
it("returns RedisBadgePubSub when FUSION_BADGE_PUBSUB_REDIS_URL is set", () => {
process.env.FUSION_BADGE_PUBSUB_REDIS_URL = "redis://localhost:6379";
const pubsub = createBadgePubSub({ sourceId: "server-1" });
expect(pubsub).toBeInstanceOf(RedisBadgePubSub);
});
it("uses default channel kb:badge-updates when KB_BADGE_PUBSUB_CHANNEL is unset", () => {
process.env.KB_BADGE_PUBSUB_REDIS_URL = "redis://localhost:6379";
delete process.env.KB_BADGE_PUBSUB_CHANNEL;
it("uses default channel fusion:badge-updates when FUSION_BADGE_PUBSUB_CHANNEL is unset", () => {
process.env.FUSION_BADGE_PUBSUB_REDIS_URL = "redis://localhost:6379";
delete process.env.FUSION_BADGE_PUBSUB_CHANNEL;
const pubsub = createBadgePubSub({ sourceId: "server-1" });
expect(pubsub).toBeInstanceOf(RedisBadgePubSub);
// The channel is internal to the adapter; we verify by creating it without error
});
it("uses custom channel when KB_BADGE_PUBSUB_CHANNEL is set", () => {
process.env.KB_BADGE_PUBSUB_REDIS_URL = "redis://localhost:6379";
process.env.KB_BADGE_PUBSUB_CHANNEL = "custom-channel";
it("uses custom channel when FUSION_BADGE_PUBSUB_CHANNEL is set", () => {
process.env.FUSION_BADGE_PUBSUB_REDIS_URL = "redis://localhost:6379";
process.env.FUSION_BADGE_PUBSUB_CHANNEL = "custom-channel";
const pubsub = createBadgePubSub({ sourceId: "server-1" });
expect(pubsub).toBeInstanceOf(RedisBadgePubSub);
@@ -401,8 +401,8 @@ describe("RedisBadgePubSub (integration)", () => {
});
it("reads configuration from environment variables", () => {
process.env.KB_BADGE_PUBSUB_REDIS_URL = "redis://redis.example.com:6380";
process.env.KB_BADGE_PUBSUB_CHANNEL = "prod-badges";
process.env.FUSION_BADGE_PUBSUB_REDIS_URL = "redis://redis.example.com:6380";
process.env.FUSION_BADGE_PUBSUB_CHANNEL = "prod-badges";
const pubsub = createBadgePubSub({ sourceId: "server-1" });
expect(pubsub).toBeInstanceOf(RedisBadgePubSub);

View File

@@ -20,10 +20,10 @@ describe("GitHub Webhooks Module", () => {
beforeEach(() => {
vi.resetModules();
process.env = { ...originalEnv };
delete process.env.KB_GITHUB_APP_ID;
delete process.env.KB_GITHUB_APP_PRIVATE_KEY;
delete process.env.KB_GITHUB_APP_PRIVATE_KEY_PATH;
delete process.env.KB_GITHUB_WEBHOOK_SECRET;
delete process.env.FUSION_GITHUB_APP_ID;
delete process.env.FUSION_GITHUB_APP_PRIVATE_KEY;
delete process.env.FUSION_GITHUB_APP_PRIVATE_KEY_PATH;
delete process.env.FUSION_GITHUB_WEBHOOK_SECRET;
});
afterEach(() => {
@@ -37,14 +37,14 @@ describe("GitHub Webhooks Module", () => {
});
it("returns null when only appId is set", () => {
process.env.KB_GITHUB_APP_ID = "12345";
process.env.FUSION_GITHUB_APP_ID = "12345";
expect(getGitHubAppConfig()).toBeNull();
});
it("returns config when all required vars are set via direct key", () => {
process.env.KB_GITHUB_APP_ID = "12345";
process.env.KB_GITHUB_APP_PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\ntest\n-----END RSA PRIVATE KEY-----";
process.env.KB_GITHUB_WEBHOOK_SECRET = "webhook-secret";
process.env.FUSION_GITHUB_APP_ID = "12345";
process.env.FUSION_GITHUB_APP_PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\ntest\n-----END RSA PRIVATE KEY-----";
process.env.FUSION_GITHUB_WEBHOOK_SECRET = "webhook-secret";
const config = getGitHubAppConfig();
expect(config).not.toBeNull();
@@ -54,18 +54,18 @@ describe("GitHub Webhooks Module", () => {
});
it("returns null when key file cannot be read", () => {
process.env.KB_GITHUB_APP_ID = "12345";
process.env.KB_GITHUB_APP_PRIVATE_KEY_PATH = "/nonexistent/path/key.pem";
process.env.KB_GITHUB_WEBHOOK_SECRET = "webhook-secret";
process.env.FUSION_GITHUB_APP_ID = "12345";
process.env.FUSION_GITHUB_APP_PRIVATE_KEY_PATH = "/nonexistent/path/key.pem";
process.env.FUSION_GITHUB_WEBHOOK_SECRET = "webhook-secret";
expect(getGitHubAppConfig()).toBeNull();
});
it("prefers direct key over file path when both are set", () => {
process.env.KB_GITHUB_APP_ID = "12345";
process.env.KB_GITHUB_APP_PRIVATE_KEY = "direct-key-content";
process.env.KB_GITHUB_APP_PRIVATE_KEY_PATH = "/nonexistent/path/key.pem";
process.env.KB_GITHUB_WEBHOOK_SECRET = "webhook-secret";
process.env.FUSION_GITHUB_APP_ID = "12345";
process.env.FUSION_GITHUB_APP_PRIVATE_KEY = "direct-key-content";
process.env.FUSION_GITHUB_APP_PRIVATE_KEY_PATH = "/nonexistent/path/key.pem";
process.env.FUSION_GITHUB_WEBHOOK_SECRET = "webhook-secret";
const config = getGitHubAppConfig();
expect(config?.privateKey).toBe("direct-key-content");
@@ -78,9 +78,9 @@ describe("GitHub Webhooks Module", () => {
});
it("returns true when fully configured", () => {
process.env.KB_GITHUB_APP_ID = "12345";
process.env.KB_GITHUB_APP_PRIVATE_KEY = "private-key";
process.env.KB_GITHUB_WEBHOOK_SECRET = "webhook-secret";
process.env.FUSION_GITHUB_APP_ID = "12345";
process.env.FUSION_GITHUB_APP_PRIVATE_KEY = "private-key";
process.env.FUSION_GITHUB_WEBHOOK_SECRET = "webhook-secret";
expect(isGitHubAppConfigured()).toBe(true);
});