From 490b95efe7f50a7b0d25d9348dd599ce9c817b18 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Sat, 7 Mar 2026 07:00:38 -0600 Subject: [PATCH] fix(app): new session uses agent model/variant --- packages/app/src/pages/session.tsx | 13 +++- .../session/session-model-helpers.test.ts | 77 ++++++++++++++++++- .../pages/session/session-model-helpers.ts | 15 ++++ 3 files changed, 103 insertions(+), 2 deletions(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index ba9b14c12..302541d5e 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -36,7 +36,7 @@ import { createSessionComposerState, SessionComposerRegion } from "@/pages/sessi import { createOpenReviewFile, createSizing } from "@/pages/session/helpers" import { MessageTimeline } from "@/pages/session/message-timeline" import { type DiffStyle, SessionReviewTab, type SessionReviewTabProps } from "@/pages/session/review-tab" -import { syncSessionModel } from "@/pages/session/session-model-helpers" +import { resetSessionModel, syncSessionModel } from "@/pages/session/session-model-helpers" import { createScrollSpy } from "@/pages/session/scroll-spy" import { SessionMobileTabs } from "@/pages/session/session-mobile-tabs" import { SessionSidePanel } from "@/pages/session/session-side-panel" @@ -424,6 +424,17 @@ export default function Page() { ), ) + createEffect( + on( + () => params.id, + (id, prev) => { + if (id || !prev) return + resetSessionModel(local) + }, + { defer: true }, + ), + ) + const [store, setStore] = createStore({ messageId: undefined as string | undefined, mobileTab: "session" as "session" | "changes", diff --git a/packages/app/src/pages/session/session-model-helpers.test.ts b/packages/app/src/pages/session/session-model-helpers.test.ts index ae8700ccd..5f554dcd3 100644 --- a/packages/app/src/pages/session/session-model-helpers.test.ts +++ b/packages/app/src/pages/session/session-model-helpers.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from "bun:test" import type { UserMessage } from "@opencode-ai/sdk/v2" -import { syncSessionModel } from "./session-model-helpers" +import { resetSessionModel, syncSessionModel } from "./session-model-helpers" const message = (input?: Partial>) => ({ @@ -20,6 +20,9 @@ describe("syncSessionModel", () => { syncSessionModel( { agent: { + current() { + return undefined + }, set(value) { calls.push(["agent", value]) }, @@ -54,6 +57,9 @@ describe("syncSessionModel", () => { syncSessionModel( { agent: { + current() { + return undefined + }, set(value) { calls.push(["agent", value]) }, @@ -81,3 +87,72 @@ describe("syncSessionModel", () => { ]) }) }) + +describe("resetSessionModel", () => { + test("restores the current agent defaults", () => { + const calls: unknown[] = [] + + resetSessionModel({ + agent: { + current() { + return { + model: { providerID: "anthropic", modelID: "claude-sonnet-4" }, + variant: "high", + } + }, + set() {}, + }, + model: { + set(value) { + calls.push(["model", value]) + }, + current() { + return undefined + }, + variant: { + set(value) { + calls.push(["variant", value]) + }, + }, + }, + }) + + expect(calls).toEqual([ + ["model", { providerID: "anthropic", modelID: "claude-sonnet-4" }], + ["variant", "high"], + ]) + }) + + test("clears the variant when the agent has none", () => { + const calls: unknown[] = [] + + resetSessionModel({ + agent: { + current() { + return { + model: { providerID: "anthropic", modelID: "claude-sonnet-4" }, + } + }, + set() {}, + }, + model: { + set(value) { + calls.push(["model", value]) + }, + current() { + return undefined + }, + variant: { + set(value) { + calls.push(["variant", value]) + }, + }, + }, + }) + + expect(calls).toEqual([ + ["model", { providerID: "anthropic", modelID: "claude-sonnet-4" }], + ["variant", undefined], + ]) + }) +}) diff --git a/packages/app/src/pages/session/session-model-helpers.ts b/packages/app/src/pages/session/session-model-helpers.ts index ab181df59..7600f16d5 100644 --- a/packages/app/src/pages/session/session-model-helpers.ts +++ b/packages/app/src/pages/session/session-model-helpers.ts @@ -3,6 +3,12 @@ import { batch } from "solid-js" type Local = { agent: { + current(): + | { + model?: UserMessage["model"] + variant?: string + } + | undefined set(name: string | undefined): void } model: { @@ -19,6 +25,15 @@ type Local = { } } +export const resetSessionModel = (local: Local) => { + const agent = local.agent.current() + if (!agent) return + batch(() => { + local.model.set(agent.model) + local.model.variant.set(agent.variant) + }) +} + export const syncSessionModel = (local: Local, msg: UserMessage) => { batch(() => { local.agent.set(msg.agent)