From dcfc45b45d198434db5057c991e72c089b42c705 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Mon, 15 Jun 2026 02:13:30 +0300 Subject: fix: preserve claude session rotations refs #620 --- src/agent_resume.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/agent_resume.rs') diff --git a/src/agent_resume.rs b/src/agent_resume.rs index 93bc4c2e..cea4a641 100644 --- a/src/agent_resume.rs +++ b/src/agent_resume.rs @@ -69,6 +69,13 @@ pub fn session_ref_from_report( agent_session_id.and_then(AgentSessionRef::id) } +pub fn normalize_claude_session_start_source(value: Option) -> Option { + match value.as_deref().map(str::trim) { + Some(source @ ("startup" | "resume" | "clear" | "compact")) => Some(source.to_string()), + _ => None, + } +} + pub fn is_reserved_native_state_source(source: &str, agent: &str) -> bool { matches!( (source, agent), @@ -425,6 +432,35 @@ mod tests { assert_eq!(session_ref.value, "qoder-id"); } + #[test] + fn normalize_claude_session_start_source_allows_known_claude_values() { + assert_eq!( + normalize_claude_session_start_source(Some("startup".into())), + Some("startup".into()) + ); + assert_eq!( + normalize_claude_session_start_source(Some("resume".into())), + Some("resume".into()) + ); + assert_eq!( + normalize_claude_session_start_source(Some("clear".into())), + Some("clear".into()) + ); + assert_eq!( + normalize_claude_session_start_source(Some("compact".into())), + Some("compact".into()) + ); + assert_eq!( + normalize_claude_session_start_source(Some(" resume ".into())), + Some("resume".into()) + ); + assert_eq!( + normalize_claude_session_start_source(Some("other".into())), + None + ); + assert_eq!(normalize_claude_session_start_source(None), None); + } + #[test] fn ids_are_data_not_shell_text() { let id = "abc; rm -rf /"; -- cgit v1.2.3