mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-23 00:54:43 +00:00
fix(app): new session uses agent model/variant
This commit is contained in:
@@ -36,7 +36,7 @@ import { createSessionComposerState, SessionComposerRegion } from "@/pages/sessi
|
|||||||
import { createOpenReviewFile, createSizing } from "@/pages/session/helpers"
|
import { createOpenReviewFile, createSizing } from "@/pages/session/helpers"
|
||||||
import { MessageTimeline } from "@/pages/session/message-timeline"
|
import { MessageTimeline } from "@/pages/session/message-timeline"
|
||||||
import { type DiffStyle, SessionReviewTab, type SessionReviewTabProps } from "@/pages/session/review-tab"
|
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 { createScrollSpy } from "@/pages/session/scroll-spy"
|
||||||
import { SessionMobileTabs } from "@/pages/session/session-mobile-tabs"
|
import { SessionMobileTabs } from "@/pages/session/session-mobile-tabs"
|
||||||
import { SessionSidePanel } from "@/pages/session/session-side-panel"
|
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({
|
const [store, setStore] = createStore({
|
||||||
messageId: undefined as string | undefined,
|
messageId: undefined as string | undefined,
|
||||||
mobileTab: "session" as "session" | "changes",
|
mobileTab: "session" as "session" | "changes",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { describe, expect, test } from "bun:test"
|
import { describe, expect, test } from "bun:test"
|
||||||
import type { UserMessage } from "@opencode-ai/sdk/v2"
|
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<Pick<UserMessage, "agent" | "model" | "variant">>) =>
|
const message = (input?: Partial<Pick<UserMessage, "agent" | "model" | "variant">>) =>
|
||||||
({
|
({
|
||||||
@@ -20,6 +20,9 @@ describe("syncSessionModel", () => {
|
|||||||
syncSessionModel(
|
syncSessionModel(
|
||||||
{
|
{
|
||||||
agent: {
|
agent: {
|
||||||
|
current() {
|
||||||
|
return undefined
|
||||||
|
},
|
||||||
set(value) {
|
set(value) {
|
||||||
calls.push(["agent", value])
|
calls.push(["agent", value])
|
||||||
},
|
},
|
||||||
@@ -54,6 +57,9 @@ describe("syncSessionModel", () => {
|
|||||||
syncSessionModel(
|
syncSessionModel(
|
||||||
{
|
{
|
||||||
agent: {
|
agent: {
|
||||||
|
current() {
|
||||||
|
return undefined
|
||||||
|
},
|
||||||
set(value) {
|
set(value) {
|
||||||
calls.push(["agent", 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],
|
||||||
|
])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|||||||
@@ -3,6 +3,12 @@ import { batch } from "solid-js"
|
|||||||
|
|
||||||
type Local = {
|
type Local = {
|
||||||
agent: {
|
agent: {
|
||||||
|
current():
|
||||||
|
| {
|
||||||
|
model?: UserMessage["model"]
|
||||||
|
variant?: string
|
||||||
|
}
|
||||||
|
| undefined
|
||||||
set(name: string | undefined): void
|
set(name: string | undefined): void
|
||||||
}
|
}
|
||||||
model: {
|
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) => {
|
export const syncSessionModel = (local: Local, msg: UserMessage) => {
|
||||||
batch(() => {
|
batch(() => {
|
||||||
local.agent.set(msg.agent)
|
local.agent.set(msg.agent)
|
||||||
|
|||||||
Reference in New Issue
Block a user