diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-15 02:13:30 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-15 02:13:30 +0300 |
| commit | dcfc45b45d198434db5057c991e72c089b42c705 (patch) | |
| tree | 4cbdbc253bb5dc12c734a7ed1cbf82fd444d3cd2 /src/agent_resume.rs | |
| parent | c91348e68b9e438159ffecc3e26bc6f971e0fa2a (diff) | |
fix: preserve claude session rotations
refs #620
Diffstat (limited to 'src/agent_resume.rs')
| -rw-r--r-- | src/agent_resume.rs | 36 |
1 files changed, 36 insertions, 0 deletions
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<String>) -> Option<String> { + 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), @@ -426,6 +433,35 @@ mod tests { } #[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 /"; let codex_plan = plan("herdr:codex", "codex", &AgentSessionRef::id(id).unwrap()).unwrap(); |
