test: complete P4.1 LM Studio coverage and fix auto/wizard handoff

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-06 21:45:18 +08:00
parent 6a949b54ba
commit 5d3e264cf3
11 changed files with 415 additions and 6 deletions
+9 -2
View File
@@ -5,6 +5,7 @@ import { useBookStore } from '@renderer/stores/useBookStore'
import { useAppStore } from '@renderer/stores/useAppStore'
import { useEditStore } from '@renderer/stores/useEditStore'
import { useAiStore } from '@renderer/stores/useAiStore'
import { useInteractiveStore } from '@renderer/stores/useInteractiveStore'
import i18n from '@renderer/i18n'
interface AutoState {
@@ -126,11 +127,17 @@ export const useAutoStore = create<AutoState>((set, get) => ({
handoffInteractive: async (bookId) => {
const flowId = get().flow?.id
if (!flowId) return
const sessionId = useAiStore.getState().activeSessionId
if (!flowId || !sessionId) return
const flow = await ipcCall(() => window.electronAPI.auto.handoffInteractive(bookId, flowId))
set({ flow })
set({ flow, streaming: false, streamBuffer: '' })
useAiStore.getState().setWritingMode('interactive')
useAppStore.getState().showToast(i18n.t('wizard.handoffToast'))
await useInteractiveStore.getState().loadFlow(bookId, sessionId)
const interactiveFlow = useInteractiveStore.getState().flow
if (interactiveFlow?.step === 'plot_suggest') {
await useInteractiveStore.getState().suggestPlots(bookId)
}
},
finishChapter: async (bookId, title) => {
+8 -1
View File
@@ -8,6 +8,7 @@ import type {
} from '@shared/types'
import { ipcCall } from '@renderer/lib/ipc-client'
import { useAiStore } from '@renderer/stores/useAiStore'
import { useInteractiveStore } from '@renderer/stores/useInteractiveStore'
import { useAppStore } from '@renderer/stores/useAppStore'
import i18n from '@renderer/i18n'
@@ -108,13 +109,19 @@ export const useWizardStore = create<WizardState>((set, get) => ({
startGenerate: async (bookId) => {
const flowId = get().flow?.id
if (!flowId) return
const sessionId = useAiStore.getState().activeSessionId
if (!flowId || !sessionId) return
set({ streaming: true, streamBuffer: '' })
try {
const flow = await ipcCall(() => window.electronAPI.wizard.startGenerate(bookId, flowId))
set({ flow })
useAiStore.getState().setWritingMode('interactive')
useAppStore.getState().showToast(i18n.t('wizard.handoffToast'))
await useInteractiveStore.getState().loadFlow(bookId, sessionId)
const interactiveFlow = useInteractiveStore.getState().flow
if (interactiveFlow?.step === 'plot_suggest') {
await useInteractiveStore.getState().suggestPlots(bookId)
}
} finally {
set({ streaming: false, streamBuffer: '' })
}