Stop the whole desktop UI re-rendering on every streaming update
I maintainer di solito rispondono entro 1 giorno
@GoDiao ci sta già lavorando.
Dal 22/10/2026.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Summary
During a streaming reply, most of the desktop UI re-renders on every store update. The cause is coarse state updates combined with wide subscriptions:
updateSessionIn(desktop/src/stores/chatStore.ts:612-620) creates a new session object on every change.- Many components subscribe to that whole object, or to the whole store.
So a single text flush, a thinking delta, or the per-second timer re-renders the sidebar, the composer, the message list and the page itself.
Where it happens
- Whole session object:
pages/ActiveSession.tsx:240components/chat/MessageList.tsx:1222components/chat/StreamingIndicator.tsx:39components/chat/ChatInput.tsx:129
- No selector at all, so they re-render on any change to any session:
components/chat/ChatInput.tsx:127PermissionDialog.tsx:128AskUserQuestion.tsx:64
- Sidebar: subscribes to every session (
components/layout/Sidebar.tsx:69) and rebuilds the running-session set each time (:188-197). So the 1,900-line sidebar re-renders on every delta of every session. - Thinking deltas are not batched: text and tool-input deltas go through a 50ms buffer, but thinking deltas update the store on each event (
chatStore.ts:1309-1328). Each one rebuilds the whole render model inMessageListand re-renders every tool group through a newtoolResultMap. - Elapsed timer: increments
elapsedSecondsin the session state every second (chatStore.ts:850), which re-renders all of the above for the whole turn.
Tasks
Open to contributors, as sub-issues (comment on one to claim it):
- #155 Batch thinking deltas like text deltas.
- #156 Compute the turn's elapsed time in its own component instead of the store.
- #157 Re-render the sidebar only when the set of running sessions changes.
Maintainer:
- Add fine-grained selectors for common fields, such as "is this session running" and "this session's messages", and move the composer, message list, page, permission dialog and question card onto them.
- Pass each tool group its own result instead of the whole
toolResultMap.
Done when
- Each PR shows a before/after measurement: render counts from React Profiler, or a Safari Web Inspector timeline of a streaming reply.
- No component stops updating when it should. Tests cover the fields each changed component relies on.
- Desktop tests and typecheck pass.
- Lingua principale
- TypeScript
- Stelle
- 490
- Fork
- 47
- Merge medio
- 10h 53m
- PR unite (30g)
- 81
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di GoDiao/dreamcoder
-
[good first issue] UX polish — friendlier copy for error toasts and empty statesForse già presa @iamcipherdev l’ha presa 14 giorni fa. Apertaarea:i18n area:ux difficulty:1 good first issue mentor-available
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
GoDiao/dreamcoder#9 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Add more provider presets (Groq / OpenRouter / SiliconFlow / etc.)Forse di nuovo libera @01iamysf l’ha presa 21 giorni fa e non c’è nessuna pull request aperta. Apertaarea:desktop area:provider difficulty:1 good first issue mentor-available
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
GoDiao/dreamcoder#6 · 6 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
GoDiao/dreamcoder#209 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
GoDiao/dreamcoder#208 ·
I maintainer di solito rispondono entro 1 giorno
-
Anthropic-format requests lose max_tokens when sent to openai_chat/openai_responses providersAperta
Difficoltà 4/5 1-2 giorni Idoneità per principianti 48/100
GoDiao/dreamcoder#204 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di GoDiao/dreamcoder
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
components-web-app/docs#307 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
localstack/localstack-mcp-server#112 ·
I maintainer di solito rispondono entro 1 giorno
-
area:frontend kind:bug priority:p1 ready
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno
-
bug ready-for-agent
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
PhyberApex/kuroshiro#1687 ·
I maintainer di solito rispondono entro 1 giorno
-
Performance (Web Vitals) collector: LCP/FCP from background tabs are not discarded, inflating p75Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
umami-software/umami#4720 ·
I maintainer di solito rispondono entro 3 giorni