diff --git a/packages/cli/src/ui/commands/languageCommand.test.ts b/packages/cli/src/ui/commands/languageCommand.test.ts index e8ebaac01..e7e7bf28e 100644 --- a/packages/cli/src/ui/commands/languageCommand.test.ts +++ b/packages/cli/src/ui/commands/languageCommand.test.ts @@ -750,7 +750,7 @@ describe('languageCommand', () => { expect(fs.writeFileSync).not.toHaveBeenCalled(); }); - it('should overwrite existing file when output language setting differs', () => { + it('should NOT overwrite existing file even when output language setting differs', () => { vi.mocked(fs.existsSync).mockReturnValue(true); vi.mocked(fs.readFileSync).mockReturnValue( `# Output language preference: English @@ -760,11 +760,8 @@ describe('languageCommand', () => { initializeLlmOutputLanguage('Japanese'); - expect(fs.writeFileSync).toHaveBeenCalledWith( - expect.stringContaining('output-language.md'), - expect.stringContaining('Japanese'), - 'utf-8', - ); + // Should NOT overwrite - user's existing file takes precedence + expect(fs.writeFileSync).not.toHaveBeenCalled(); }); it('should resolve auto setting to detected system language', () => { diff --git a/packages/cli/src/utils/languageUtils.test.ts b/packages/cli/src/utils/languageUtils.test.ts index 39582af75..63e793015 100644 --- a/packages/cli/src/utils/languageUtils.test.ts +++ b/packages/cli/src/utils/languageUtils.test.ts @@ -309,12 +309,12 @@ describe('languageUtils', () => { ); }); - it('should NOT overwrite file when content matches resolved language', () => { + it('should NOT overwrite file when it already exists with valid content', () => { vi.mocked(fs.existsSync).mockReturnValue(true); vi.mocked(i18n.detectSystemLanguage).mockReturnValue('en'); vi.mocked(fs.readFileSync).mockReturnValue( - `# Output language preference: English - + `# Output language preference: French + `, ); @@ -323,21 +323,18 @@ describe('languageUtils', () => { expect(fs.writeFileSync).not.toHaveBeenCalled(); }); - it('should overwrite file when language setting differs', () => { + it('should NOT overwrite file even when setting differs from existing content', () => { vi.mocked(fs.existsSync).mockReturnValue(true); vi.mocked(fs.readFileSync).mockReturnValue( - `# Output language preference: English - + `# Output language preference: French + `, ); initializeLlmOutputLanguage('Japanese'); - expect(fs.writeFileSync).toHaveBeenCalledWith( - expect.stringContaining('output-language.md'), - expect.stringContaining('Japanese'), - 'utf-8', - ); + // Should NOT overwrite - user's existing file takes precedence + expect(fs.writeFileSync).not.toHaveBeenCalled(); }); it('should resolve "auto" to detected system language', () => { diff --git a/packages/cli/src/utils/languageUtils.ts b/packages/cli/src/utils/languageUtils.ts index cb4e06c4d..722a7a1c7 100644 --- a/packages/cli/src/utils/languageUtils.ts +++ b/packages/cli/src/utils/languageUtils.ts @@ -175,17 +175,19 @@ export function updateOutputLanguageFile(settingValue: string): void { * @param outputLanguage - The output language setting value (e.g., 'auto', 'Chinese', etc.) * * Behavior: - * - Resolves the setting value ('auto' -> detected system language, or use as-is) - * - Ensures the rule file matches the resolved language - * - Creates the file if it doesn't exist + * - If the rule file already exists and contains a valid language setting, do nothing (preserve user modifications) + * - If the rule file doesn't exist, create it with the resolved language ('auto' -> detected system language, or use as-is) */ export function initializeLlmOutputLanguage(outputLanguage?: string): void { - // Resolve 'auto' or undefined to the detected system language - const resolved = resolveOutputLanguage(outputLanguage); + // Check if the file already exists and has valid content const currentFileLanguage = readOutputLanguageFromFile(); - // Only write if the file doesn't match the resolved language - if (currentFileLanguage !== resolved) { - writeOutputLanguageFile(resolved); + // If file exists with valid language, preserve user's setting - do nothing + if (currentFileLanguage) { + return; } + + // File doesn't exist or has invalid content, create it with resolved language + const resolved = resolveOutputLanguage(outputLanguage); + writeOutputLanguageFile(resolved); }