fix(electrobun): preserve conversation history when resuming session (don't clearSession on resume)

This commit is contained in:
Hibryda 2026-03-27 03:59:22 +01:00
parent 78d77080cc
commit 1afbe66fd7

View file

@ -546,9 +546,6 @@ async function _startAgentInner(
prompt: string, prompt: string,
options: StartOptions, options: StartOptions,
): Promise<{ ok: boolean; error?: string }> { ): Promise<{ ok: boolean; error?: string }> {
// If there's an existing done/error session for this project, clear it first
clearSession(projectId);
// Check for pending resume (user selected a session in the picker) // Check for pending resume (user selected a session in the picker)
const pending = pendingResumes.get(projectId); const pending = pendingResumes.get(projectId);
if (pending) { if (pending) {
@ -559,6 +556,13 @@ async function _startAgentInner(
} }
} }
const isResume = options.resumeMode === 'continue' || options.resumeMode === 'resume';
// If resuming, keep existing session messages; if new, clear old session
if (!isResume) {
clearSession(projectId);
}
const sessionId = `${projectId}-${Date.now()}`; const sessionId = `${projectId}-${Date.now()}`;
// Read settings defaults if not explicitly provided (Fix #5) // Read settings defaults if not explicitly provided (Fix #5)
@ -587,25 +591,38 @@ async function _startAgentInner(
} }
} catch { /* use provided or defaults */ } } catch { /* use provided or defaults */ }
// Create reactive session state // Create reactive session state — carry forward messages if resuming
const existingSessionId = projectSessionMap.get(projectId);
const existingMessages = (isResume && existingSessionId && sessions[existingSessionId])
? [...sessions[existingSessionId].messages]
: [];
// Add the new user prompt to messages
const newUserMsg = {
id: `${sessionId}-user-0`,
seqId: nextSeqId(sessionId),
role: 'user' as const,
content: prompt,
timestamp: Date.now(),
};
sessions[sessionId] = { sessions[sessionId] = {
sessionId, sessionId,
projectId, projectId,
provider, provider,
status: 'running', status: 'running',
messages: [{ messages: [...existingMessages, newUserMsg],
id: `${sessionId}-user-0`,
seqId: nextSeqId(sessionId),
role: 'user',
content: prompt,
timestamp: Date.now(),
}],
costUsd: 0, costUsd: 0,
inputTokens: 0, inputTokens: 0,
outputTokens: 0, outputTokens: 0,
model: defaultModel ?? 'claude-opus-4-5', model: defaultModel ?? 'claude-opus-4-5',
}; };
// Clean up the old session entry if resuming (we moved messages to the new one)
if (isResume && existingSessionId && existingSessionId !== sessionId) {
delete sessions[existingSessionId];
}
projectSessionMap.set(projectId, sessionId); projectSessionMap.set(projectId, sessionId);
bump(); // Force re-render — new session created bump(); // Force re-render — new session created
resetStallTimer(sessionId, projectId); resetStallTimer(sessionId, projectId);