Skip to content

Commit 490b95e

Browse files
committed
fix(app): new session uses agent model/variant
1 parent ba1edea commit 490b95e

3 files changed

Lines changed: 103 additions & 2 deletions

File tree

packages/app/src/pages/session.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import { createSessionComposerState, SessionComposerRegion } from "@/pages/sessi
3636
import { createOpenReviewFile, createSizing } from "@/pages/session/helpers"
3737
import { MessageTimeline } from "@/pages/session/message-timeline"
3838
import { type DiffStyle, SessionReviewTab, type SessionReviewTabProps } from "@/pages/session/review-tab"
39-
import { syncSessionModel } from "@/pages/session/session-model-helpers"
39+
import { resetSessionModel, syncSessionModel } from "@/pages/session/session-model-helpers"
4040
import { createScrollSpy } from "@/pages/session/scroll-spy"
4141
import { SessionMobileTabs } from "@/pages/session/session-mobile-tabs"
4242
import { SessionSidePanel } from "@/pages/session/session-side-panel"
@@ -424,6 +424,17 @@ export default function Page() {
424424
),
425425
)
426426

427+
createEffect(
428+
on(
429+
() => params.id,
430+
(id, prev) => {
431+
if (id || !prev) return
432+
resetSessionModel(local)
433+
},
434+
{ defer: true },
435+
),
436+
)
437+
427438
const [store, setStore] = createStore({
428439
messageId: undefined as string | undefined,
429440
mobileTab: "session" as "session" | "changes",

packages/app/src/pages/session/session-model-helpers.test.ts

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { describe, expect, test } from "bun:test"
22
import type { UserMessage } from "@opencode-ai/sdk/v2"
3-
import { syncSessionModel } from "./session-model-helpers"
3+
import { resetSessionModel, syncSessionModel } from "./session-model-helpers"
44

55
const message = (input?: Partial<Pick<UserMessage, "agent" | "model" | "variant">>) =>
66
({
@@ -20,6 +20,9 @@ describe("syncSessionModel", () => {
2020
syncSessionModel(
2121
{
2222
agent: {
23+
current() {
24+
return undefined
25+
},
2326
set(value) {
2427
calls.push(["agent", value])
2528
},
@@ -54,6 +57,9 @@ describe("syncSessionModel", () => {
5457
syncSessionModel(
5558
{
5659
agent: {
60+
current() {
61+
return undefined
62+
},
5763
set(value) {
5864
calls.push(["agent", value])
5965
},
@@ -81,3 +87,72 @@ describe("syncSessionModel", () => {
8187
])
8288
})
8389
})
90+
91+
describe("resetSessionModel", () => {
92+
test("restores the current agent defaults", () => {
93+
const calls: unknown[] = []
94+
95+
resetSessionModel({
96+
agent: {
97+
current() {
98+
return {
99+
model: { providerID: "anthropic", modelID: "claude-sonnet-4" },
100+
variant: "high",
101+
}
102+
},
103+
set() {},
104+
},
105+
model: {
106+
set(value) {
107+
calls.push(["model", value])
108+
},
109+
current() {
110+
return undefined
111+
},
112+
variant: {
113+
set(value) {
114+
calls.push(["variant", value])
115+
},
116+
},
117+
},
118+
})
119+
120+
expect(calls).toEqual([
121+
["model", { providerID: "anthropic", modelID: "claude-sonnet-4" }],
122+
["variant", "high"],
123+
])
124+
})
125+
126+
test("clears the variant when the agent has none", () => {
127+
const calls: unknown[] = []
128+
129+
resetSessionModel({
130+
agent: {
131+
current() {
132+
return {
133+
model: { providerID: "anthropic", modelID: "claude-sonnet-4" },
134+
}
135+
},
136+
set() {},
137+
},
138+
model: {
139+
set(value) {
140+
calls.push(["model", value])
141+
},
142+
current() {
143+
return undefined
144+
},
145+
variant: {
146+
set(value) {
147+
calls.push(["variant", value])
148+
},
149+
},
150+
},
151+
})
152+
153+
expect(calls).toEqual([
154+
["model", { providerID: "anthropic", modelID: "claude-sonnet-4" }],
155+
["variant", undefined],
156+
])
157+
})
158+
})

packages/app/src/pages/session/session-model-helpers.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ import { batch } from "solid-js"
33

44
type Local = {
55
agent: {
6+
current():
7+
| {
8+
model?: UserMessage["model"]
9+
variant?: string
10+
}
11+
| undefined
612
set(name: string | undefined): void
713
}
814
model: {
@@ -19,6 +25,15 @@ type Local = {
1925
}
2026
}
2127

28+
export const resetSessionModel = (local: Local) => {
29+
const agent = local.agent.current()
30+
if (!agent) return
31+
batch(() => {
32+
local.model.set(agent.model)
33+
local.model.variant.set(agent.variant)
34+
})
35+
}
36+
2237
export const syncSessionModel = (local: Local, msg: UserMessage) => {
2338
batch(() => {
2439
local.agent.set(msg.agent)

0 commit comments

Comments
 (0)