From 91f9bb3a0299f02f458131590843602b0130f7cb Mon Sep 17 00:00:00 2001 From: macworkers Date: Mon, 4 May 2026 15:57:04 -0700 Subject: [PATCH] fix(fork): optimize truncate_id to avoid unnecessary allocation (#600) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implemented using `deepseek exec --model deepseek-v4-flash`. 🐋 --- crates/tui/src/commands/session.rs | 4 ++-- crates/tui/src/session_manager.rs | 10 ++++++++-- crates/tui/src/tui/session_picker.rs | 4 ++-- crates/tui/src/tui/ui.rs | 4 ++-- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/crates/tui/src/commands/session.rs b/crates/tui/src/commands/session.rs index 5b495f97..a9a6e6b7 100644 --- a/crates/tui/src/commands/session.rs +++ b/crates/tui/src/commands/session.rs @@ -46,7 +46,7 @@ pub fn save(app: &mut App, path: Option<&str>) -> CommandResult { CommandResult::message(format!( "Session saved to {} (ID: {})", save_path.display(), - &session.metadata.id[..8] + crate::session_manager::truncate_id(&session.metadata.id) )) } Err(e) => CommandResult::error(format!("Failed to save session: {e}")), @@ -109,7 +109,7 @@ pub fn load(app: &mut App, path: Option<&str>) -> CommandResult { format!( "Session loaded from {} (ID: {}, {} messages)", load_path.display(), - &session.metadata.id[..8], + crate::session_manager::truncate_id(&session.metadata.id), session.metadata.message_count ), crate::tui::app::AppAction::SyncSession { diff --git a/crates/tui/src/session_manager.rs b/crates/tui/src/session_manager.rs index ae68339d..6dc602cd 100644 --- a/crates/tui/src/session_manager.rs +++ b/crates/tui/src/session_manager.rs @@ -711,6 +711,12 @@ fn system_prompt_to_string(system_prompt: Option<&SystemPrompt>) -> Option &str { + id.get(..8).unwrap_or(id) +} + /// Truncate a string to create a title (character-safe for UTF-8) fn truncate_title(s: &str, max_len: usize) -> String { let s = s.trim(); @@ -732,7 +738,7 @@ pub fn format_session_line(meta: &SessionMetadata) -> String { format!( "{} | {} | {} msgs | {}", - &meta.id[..8], + truncate_id(&meta.id), truncated_title, meta.message_count, age @@ -827,7 +833,7 @@ mod tests { let messages = vec![make_test_message("user", "Test session")]; let session = create_saved_session(&messages, "test-model", tmp.path(), 100, None); - let prefix = session.metadata.id[..8].to_string(); + let prefix = truncate_id(&session.metadata.id).to_string(); manager.save_session(&session).expect("save"); let loaded = manager.load_session_by_prefix(&prefix).expect("load"); diff --git a/crates/tui/src/tui/session_picker.rs b/crates/tui/src/tui/session_picker.rs index 7fff607c..a2a9ded7 100644 --- a/crates/tui/src/tui/session_picker.rs +++ b/crates/tui/src/tui/session_picker.rs @@ -196,7 +196,7 @@ impl SessionPickerView { self.refresh_preview(); self.status = Some(format!( "Deleted session {}", - &session.id[..8.min(session.id.len())] + crate::session_manager::truncate_id(&session.id) )); Some(ViewEvent::SessionDeleted { session_id: session.id, @@ -476,7 +476,7 @@ fn format_session_line(session: &SessionMetadata) -> String { .to_ascii_lowercase(); format!( "{} | {} | {} msgs | {} | {}", - &session.id[..8.min(session.id.len())], + crate::session_manager::truncate_id(&session.id), title, session.message_count, mode, diff --git a/crates/tui/src/tui/ui.rs b/crates/tui/src/tui/ui.rs index 62bc845f..ea6162ba 100644 --- a/crates/tui/src/tui/ui.rs +++ b/crates/tui/src/tui/ui.rs @@ -282,7 +282,7 @@ pub async fn run_tui(config: &Config, options: TuiOptions) -> Result<()> { content: format!( "Resumed session: {} ({})", saved.metadata.title, - &saved.metadata.id[..8.min(saved.metadata.id.len())] + crate::session_manager::truncate_id(&saved.metadata.id), ), }); @@ -292,7 +292,7 @@ pub async fn run_tui(config: &Config, options: TuiOptions) -> Result<()> { app.mark_history_updated(); app.status_message = Some(format!( "Resumed session: {}", - &saved.metadata.id[..8.min(saved.metadata.id.len())] + crate::session_manager::truncate_id(&saved.metadata.id) )); } Ok(None) => {