diff --git a/static/ui.js b/static/ui.js index 0c039d07d..ecd6fcfa8 100644 --- a/static/ui.js +++ b/static/ui.js @@ -13814,7 +13814,10 @@ function renderMessages(options){ const summary=m.provider_details_label||'Provider details'; bodyHtml += `
${esc(String(summary))}
${esc(String(m.provider_details))}
`; } - const recoveryHtml=(!isUser&&m._compressionRecovery) ? _compressionRecoveryHtml(m._compressionRecovery, (S.session&&S.session.session_id)||'') : ''; + const recoveryPayload=(!isUser&&m._compressionRecovery) + ? m._compressionRecovery + : (!isUser&&isLastAssistant&&isTurnFinalAssistant&&typeof _activeCompressionRecoveryPayload==='function' ? _activeCompressionRecoveryPayload() : null); + const recoveryHtml=recoveryPayload ? _compressionRecoveryHtml(recoveryPayload, (S.session&&S.session.session_id)||'') : ''; if(recoveryHtml) bodyHtml += recoveryHtml; const statusHtml = (!isUser&&m._statusCard) ? _statusCardHtml(m._statusCard) : ''; const isEditableUser=isUser&&rawIdx===lastUserRawIdx; diff --git a/tests/test_compression_recovery_action.py b/tests/test_compression_recovery_action.py index 89efb32fb..45cc26773 100644 --- a/tests/test_compression_recovery_action.py +++ b/tests/test_compression_recovery_action.py @@ -431,6 +431,19 @@ def test_compression_recovery_ui_wires_card_action_and_send_intercept(): assert "_compressionRecovery:recovery||undefined" in messages +def test_compression_recovery_ui_renders_session_level_recovery_on_terminal_message(): + ui = (ROOT / "static/ui.js").read_text(encoding="utf-8") + start = ui.index("const recoveryPayload=(!isUser&&m._compressionRecovery)") + end = ui.index("const statusHtml", start) + body = ui[start:end] + + assert "? m._compressionRecovery" in body + assert "_activeCompressionRecoveryPayload()" in body + assert "isLastAssistant&&isTurnFinalAssistant" in body + assert "typeof _activeCompressionRecoveryPayload==='function'" in body + assert body.index("m._compressionRecovery") < body.index("_activeCompressionRecoveryPayload()") + + def test_compression_recovery_ui_skips_message_fallback_after_session_clear(): ui = (ROOT / "static/ui.js").read_text(encoding="utf-8") start = ui.index("function _activeCompressionRecoveryPayload(){")