aboutsummaryrefslogtreecommitdiff
path: root/src/agent_resume.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-15 02:13:30 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-15 02:13:30 +0300
commitdcfc45b45d198434db5057c991e72c089b42c705 (patch)
tree4cbdbc253bb5dc12c734a7ed1cbf82fd444d3cd2 /src/agent_resume.rs
parentc91348e68b9e438159ffecc3e26bc6f971e0fa2a (diff)
fix: preserve claude session rotations
refs #620
Diffstat (limited to 'src/agent_resume.rs')
-rw-r--r--src/agent_resume.rs36
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();