navi-code TUI: render schedule_recall lifecycle (recall_update)
...
The scheduler/orchestrator already push RecallUpdate (wire type
"recall_update") for the schedule_recall lifecycle, but the TUI had no
mapping or renderer — every event fell to the unknown-event catch-all and
rendered as a raw dict dump. Wire it into a dedicated card.
- chat_model: add a "recall" ChatItem kind and a recall_update branch
(before the catch-all) that keeps the wire fields in meta.
- chat_panel _item_msg: reconstruct {"type": "recall_update", **meta}
for a recall item so the registry sees it.
- renderers/recall.py: new RecallRenderer — a compact, color-coded card
per action (⏰ scheduled/info, ▶ fired·resuming/accent, ✕ cancelled/error,
↻ skipped/warning, ↻ rescheduled/info) showing call_type and a trimmed
trigger_at. Registered before the generic renderers.
- tests: 10 tests covering accepts, each action's title/border color,
trigger formatting, empty body, chat_model mapping, and _item_msg
round-trip.
MVP only — the self-instruction (additional_context_message) is not on the
wire, so it remains visible in the schedule_recall tool-call card above;
extending RecallUpdate.to_wire to carry it is a follow-up.
Co-Authored-By: Claude <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
11 hours ago