fix(coding-agent): sync extension theme changes to session settings (#1483)

This commit is contained in:
Fero 2026-02-23 00:57:36 +01:00 committed by GitHub
parent 34f841f036
commit 6137de9ce7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 51 additions and 0 deletions

View file

@ -1427,6 +1427,9 @@ export class InteractiveMode {
}
const result = setTheme(themeOrName, true);
if (result.success) {
if (this.settingsManager.getTheme() !== themeOrName) {
this.settingsManager.setTheme(themeOrName);
}
this.ui.requestRender();
}
return result;

View file

@ -60,6 +60,54 @@ describe("InteractiveMode.showStatus", () => {
});
});
describe("InteractiveMode.createExtensionUIContext setTheme", () => {
test("persists theme changes to settings manager", () => {
initTheme("dark");
let currentTheme = "dark";
const settingsManager = {
getTheme: vi.fn(() => currentTheme),
setTheme: vi.fn((theme: string) => {
currentTheme = theme;
}),
};
const fakeThis: any = {
session: { settingsManager },
settingsManager,
ui: { requestRender: vi.fn() },
};
const uiContext = (InteractiveMode as any).prototype.createExtensionUIContext.call(fakeThis);
const result = uiContext.setTheme("light");
expect(result.success).toBe(true);
expect(settingsManager.setTheme).toHaveBeenCalledWith("light");
expect(currentTheme).toBe("light");
expect(fakeThis.ui.requestRender).toHaveBeenCalledTimes(1);
});
test("does not persist invalid theme names", () => {
initTheme("dark");
const settingsManager = {
getTheme: vi.fn(() => "dark"),
setTheme: vi.fn(),
};
const fakeThis: any = {
session: { settingsManager },
settingsManager,
ui: { requestRender: vi.fn() },
};
const uiContext = (InteractiveMode as any).prototype.createExtensionUIContext.call(fakeThis);
const result = uiContext.setTheme("__missing_theme__");
expect(result.success).toBe(false);
expect(settingsManager.setTheme).not.toHaveBeenCalled();
expect(fakeThis.ui.requestRender).not.toHaveBeenCalled();
});
});
describe("InteractiveMode.showLoadedResources", () => {
beforeAll(() => {
initTheme("dark");