emrg: GUI renderer per-session chat state isolation — P3 slice 0 (GUI multi-session rant P3) - #630
Conversation
… multi-session rant P3)
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle 20260810-165036
Verified locally on the PR head: GUI suite 131/131 (36 renderer smoke — per-sid delta groups isolated, done clears only its session, clearTyping(sid) scoped, registerContainer routing + default fallback; all 127 pre-existing tests green = zero regression), 680 pytest green (doc-count guard 131 breakdown), node --check clean. Design matches rant P3: renderer state 改造 first step — per-sid state maps + container routing groundwork, forward-compatible with #629's sid-tagged events (no sid → legacy behavior identical).
…renderer smoke) after #629 merge
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle 20260810-165615
Rebased on master (was CONFLICTING after #629's doc-count bump): resolved Agent.md/README.md/README.cn.md to true counts 146 = 43 daemon_client + 17 conn-manager + 36 renderer smoke + 22 + 15 + 7 + 3 + 3 (merged HEAD d3cd786).
Verified locally on the resolved head: GUI suite 146/146 (36 renderer smoke: per-sid delta group isolation — same request_id in two sessions stays separate; done clears only its session's group, other session's same-rid group + residual delta preserved; clearTyping(sid) scoped; registerContainer routes to the registered container with default-container fallback after unregister), 680 pytest green, doc-count guard passes, node --check clean.
Code review: sessionState Map with sid=null legacy bucket is backward-compatible (no sid → identical behavior); containers groundwork is clean for P4 openSessions; disconnected handler now scopes group-map clear + running-tool failure marking per sid. No overlap with #629's files, design matches the rant P3 (renderer-side foundation for per-session event routing).
|
Tested branch `feature/gui-p3-chat-session-isolation` (e69f6b3) locally — full suite green: |
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle 20260810-170611
Re-verified on head d3cd786 (doc-count merge commit, 146): GUI suite 146/146 (36 renderer smoke — per-sid delta group isolation with same request_id across two sessions, done clears only its session's group while other session's same-rid group + residual delta preserved, clearTyping(sid) scoped, registerContainer routing with default-container fallback after unregister; all pre-existing tests green = zero regression), 680 pytest green (doc-count guard reads 43 dc + 17 cm + 36 renderer + 22 + 15 + 7 + 3 + 3), node --check clean. PR CI 31372473987 SUCCESS. Matches rant P3: renderer per-session state isolation + container routing groundwork, forward-compatible with #629's sid-tagged events.
|
Post-merge verification on master 2f46e81: |
…lice 0 entries (#631) Co-authored-by: EMRG Evolution <emrg@argszero.dev>
Summary
First slice of P3 (multi-container chat views) from the GUI multi-session rant (2026-08-10T15:07:19): per-session chat state isolation in the renderer. This is the renderer-side foundation for per-session event routing — events carrying
sid(added by #629's main-process event bridge) now scope their group/tool/typing state per session. Fully backward-compatible: nosid→ identical legacy behavior.Changes
renderer/js/chat.js
sessionStateMap (sid → {groupNodes, toolRows, doneRids});sid=null= legacy single-session bucket (all existing callers unaffected)sid:handleDelta(chunks, sid),handleDone(data, sid),handleToolStart(data, sid),handleToolEnd(data, sid),clearTyping(sid),clear(sid),addSystemMessage(text, sid),addUserMessage(text, sid),createAssistantNode(isOwn, sid)registerContainer(sid, el)/unregisterContainer(sid)/chatContainer(sid)— registered container receives that session's nodes; unregistered/undefined sid falls back to default#chat-viewgroupNodesFor(sid)/toolRowsFor(sid)accessors; legacygroupNodes/toolRowsgetters delegate to the null bucketrenderer/js/app.js
handleEventpassesevt.sidthrough to Chat calls (delta/done/tool_started/tool_finished/cancelled/error/disconnected)Tests