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

@@ -383,6 +383,7 @@ pub(crate) struct ChatWidget {
// Previous status header to restore after a transient stream retry.
retry_status_header: Option<String>,
conversation_id: Option<ThreadId>,
forked_from: Option<ThreadId>,
frame_requester: FrameRequester,
// Whether to include the initial welcome banner on session configured
show_welcome_banner: bool,
@@ -522,6 +523,7 @@ impl ChatWidget {
.set_history_metadata(event.history_log_id, event.history_entry_count);
self.set_skills(None);
self.conversation_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();
@@ -1502,6 +1504,7 @@ impl ChatWidget {
current_status_header: String::from("Working"),
retry_status_header: None,
conversation_id: None,
forked_from: None,
queued_user_messages: VecDeque::new(),
show_welcome_banner: is_first_run,
suppress_session_configured_redraw: false,
@@ -1598,6 +1601,7 @@ impl ChatWidget {
current_status_header: String::from("Working"),
retry_status_header: None,
conversation_id: None,
forked_from: None,
queued_user_messages: VecDeque::new(),
show_welcome_banner: false,
suppress_session_configured_redraw: true,
@@ -2400,6 +2404,7 @@ impl ChatWidget {
token_info,
total_usage,
&self.conversation_id,
self.forked_from,
self.rate_limit_snapshot.as_ref(),
self.plan_type,
Local::now(),