fix(electrobun): version counter bump() forces Svelte re-render on session mutations (messages now display)
This commit is contained in:
parent
3d25ab675f
commit
41c3bc8e60
1 changed files with 11 additions and 1 deletions
|
|
@ -115,6 +115,11 @@ const projectSessionMap = new Map<string, string>();
|
|||
// Map sessionId -> reactive session state
|
||||
let sessions = $state<Record<string, AgentSession>>({});
|
||||
|
||||
// Version counter — bump on every mutation to force Svelte re-renders
|
||||
// (cross-module $state reads don't auto-track in Svelte 5)
|
||||
let _v = $state(0);
|
||||
function bump() { _v++; }
|
||||
|
||||
// Grace period timers for cleanup after done/error
|
||||
const cleanupTimers = new Map<string, ReturnType<typeof setTimeout>>();
|
||||
|
||||
|
|
@ -235,6 +240,7 @@ function ensureListeners() {
|
|||
msg.seqId = nextSeqId(payload.sessionId);
|
||||
}
|
||||
session.messages = [...session.messages, ...converted];
|
||||
bump(); // Force re-render
|
||||
persistMessages(session);
|
||||
// Reset stall timer on activity
|
||||
resetStallTimer(payload.sessionId, session.projectId);
|
||||
|
|
@ -262,6 +268,7 @@ function ensureListeners() {
|
|||
|
||||
session.status = normalizeStatus(payload.status);
|
||||
if (payload.error) session.error = payload.error;
|
||||
bump(); // Force re-render
|
||||
|
||||
// Fix #14: Wire health store — update project status
|
||||
setProjectStatus(session.projectId, session.status === 'done' ? 'done' : session.status === 'error' ? 'error' : session.status === 'running' ? 'running' : 'idle');
|
||||
|
|
@ -306,6 +313,7 @@ function ensureListeners() {
|
|||
session.costUsd = payload.costUsd;
|
||||
session.inputTokens = payload.inputTokens;
|
||||
session.outputTokens = payload.outputTokens;
|
||||
bump(); // Force re-render
|
||||
// Fix #14: Wire health store — record token/cost snapshot
|
||||
recordTokenSnapshot(session.projectId, payload.inputTokens + payload.outputTokens, payload.costUsd);
|
||||
});
|
||||
|
|
@ -545,6 +553,7 @@ async function _startAgentInner(
|
|||
};
|
||||
|
||||
projectSessionMap.set(projectId, sessionId);
|
||||
bump(); // Force re-render — new session created
|
||||
resetStallTimer(sessionId, projectId);
|
||||
|
||||
const result = await appRpc.request['agent.start']({
|
||||
|
|
@ -609,8 +618,9 @@ export async function sendPrompt(projectId: string, prompt: string): Promise<{ o
|
|||
return appRpc.request['agent.prompt']({ sessionId, prompt });
|
||||
}
|
||||
|
||||
/** Get the current session for a project (reactive). */
|
||||
/** Get the current session for a project (reactive via version counter). */
|
||||
export function getSession(projectId: string): AgentSession | undefined {
|
||||
void _v; // Read version counter to subscribe Svelte's reactivity
|
||||
const sessionId = projectSessionMap.get(projectId);
|
||||
if (!sessionId) return undefined;
|
||||
return sessions[sessionId];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue