diff --git a/static/sessions.js b/static/sessions.js index 01015ef0..9f653f1b 100644 --- a/static/sessions.js +++ b/static/sessions.js @@ -4357,8 +4357,21 @@ let _lastSessionListRenderSig = null; function _sessionListRenderSignature(){ try{ const search=($('sessionSearch')&&$('sessionSearch').value)||''; + const sessionKeys = [ + 'session_id','id','display_name','title','created_at','started_at', + 'updated_at','last_message_at','last_activity','message_count', + 'actual_message_count','is_streaming','streaming','status','pinned', + 'archived','project_id','source','session_source','generation', + '_lineage_root_id','_lineage_tip_id','_compression_segment_count', + ]; + const sessionsSlim = Array.isArray(_allSessions) ? _allSessions.map(s => { + if(!s || typeof s !== 'object') return s; + const out={}; + sessionKeys.forEach(k=>{ if(Object.prototype.hasOwnProperty.call(s,k)) out[k]=s[k]; }); + return out; + }) : _allSessions; return JSON.stringify([ - _allSessions, + sessionsSlim, _allProjects, _activeSessionIdForSidebar(), search, diff --git a/tests/test_webui_external_refresh_frontend.py b/tests/test_webui_external_refresh_frontend.py index 4d4ff68e..17022f6e 100644 --- a/tests/test_webui_external_refresh_frontend.py +++ b/tests/test_webui_external_refresh_frontend.py @@ -122,6 +122,19 @@ def test_session_event_profile_filter_tolerates_default_root_aliases(): assert "S.activeProfileIsDefault = !!data.is_default;" in PANELS_JS +def test_session_list_render_signature_ignores_non_display_session_fields(): + start = SESSIONS_JS.find("function _sessionListRenderSignature()") + assert start != -1 + block = SESSIONS_JS[start:start + 1500] + assert "const sessionKeys = [" in block + assert "const sessionsSlim = Array.isArray(_allSessions)" in block + assert "sessionKeys.forEach" in block + assert "_allSessions," not in block + assert "message_count" in block + assert "last_message_at" in block + assert "_compression_segment_count" in block + + def test_pwa_pull_to_refresh_refreshes_session_list_not_page_when_available(): assert "window.refreshSessionList('pull', {force:true, refreshActive:true})" in UI_JS assert "Promise.resolve(window.refreshSessionList('pull', {force:true, refreshActive:true})).catch(()=>{}).finally(_ptrReset)" in UI_JS