From 8321caa90722829c98fcb46adf752bcbe76b426c Mon Sep 17 00:00:00 2001 From: Dario Yoshi Date: Sat, 16 May 2026 20:25:55 -0500 Subject: [PATCH] fix: use UTF-8 aware truncation in agent handlers to prevent panics --- src/cortex-cli/src/agent_cmd/handlers/generate.rs | 6 +++--- src/cortex-cli/src/agent_cmd/handlers/list.rs | 4 ++-- src/cortex-cli/src/agent_cmd/handlers/show.rs | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/cortex-cli/src/agent_cmd/handlers/generate.rs b/src/cortex-cli/src/agent_cmd/handlers/generate.rs index b3bbabd60..af23b9d66 100644 --- a/src/cortex-cli/src/agent_cmd/handlers/generate.rs +++ b/src/cortex-cli/src/agent_cmd/handlers/generate.rs @@ -117,11 +117,11 @@ pub async fn run_generate(args: CreateArgs) -> Result<()> { println!(" {}", "-".repeat(36)); // Show truncated prompt - let prompt_preview = if generated.system_prompt.len() > 500 { + let prompt_preview = if generated.system_prompt.chars().count() > 500 { format!( "{}...\n\n (truncated, {} chars total)", - &generated.system_prompt[..500], - generated.system_prompt.len() + generated.system_prompt.chars().take(500).collect::(), + generated.system_prompt.chars().count() ) } else { generated.system_prompt.clone() diff --git a/src/cortex-cli/src/agent_cmd/handlers/list.rs b/src/cortex-cli/src/agent_cmd/handlers/list.rs index 7a27eec4c..46a8e7ffd 100644 --- a/src/cortex-cli/src/agent_cmd/handlers/list.rs +++ b/src/cortex-cli/src/agent_cmd/handlers/list.rs @@ -98,8 +98,8 @@ pub async fn run_list(args: ListArgs) -> Result<()> { .description .as_ref() .map(|d| { - if d.len() > 38 { - format!("{}...", &d[..35]) + if d.chars().count() > 38 { + format!("{}...", d.chars().take(35).collect::()) } else { d.clone() } diff --git a/src/cortex-cli/src/agent_cmd/handlers/show.rs b/src/cortex-cli/src/agent_cmd/handlers/show.rs index e77c25490..d572a8941 100644 --- a/src/cortex-cli/src/agent_cmd/handlers/show.rs +++ b/src/cortex-cli/src/agent_cmd/handlers/show.rs @@ -136,11 +136,11 @@ pub async fn run_show(args: ShowArgs) -> Result<()> { if let Some(ref prompt) = agent.prompt { println!("\nSystem Prompt:"); println!("{}", "-".repeat(40)); - let preview = if prompt.len() > 500 { + let preview = if prompt.chars().count() > 500 { format!( "{}...\n\n(truncated, {} chars total)", - &prompt[..500], - prompt.len() + prompt.chars().take(500).collect::(), + prompt.chars().count() ) } else { prompt.clone()