diff --git a/src/agent/routine_engine.rs b/src/agent/routine_engine.rs index a973437a..b4aa5e0c 100644 --- a/src/agent/routine_engine.rs +++ b/src/agent/routine_engine.rs @@ -1150,9 +1150,11 @@ pub fn spawn_cron_ticker( interval: Duration, ) -> tokio::task::JoinHandle<()> { tokio::spawn(async move { + // Run one check immediately so routines due at startup don't wait + // an extra full polling interval. + engine.check_cron_triggers().await; + let mut ticker = tokio::time::interval(interval); - // Skip immediate first tick - ticker.tick().await; loop { ticker.tick().await; @@ -1358,4 +1360,11 @@ mod tests { assert_eq!(finish_reason_length, crate::llm::FinishReason::Length); assert_eq!(finish_reason_stop, crate::llm::FinishReason::Stop); } + + #[test] + fn test_truncate_adds_ellipsis_when_over_limit() { + let input = "abcdefghijk"; + let out = super::truncate(input, 5); + assert_eq!(out, "abcde..."); + } } diff --git a/src/tools/builtin/memory.rs b/src/tools/builtin/memory.rs index de04575b..c8f5178f 100644 --- a/src/tools/builtin/memory.rs +++ b/src/tools/builtin/memory.rs @@ -636,3 +636,23 @@ mod tests { assert_eq!(schema["properties"]["depth"]["default"], 1); } } + +#[cfg(test)] +mod path_routing_tests { + use super::looks_like_filesystem_path; + + #[test] + fn detects_filesystem_paths() { + assert!(looks_like_filesystem_path("/Users/nige/file.md")); + assert!(looks_like_filesystem_path("C:\\Users\\nige\\file.md")); + assert!(looks_like_filesystem_path("D:/work/file.md")); + assert!(looks_like_filesystem_path("~/notes.md")); + } + + #[test] + fn allows_workspace_memory_paths() { + assert!(!looks_like_filesystem_path("MEMORY.md")); + assert!(!looks_like_filesystem_path("daily/2026-03-11.md")); + assert!(!looks_like_filesystem_path("projects/alpha/notes.md")); + } +}