feat: show forked from session id in /status (#9330)

Summary:
- Add forked_from to SessionMeta/SessionConfiguredEvent and persist it
for forked sessions.
- Surface forked_from in /status for tui + tui2 and add snapshots.
This commit is contained in:
Anton Panasenko
2026-01-16 13:41:46 -08:00
committed by GitHub
parent f1653dd4d3
commit c26fe64539
19 changed files with 267 additions and 0 deletions

View File

@@ -440,6 +440,7 @@ pub(crate) struct ChatWidget {
// Previous status header to restore after a transient stream retry.
retry_status_header: Option<String>,
thread_id: Option<ThreadId>,
forked_from: Option<ThreadId>,
frame_requester: FrameRequester,
// Whether to include the initial welcome banner on session configured
show_welcome_banner: bool,
@@ -600,6 +601,7 @@ impl ChatWidget {
.set_history_metadata(event.history_log_id, event.history_entry_count);
self.set_skills(None);
self.thread_id = Some(event.session_id);
self.forked_from = event.forked_from_id;
self.current_rollout_path = Some(event.rollout_path.clone());
let initial_messages = event.initial_messages.clone();
let model_for_header = event.model.clone();
@@ -1699,6 +1701,7 @@ impl ChatWidget {
current_status_header: String::from("Working"),
retry_status_header: None,
thread_id: None,
forked_from: None,
queued_user_messages: VecDeque::new(),
show_welcome_banner: is_first_run,
suppress_session_configured_redraw: false,
@@ -1797,6 +1800,7 @@ impl ChatWidget {
current_status_header: String::from("Working"),
retry_status_header: None,
thread_id: None,
forked_from: None,
queued_user_messages: VecDeque::new(),
show_welcome_banner: false,
suppress_session_configured_redraw: true,
@@ -2635,6 +2639,7 @@ impl ChatWidget {
token_info,
total_usage,
&self.thread_id,
self.forked_from,
self.rate_limit_snapshot.as_ref(),
self.plan_type,
Local::now(),