diff --git a/src/tests/settings-manager.test.ts b/src/tests/settings-manager.test.ts index 9eae527..c51e9df 100644 --- a/src/tests/settings-manager.test.ts +++ b/src/tests/settings-manager.test.ts @@ -19,6 +19,7 @@ import { deleteSecureTokens, isKeychainAvailable, keychainAvailablePrecompute, + setServiceName, } from "../utils/secrets.js"; // Store original HOME to restore after tests @@ -27,6 +28,9 @@ let testHomeDir: string; let testProjectDir: string; beforeEach(async () => { + // Use a test-specific keychain service name to avoid deleting real credentials + setServiceName("letta-code-test"); + // Reset settings manager FIRST before changing HOME await settingsManager.reset(); @@ -49,6 +53,9 @@ afterEach(async () => { // Restore original HOME AFTER reset completes process.env.HOME = originalHome; + + // Restore the real service name + setServiceName("letta-code"); }); // ============================================================================ diff --git a/src/utils/secrets.ts b/src/utils/secrets.ts index 5d8a5e9..0fc92e8 100644 --- a/src/utils/secrets.ts +++ b/src/utils/secrets.ts @@ -14,10 +14,17 @@ try { secretsAvailable = false; } -const SERVICE_NAME = "letta-code"; +let SERVICE_NAME = "letta-code"; const API_KEY_NAME = "letta-api-key"; const REFRESH_TOKEN_NAME = "letta-refresh-token"; +/** + * Override the keychain service name (useful for tests to avoid touching real credentials) + */ +export function setServiceName(name: string): void { + SERVICE_NAME = name; +} + // Note: When secrets API is unavailable (Node.js), tokens will be managed // by the settings manager which falls back to storing in the settings file // This provides persistence across restarts