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: fix(app): new session uses agent model/variant --- .../pages/session/session-model-helpers.test.ts | 77 +++++++++++++++++++++- .../app/src/pages/session/session-model-helpers.ts | 15 +++++ 2 files changed, 91 insertions(+), 1 deletion(-) (limited to 'packages/app/src/pages/session') 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) -- cgit v1.2.3