Просмотр исходного кода

fix(desktop): preserve selected model during session promotion (#34466)

usrnk1 2 месяцев назад
Родитель
Сommit
e34822db6b
1 измененных файлов с 8 добавлено и 5 удалено
  1. 8 5
      packages/app/src/context/local.tsx

+ 8 - 5
packages/app/src/context/local.tsx

@@ -80,6 +80,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
     const [store, setStore] = createStore<{
       current?: string
       draft?: State
+      promoting?: State
       last?: {
         type: "agent" | "model" | "variant"
         agent?: string
@@ -123,7 +124,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
 
     const scope = createMemo<State | undefined>(() => {
       const session = id()
-      if (!session) return store.draft
+      if (!session) return store.draft ?? store.promoting
       return saved.session[session] ?? handoff.get(handoffKey(serverSDK().scope, sdk().directory, session))
     })
 
@@ -136,11 +137,13 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
       if (!next) return
       if (saved.session[session] !== undefined) {
         handoff.delete(key)
+        setStore("promoting", undefined)
         return
       }
 
       setSaved("session", session, clone(next))
       handoff.delete(key)
+      setStore("promoting", undefined)
     })
 
     const configuredModel = () => {
@@ -373,19 +376,19 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
       agent,
       session: {
         reset() {
-          setStore("draft", undefined)
+          setStore({ draft: undefined, promoting: undefined })
         },
         promote(dir: string, session: string) {
           const next = clone(snapshot())
           if (!next) return
+          const key = handoffKey(serverSDK().scope, dir, session)
+          handoff.set(key, next)
 
           if (dir === sdk().directory) {
             setSaved("session", session, next)
-            setStore("draft", undefined)
-            return
           }
 
-          handoff.set(handoffKey(serverSDK().scope, dir, session), next)
+          setStore("promoting", next)
           setStore("draft", undefined)
         },
         restore(msg: { sessionID: string; agent: string; model: ModelKey }) {