mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-21 14:03:35 +08:00
fix(desktop): avoid prewarming viewed history sessions (#880)
Viewing an existing transcript should only load history, not start the CLI prewarm path. Empty placeholder sessions still prewarm so new chats stay fast. Fixes #880 Tested: cd desktop && bunx vitest run src/stores/chatStore.test.ts Tested: bun run check:desktop Confidence: high Scope-risk: narrow
This commit is contained in:
parent
e944db1e2f
commit
79b2f4b3b8
@ -215,6 +215,40 @@ describe('chatStore history mapping', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('does not prewarm an existing transcript when opening it for history review', () => {
|
||||||
|
sessionStoreSnapshot.sessions = [{
|
||||||
|
id: TEST_SESSION_ID,
|
||||||
|
title: 'Existing transcript',
|
||||||
|
createdAt: '2026-06-20T10:00:00.000Z',
|
||||||
|
modifiedAt: '2026-06-20T10:30:00.000Z',
|
||||||
|
messageCount: 4,
|
||||||
|
projectPath: '/workspace/project',
|
||||||
|
workDir: '/workspace/project',
|
||||||
|
workDirExists: true,
|
||||||
|
}]
|
||||||
|
|
||||||
|
useChatStore.getState().connectToSession(TEST_SESSION_ID)
|
||||||
|
|
||||||
|
expect(sendMock).not.toHaveBeenCalledWith(TEST_SESSION_ID, { type: 'prewarm_session' })
|
||||||
|
})
|
||||||
|
|
||||||
|
it('still prewarms empty placeholder sessions so new chats start quickly', () => {
|
||||||
|
sessionStoreSnapshot.sessions = [{
|
||||||
|
id: TEST_SESSION_ID,
|
||||||
|
title: 'New Session',
|
||||||
|
createdAt: '2026-06-20T10:00:00.000Z',
|
||||||
|
modifiedAt: '2026-06-20T10:00:00.000Z',
|
||||||
|
messageCount: 0,
|
||||||
|
projectPath: '/workspace/project',
|
||||||
|
workDir: '/workspace/project',
|
||||||
|
workDirExists: true,
|
||||||
|
}]
|
||||||
|
|
||||||
|
useChatStore.getState().connectToSession(TEST_SESSION_ID)
|
||||||
|
|
||||||
|
expect(sendMock).toHaveBeenCalledWith(TEST_SESSION_ID, { type: 'prewarm_session' })
|
||||||
|
})
|
||||||
|
|
||||||
it('preserves thinking blocks when restoring transcript history', () => {
|
it('preserves thinking blocks when restoring transcript history', () => {
|
||||||
const messages: MessageEntry[] = [
|
const messages: MessageEntry[] = [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -892,6 +892,11 @@ async function fetchAndMapSessionHistory(sessionId: string) {
|
|||||||
|
|
||||||
const historyLoadsInFlight = new Map<string, Promise<void>>()
|
const historyLoadsInFlight = new Map<string, Promise<void>>()
|
||||||
|
|
||||||
|
function shouldPrewarmSession(sessionId: string): boolean {
|
||||||
|
const knownSession = useSessionStore.getState().sessions.find((session) => session.id === sessionId)
|
||||||
|
return !knownSession || knownSession.messageCount === 0
|
||||||
|
}
|
||||||
|
|
||||||
export const useChatStore = create<ChatStore>((set, get) => ({
|
export const useChatStore = create<ChatStore>((set, get) => ({
|
||||||
sessions: {},
|
sessions: {},
|
||||||
|
|
||||||
@ -938,7 +943,11 @@ export const useChatStore = create<ChatStore>((set, get) => ({
|
|||||||
if (runtimeSelection) {
|
if (runtimeSelection) {
|
||||||
wsManager.send(sessionId, { type: 'set_runtime_config', ...runtimeSelection })
|
wsManager.send(sessionId, { type: 'set_runtime_config', ...runtimeSelection })
|
||||||
}
|
}
|
||||||
if (!sessionId.startsWith('__') && !useTeamStore.getState().getMemberBySessionId(sessionId)) {
|
if (
|
||||||
|
!sessionId.startsWith('__') &&
|
||||||
|
!useTeamStore.getState().getMemberBySessionId(sessionId) &&
|
||||||
|
shouldPrewarmSession(sessionId)
|
||||||
|
) {
|
||||||
wsManager.send(sessionId, { type: 'prewarm_session' })
|
wsManager.send(sessionId, { type: 'prewarm_session' })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user