fix(agent): rebuilt advisor on explicit enable

Rebuilt live advisor runtimes when the explicit enable path runs so changed modelRoles.advisor values are re-resolved without restarting the session.

Added a regression test covering a live advisor moving from one role model to another through setAdvisorEnabled(true).

Fixes #4302
This commit is contained in:
roboomp
2026-07-02 11:27:47 +00:00
parent 0ea6ea630b
commit f3834dfce8
3 changed files with 23 additions and 0 deletions
@@ -15,15 +15,20 @@ describe("AgentSession advisor toggle", () => {
let authStorage: AuthStorage;
let modelRegistry: ModelRegistry;
let model: Model;
let replacementModel: Model;
beforeAll(async () => {
sharedDir = TempDir.createSync("@pi-advisor-toggle-shared-");
authStorage = await AuthStorage.create(path.join(sharedDir.path(), "testauth.db"));
authStorage.setRuntimeApiKey("anthropic", "test-key");
authStorage.setRuntimeApiKey("openai", "test-key");
modelRegistry = new ModelRegistry(authStorage);
const bundled = getBundledModel("anthropic", "claude-sonnet-4-5");
const replacement = getBundledModel("openai", "gpt-4o-mini");
if (!bundled) throw new Error("Expected built-in anthropic model to exist");
if (!replacement) throw new Error("Expected built-in OpenAI model to exist");
model = bundled;
replacementModel = replacement;
});
afterAll(async () => {
@@ -80,6 +85,19 @@ describe("AgentSession advisor toggle", () => {
expect(session.formatAdvisorStatus()).toContain("Advisor is enabled (anthropic/claude-sonnet-4-5)");
});
it("explicit enable rebuilds the runtime when the advisor role changes", () => {
session.settings.setModelRole("advisor", `${model.provider}/${model.id}`);
expect(session.setAdvisorEnabled(true)).toBe(true);
expect(session.getAdvisorAgent()?.state.model.provider).toBe(model.provider);
expect(session.getAdvisorAgent()?.state.model.id).toBe(model.id);
session.settings.setModelRole("advisor", `${replacementModel.provider}/${replacementModel.id}`);
expect(session.setAdvisorEnabled(true)).toBe(true);
expect(session.getAdvisorAgent()?.state.model.provider).toBe(replacementModel.provider);
expect(session.getAdvisorAgent()?.state.model.id).toBe(replacementModel.id);
});
it("explicit enable overrides default-off setting for the session only", () => {
session.settings.setModelRole("advisor", "anthropic/claude-sonnet-4-5");
session.settings.override("advisor.enabled", false);