fix: preserve compression recovery child markers in sidecar rebuild

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Frank Song 2026-07-05 06:45:50 +08:00
parent 8717dcc03b
commit 7425dc3549
3 changed files with 31 additions and 0 deletions

View file

@ -486,6 +486,8 @@ def _state_db_row_to_sidecar(row: dict) -> dict:
'last_prompt_tokens': None,
'compression_recovery': {},
'recommended_recovery_action': 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,
'gateway_routing_history': [],
'llm_title_generated': False,

View file

@ -53,6 +53,8 @@ _METADATA_FIELDS = frozenset(
"last_prompt_tokens",
"compression_recovery",
"recommended_recovery_action",
"compression_recovery_source_session_id",
"compression_recovery_action",
"truncation_watermark",
"truncation_boundary",
"gateway_routing",

View file

@ -9,6 +9,8 @@ from api.compression_recovery import (
stamp_compression_exhausted_recovery,
)
from api.models import Session
from api.session_recovery import _state_db_row_to_sidecar
from api.webui_session_db import WebUIJsonSessionDB
ROOT = Path(__file__).resolve().parents[1]
@ -285,6 +287,31 @@ def test_recovery_metadata_is_persisted_and_exposed_in_compact_session():
assert compact["compression_recovery"]["recommended_action"] == "start_focused_continuation"
def test_recovery_child_markers_round_trip_through_state_db_sidecar_rebuild(tmp_path):
db = WebUIJsonSessionDB(tmp_path)
db.write_session(
{
"session_id": "recoverychild1",
"title": "Focused continuation",
"model": "gpt-4o",
"started_at": 1700000000,
"messages": [],
"parent_session_id": "recoverysrc3",
"compression_recovery_source_session_id": "recoverysrc3",
"compression_recovery_action": "start_focused_continuation",
}
)
row = db.list_sessions()[0]
assert row["compression_recovery_source_session_id"] == "recoverysrc3"
assert row["compression_recovery_action"] == "start_focused_continuation"
sidecar = _state_db_row_to_sidecar({"id": "recoverychild1", **row, "messages": []})
assert sidecar["compression_recovery_source_session_id"] == "recoverysrc3"
assert sidecar["compression_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")