fix: preserve compression recovery source metadata

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Frank SongandPaperclip committed 2026-07-05 07:51:26 +08:00
1 parent 81d5e897e9
commit 6a35d9c674
2 files changed
+32 -2

No files matched your search

+5 -2
View File
@@ -453,6 +453,9 @@ def _state_db_row_to_sidecar(row: dict) -> dict:
messages = row.get('messages') if isinstance(row.get('messages'), list) else []
last_ts = messages[-1].get('timestamp') if messages and isinstance(messages[-1], dict) else started_at
workspace_value = row.get('workspace') or ''
compression_recovery = row.get('compression_recovery')
if not isinstance(compression_recovery, dict):
compression_recovery = {}
return {
'session_id': row.get('id'),
'title': row.get('title') or 'Recovered WebUI Session',
@@ -484,8 +487,8 @@ def _state_db_row_to_sidecar(row: dict) -> dict:
'context_length': None,
'threshold_tokens': None,
'last_prompt_tokens': None,
'compression_recovery': {},
'recommended_recovery_action': None,
'compression_recovery': compression_recovery,
'recommended_recovery_action': row.get('recommended_recovery_action') or None,
'compression_recovery_source_session_id': row.get('compression_recovery_source_session_id') or None,
'compression_recovery_action': row.get('compression_recovery_action') or None,
'gateway_routing': None,
+27
View File
@@ -390,6 +390,33 @@ def test_recovery_child_markers_round_trip_through_state_db_sidecar_rebuild(tmp_
assert sidecar["compression_recovery_action"] == "start_focused_continuation"
def test_recovery_source_metadata_round_trips_through_state_db_sidecar_rebuild(tmp_path):
recovery = {
"type": "compression_recovery_required",
"terminal_state": "compression_exhausted",
"recommended_action": "start_focused_continuation",
"source_session_id": "recoverysrc4",
}
db = WebUIJsonSessionDB(tmp_path)
db.write_session(
{
"session_id": "recoverysrc4",
"title": "Exhausted source",
"model": "gpt-4o",
"started_at": 1700000000,
"messages": [{"role": "user", "content": "long task"}],
"compression_recovery": recovery,
"recommended_recovery_action": "start_focused_continuation",
}
)
row = db.list_sessions()[0]
sidecar = _state_db_row_to_sidecar({"id": "recoverysrc4", **row, "messages": []})
assert sidecar["compression_recovery"] == recovery
assert sidecar["recommended_recovery_action"] == "start_focused_continuation"
def test_compression_recovery_ui_wires_card_action_and_send_intercept():
ui = (ROOT / "static/ui.js").read_text(encoding="utf-8")
messages = (ROOT / "static/messages.js").read_text(encoding="utf-8")