summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages/session
diff options
context:
space:
mode:
Diffstat (limited to 'packages/app/src/pages/session')
-rw-r--r--packages/app/src/pages/session/session-model-helpers.test.ts133
-rw-r--r--packages/app/src/pages/session/session-model-helpers.ts42
-rw-r--r--packages/app/src/pages/session/use-session-commands.tsx2
3 files changed, 19 insertions, 158 deletions
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 5f554dcd3..319db805d 100644
--- a/packages/app/src/pages/session/session-model-helpers.test.ts
+++ b/packages/app/src/pages/session/session-model-helpers.test.ts
@@ -14,145 +14,38 @@ const message = (input?: Partial<Pick<UserMessage, "agent" | "model" | "variant"
}) as UserMessage
describe("syncSessionModel", () => {
- test("restores the last message model and variant", () => {
+ test("restores the last message through session state", () => {
const calls: unknown[] = []
syncSessionModel(
{
- agent: {
- current() {
- return undefined
- },
- set(value) {
- calls.push(["agent", value])
- },
- },
- model: {
- set(value) {
- calls.push(["model", value])
- },
- current() {
- return { id: "claude-sonnet-4", provider: { id: "anthropic" } }
- },
- variant: {
- set(value) {
- calls.push(["variant", value])
- },
- },
- },
- },
- message({ variant: "high" }),
- )
-
- expect(calls).toEqual([
- ["agent", "build"],
- ["model", { providerID: "anthropic", modelID: "claude-sonnet-4" }],
- ["variant", "high"],
- ])
- })
-
- test("skips variant when the model falls back", () => {
- const calls: unknown[] = []
-
- syncSessionModel(
- {
- agent: {
- current() {
- return undefined
- },
- set(value) {
- calls.push(["agent", value])
- },
- },
- model: {
- set(value) {
- calls.push(["model", value])
- },
- current() {
- return { id: "gpt-5", provider: { id: "openai" } }
- },
- variant: {
- set(value) {
- calls.push(["variant", value])
- },
+ session: {
+ restore(value) {
+ calls.push(value)
},
+ reset() {},
},
},
message({ variant: "high" }),
)
- expect(calls).toEqual([
- ["agent", "build"],
- ["model", { providerID: "anthropic", modelID: "claude-sonnet-4" }],
- ])
+ expect(calls).toEqual([message({ variant: "high" })])
})
})
describe("resetSessionModel", () => {
- test("restores the current agent defaults", () => {
- const calls: unknown[] = []
+ test("clears draft session state", () => {
+ const calls: string[] = []
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])
- },
+ session: {
+ reset() {
+ calls.push("reset")
},
+ restore() {},
},
})
- expect(calls).toEqual([
- ["model", { providerID: "anthropic", modelID: "claude-sonnet-4" }],
- ["variant", undefined],
- ])
+ expect(calls).toEqual(["reset"])
})
})
diff --git a/packages/app/src/pages/session/session-model-helpers.ts b/packages/app/src/pages/session/session-model-helpers.ts
index 7600f16d5..c9e2e1dbd 100644
--- a/packages/app/src/pages/session/session-model-helpers.ts
+++ b/packages/app/src/pages/session/session-model-helpers.ts
@@ -1,48 +1,16 @@
import type { UserMessage } from "@opencode-ai/sdk/v2"
-import { batch } from "solid-js"
type Local = {
- agent: {
- current():
- | {
- model?: UserMessage["model"]
- variant?: string
- }
- | undefined
- set(name: string | undefined): void
- }
- model: {
- set(model: UserMessage["model"] | undefined): void
- current():
- | {
- id: string
- provider: { id: string }
- }
- | undefined
- variant: {
- set(value: string | undefined): void
- }
+ session: {
+ reset(): void
+ restore(msg: UserMessage): void
}
}
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)
- })
+ local.session.reset()
}
export const syncSessionModel = (local: Local, msg: UserMessage) => {
- batch(() => {
- local.agent.set(msg.agent)
- local.model.set(msg.model)
- })
-
- const model = local.model.current()
- if (!model) return
- if (model.provider.id !== msg.model.providerID) return
- if (model.id !== msg.model.modelID) return
- local.model.variant.set(msg.variant)
+ local.session.restore(msg)
}
diff --git a/packages/app/src/pages/session/use-session-commands.tsx b/packages/app/src/pages/session/use-session-commands.tsx
index f5a4c0576..1a2e777f5 100644
--- a/packages/app/src/pages/session/use-session-commands.tsx
+++ b/packages/app/src/pages/session/use-session-commands.tsx
@@ -351,7 +351,7 @@ export const useSessionCommands = (actions: SessionCommandContext) => {
description: language.t("command.model.choose.description"),
keybind: "mod+'",
slash: "model",
- onSelect: () => dialog.show(() => <DialogSelectModel />),
+ onSelect: () => dialog.show(() => <DialogSelectModel model={local.model} />),
}),
mcpCommand({
id: "mcp.toggle",