From 04ea5093d4f40776d52846c6cd9414c9709286f0 Mon Sep 17 00:00:00 2001 From: Alix-007 Date: Fri, 13 Mar 2026 02:41:39 +0800 Subject: [PATCH 01/42] fix(config): log existing config as initialized --- src/config/schema.rs | 87 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/src/config/schema.rs b/src/config/schema.rs index b91716885..10c8966cc 100644 --- a/src/config/schema.rs +++ b/src/config/schema.rs @@ -4290,7 +4290,7 @@ impl Config { path = %config.config_path.display(), workspace = %config.workspace_dir.display(), source = resolution_source.as_str(), - initialized = false, + initialized = true, "Config loaded" ); Ok(config) @@ -5046,9 +5046,11 @@ async fn sync_directory(path: &Path) -> Result<()> { #[cfg(test)] mod tests { use super::*; + use std::io; #[cfg(unix)] use std::os::unix::fs::PermissionsExt; use std::path::PathBuf; + use std::sync::{Arc, Mutex as StdMutex}; use tempfile::TempDir; use tokio::sync::{Mutex, MutexGuard}; use tokio::test; @@ -5082,6 +5084,36 @@ mod tests { assert!(c.config_path.to_string_lossy().contains("config.toml")); } + #[derive(Clone, Default)] + struct SharedLogBuffer(Arc>>); + + struct SharedLogWriter(Arc>>); + + impl SharedLogBuffer { + fn captured(&self) -> String { + String::from_utf8(self.0.lock().unwrap().clone()).unwrap() + } + } + + impl<'a> tracing_subscriber::fmt::MakeWriter<'a> for SharedLogBuffer { + type Writer = SharedLogWriter; + + fn make_writer(&'a self) -> Self::Writer { + SharedLogWriter(self.0.clone()) + } + } + + impl io::Write for SharedLogWriter { + fn write(&mut self, buf: &[u8]) -> io::Result { + self.0.lock().unwrap().extend_from_slice(buf); + Ok(buf.len()) + } + + fn flush(&mut self) -> io::Result<()> { + Ok(()) + } + } + #[test] async fn config_dir_creation_error_mentions_openrc_and_path() { let msg = config_dir_creation_error(Path::new("/etc/zeroclaw")); @@ -7027,6 +7059,59 @@ default_model = "legacy-model" let _ = fs::remove_dir_all(temp_home).await; } + #[test] + async fn load_or_init_logs_existing_config_as_initialized() { + let _env_guard = env_override_lock().await; + let temp_home = + std::env::temp_dir().join(format!("zeroclaw_test_home_{}", uuid::Uuid::new_v4())); + let workspace_dir = temp_home.join("profile-a"); + let config_path = workspace_dir.join("config.toml"); + + fs::create_dir_all(&workspace_dir).await.unwrap(); + fs::write( + &config_path, + r#"default_temperature = 0.7 +default_model = "persisted-profile" +"#, + ) + .await + .unwrap(); + + let original_home = std::env::var("HOME").ok(); + std::env::set_var("HOME", &temp_home); + std::env::set_var("ZEROCLAW_WORKSPACE", &workspace_dir); + + let capture = SharedLogBuffer::default(); + let subscriber = tracing_subscriber::fmt() + .with_ansi(false) + .without_time() + .with_target(false) + .with_writer(capture.clone()) + .finish(); + let dispatch = tracing::Dispatch::new(subscriber); + let _guard = tracing::dispatcher::set_default(&dispatch); + + let config = Config::load_or_init().await.unwrap(); + + drop(_guard); + let logs = capture.captured(); + + assert_eq!(config.workspace_dir, workspace_dir.join("workspace")); + assert_eq!(config.config_path, config_path); + assert_eq!(config.default_model.as_deref(), Some("persisted-profile")); + assert!(logs.contains("Config loaded"), "{logs}"); + assert!(logs.contains("initialized=true"), "{logs}"); + assert!(!logs.contains("initialized=false"), "{logs}"); + + std::env::remove_var("ZEROCLAW_WORKSPACE"); + if let Some(home) = original_home { + std::env::set_var("HOME", home); + } else { + std::env::remove_var("HOME"); + } + let _ = fs::remove_dir_all(temp_home).await; + } + #[test] async fn load_or_init_uses_persisted_active_workspace_marker() { let _env_guard = env_override_lock().await; From f99497938004d128746af8b89fc63346a607edce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=BE=99=200668001470?= Date: Mon, 16 Mar 2026 09:13:18 +0800 Subject: [PATCH 02/42] fix(config): avoid clippy used_underscore_binding --- src/config/schema.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/config/schema.rs b/src/config/schema.rs index 10c8966cc..b04e5e444 100644 --- a/src/config/schema.rs +++ b/src/config/schema.rs @@ -7089,11 +7089,11 @@ default_model = "persisted-profile" .with_writer(capture.clone()) .finish(); let dispatch = tracing::Dispatch::new(subscriber); - let _guard = tracing::dispatcher::set_default(&dispatch); + let guard = tracing::dispatcher::set_default(&dispatch); let config = Config::load_or_init().await.unwrap(); - drop(_guard); + drop(guard); let logs = capture.captured(); assert_eq!(config.workspace_dir, workspace_dir.join("workspace")); From 2b30f060fe531949fb1e42de49a1aa9ff53c4826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=BE=99=200668001470?= Date: Mon, 16 Mar 2026 11:06:18 +0800 Subject: [PATCH 03/42] test(config): move initialized log regression away from merge hotspot --- src/config/schema.rs | 106 +++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/src/config/schema.rs b/src/config/schema.rs index b04e5e444..f5d0d082f 100644 --- a/src/config/schema.rs +++ b/src/config/schema.rs @@ -7059,59 +7059,6 @@ default_model = "legacy-model" let _ = fs::remove_dir_all(temp_home).await; } - #[test] - async fn load_or_init_logs_existing_config_as_initialized() { - let _env_guard = env_override_lock().await; - let temp_home = - std::env::temp_dir().join(format!("zeroclaw_test_home_{}", uuid::Uuid::new_v4())); - let workspace_dir = temp_home.join("profile-a"); - let config_path = workspace_dir.join("config.toml"); - - fs::create_dir_all(&workspace_dir).await.unwrap(); - fs::write( - &config_path, - r#"default_temperature = 0.7 -default_model = "persisted-profile" -"#, - ) - .await - .unwrap(); - - let original_home = std::env::var("HOME").ok(); - std::env::set_var("HOME", &temp_home); - std::env::set_var("ZEROCLAW_WORKSPACE", &workspace_dir); - - let capture = SharedLogBuffer::default(); - let subscriber = tracing_subscriber::fmt() - .with_ansi(false) - .without_time() - .with_target(false) - .with_writer(capture.clone()) - .finish(); - let dispatch = tracing::Dispatch::new(subscriber); - let guard = tracing::dispatcher::set_default(&dispatch); - - let config = Config::load_or_init().await.unwrap(); - - drop(guard); - let logs = capture.captured(); - - assert_eq!(config.workspace_dir, workspace_dir.join("workspace")); - assert_eq!(config.config_path, config_path); - assert_eq!(config.default_model.as_deref(), Some("persisted-profile")); - assert!(logs.contains("Config loaded"), "{logs}"); - assert!(logs.contains("initialized=true"), "{logs}"); - assert!(!logs.contains("initialized=false"), "{logs}"); - - std::env::remove_var("ZEROCLAW_WORKSPACE"); - if let Some(home) = original_home { - std::env::set_var("HOME", home); - } else { - std::env::remove_var("HOME"); - } - let _ = fs::remove_dir_all(temp_home).await; - } - #[test] async fn load_or_init_uses_persisted_active_workspace_marker() { let _env_guard = env_override_lock().await; @@ -7216,6 +7163,59 @@ default_model = "persisted-profile" let _ = fs::remove_dir_all(temp_home).await; } + #[test] + async fn load_or_init_logs_existing_config_as_initialized() { + let _env_guard = env_override_lock().await; + let temp_home = + std::env::temp_dir().join(format!("zeroclaw_test_home_{}", uuid::Uuid::new_v4())); + let workspace_dir = temp_home.join("profile-a"); + let config_path = workspace_dir.join("config.toml"); + + fs::create_dir_all(&workspace_dir).await.unwrap(); + fs::write( + &config_path, + r#"default_temperature = 0.7 +default_model = "persisted-profile" +"#, + ) + .await + .unwrap(); + + let original_home = std::env::var("HOME").ok(); + std::env::set_var("HOME", &temp_home); + std::env::set_var("ZEROCLAW_WORKSPACE", &workspace_dir); + + let capture = SharedLogBuffer::default(); + let subscriber = tracing_subscriber::fmt() + .with_ansi(false) + .without_time() + .with_target(false) + .with_writer(capture.clone()) + .finish(); + let dispatch = tracing::Dispatch::new(subscriber); + let guard = tracing::dispatcher::set_default(&dispatch); + + let config = Config::load_or_init().await.unwrap(); + + drop(guard); + let logs = capture.captured(); + + assert_eq!(config.workspace_dir, workspace_dir.join("workspace")); + assert_eq!(config.config_path, config_path); + assert_eq!(config.default_model.as_deref(), Some("persisted-profile")); + assert!(logs.contains("Config loaded"), "{logs}"); + assert!(logs.contains("initialized=true"), "{logs}"); + assert!(!logs.contains("initialized=false"), "{logs}"); + + std::env::remove_var("ZEROCLAW_WORKSPACE"); + if let Some(home) = original_home { + std::env::set_var("HOME", home); + } else { + std::env::remove_var("HOME"); + } + let _ = fs::remove_dir_all(temp_home).await; + } + #[test] async fn env_override_empty_values_ignored() { let _env_guard = env_override_lock().await; From 6211824f015d685079893dd46decbb6827b3b6f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=BE=99=200668001470?= Date: Mon, 16 Mar 2026 17:21:22 +0800 Subject: [PATCH 04/42] fix(security): block runtime config state edits --- src/security/policy.rs | 67 +++++++++++++++++++++++++++++++++++++++++ src/tools/file_edit.rs | 49 ++++++++++++++++++++++++++++++ src/tools/file_write.rs | 45 +++++++++++++++++++++++++++ 3 files changed, 161 insertions(+) diff --git a/src/security/policy.rs b/src/security/policy.rs index 72fe16bce..6ddae6f24 100644 --- a/src/security/policy.rs +++ b/src/security/policy.rs @@ -1173,6 +1173,44 @@ impl SecurityPolicy { false } + fn runtime_config_dir(&self) -> Option { + let parent = self.workspace_dir.parent()?; + Some( + parent + .canonicalize() + .unwrap_or_else(|_| parent.to_path_buf()), + ) + } + + pub fn is_runtime_config_path(&self, resolved: &Path) -> bool { + let Some(config_dir) = self.runtime_config_dir() else { + return false; + }; + if !resolved.starts_with(&config_dir) { + return false; + } + if resolved.parent() != Some(config_dir.as_path()) { + return false; + } + + let Some(file_name) = resolved.file_name().and_then(|value| value.to_str()) else { + return false; + }; + + file_name == "config.toml" + || file_name == "config.toml.bak" + || file_name == "active_workspace.toml" + || file_name.starts_with(".config.toml.tmp-") + || file_name.starts_with(".active_workspace.toml.tmp-") + } + + pub fn runtime_config_violation_message(&self, resolved: &Path) -> String { + format!( + "Refusing to modify ZeroClaw runtime config/state file: {}. Use dedicated config tools or edit it manually outside the agent loop.", + resolved.display() + ) + } + pub fn resolved_path_violation_message(&self, resolved: &Path) -> String { let guidance = if self.allowed_roots.is_empty() { "Add the directory to [autonomy].allowed_roots (for example: allowed_roots = [\"/absolute/path\"]), or move the file into the workspace." @@ -2744,4 +2782,33 @@ mod tests { }; assert!(!p.is_under_allowed_root("/any/path")); } + + #[test] + fn runtime_config_paths_are_protected() { + let workspace = PathBuf::from("/tmp/zeroclaw-profile/workspace"); + let policy = SecurityPolicy { + workspace_dir: workspace.clone(), + ..SecurityPolicy::default() + }; + let config_dir = workspace.parent().unwrap(); + + assert!(policy.is_runtime_config_path(&config_dir.join("config.toml"))); + assert!(policy.is_runtime_config_path(&config_dir.join("config.toml.bak"))); + assert!(policy.is_runtime_config_path(&config_dir.join(".config.toml.tmp-1234"))); + assert!(policy.is_runtime_config_path(&config_dir.join("active_workspace.toml"))); + assert!(policy.is_runtime_config_path(&config_dir.join(".active_workspace.toml.tmp-1234"))); + } + + #[test] + fn workspace_files_are_not_runtime_config_paths() { + let workspace = PathBuf::from("/tmp/zeroclaw-profile/workspace"); + let policy = SecurityPolicy { + workspace_dir: workspace.clone(), + ..SecurityPolicy::default() + }; + let nested_dir = workspace.join("notes"); + + assert!(!policy.is_runtime_config_path(&workspace.join("notes.txt"))); + assert!(!policy.is_runtime_config_path(&nested_dir.join("config.toml"))); + } } diff --git a/src/tools/file_edit.rs b/src/tools/file_edit.rs index 19c5f0cc6..98e4972cb 100644 --- a/src/tools/file_edit.rs +++ b/src/tools/file_edit.rs @@ -147,6 +147,17 @@ impl Tool for FileEditTool { let resolved_target = resolved_parent.join(file_name); + if self.security.is_runtime_config_path(&resolved_target) { + return Ok(ToolResult { + success: false, + output: String::new(), + error: Some( + self.security + .runtime_config_violation_message(&resolved_target), + ), + }); + } + // ── 7. Symlink check ─────────────────────────────────────── if let Ok(meta) = tokio::fs::symlink_metadata(&resolved_target).await { if meta.file_type().is_symlink() { @@ -686,4 +697,42 @@ mod tests { let _ = tokio::fs::remove_dir_all(&dir).await; } + + #[tokio::test] + async fn file_edit_blocks_runtime_config_path() { + let root = std::env::temp_dir().join("zeroclaw_test_file_edit_runtime_config"); + let workspace = root.join("workspace"); + let config_path = root.join("config.toml"); + let _ = tokio::fs::remove_dir_all(&root).await; + tokio::fs::create_dir_all(&workspace).await.unwrap(); + tokio::fs::write(&config_path, "always_ask = [\"cron_add\"]") + .await + .unwrap(); + + let security = Arc::new(SecurityPolicy { + autonomy: AutonomyLevel::Supervised, + workspace_dir: workspace.clone(), + workspace_only: false, + allowed_roots: vec![root.clone()], + forbidden_paths: vec![], + ..SecurityPolicy::default() + }); + let tool = FileEditTool::new(security); + let result = tool + .execute(json!({ + "path": config_path.to_string_lossy(), + "old_string": "always_ask", + "new_string": "auto_approve" + })) + .await + .unwrap(); + + assert!(!result.success); + assert!(result + .error + .unwrap_or_default() + .contains("runtime config/state file")); + + let _ = tokio::fs::remove_dir_all(&root).await; + } } diff --git a/src/tools/file_write.rs b/src/tools/file_write.rs index 7ce604eb4..ac8e786bc 100644 --- a/src/tools/file_write.rs +++ b/src/tools/file_write.rs @@ -124,6 +124,17 @@ impl Tool for FileWriteTool { let resolved_target = resolved_parent.join(file_name); + if self.security.is_runtime_config_path(&resolved_target) { + return Ok(ToolResult { + success: false, + output: String::new(), + error: Some( + self.security + .runtime_config_violation_message(&resolved_target), + ), + }); + } + // If the target already exists and is a symlink, refuse to follow it if let Ok(meta) = tokio::fs::symlink_metadata(&resolved_target).await { if meta.file_type().is_symlink() { @@ -465,4 +476,38 @@ mod tests { let _ = tokio::fs::remove_dir_all(&dir).await; } + + #[tokio::test] + async fn file_write_blocks_runtime_config_path() { + let root = std::env::temp_dir().join("zeroclaw_test_file_write_runtime_config"); + let workspace = root.join("workspace"); + let config_path = root.join("config.toml"); + let _ = tokio::fs::remove_dir_all(&root).await; + tokio::fs::create_dir_all(&workspace).await.unwrap(); + + let security = Arc::new(SecurityPolicy { + autonomy: AutonomyLevel::Supervised, + workspace_dir: workspace.clone(), + workspace_only: false, + allowed_roots: vec![root.clone()], + forbidden_paths: vec![], + ..SecurityPolicy::default() + }); + let tool = FileWriteTool::new(security); + let result = tool + .execute(json!({ + "path": config_path.to_string_lossy(), + "content": "auto_approve = [\"cron_add\"]" + })) + .await + .unwrap(); + + assert!(!result.success); + assert!(result + .error + .unwrap_or_default() + .contains("runtime config/state file")); + + let _ = tokio::fs::remove_dir_all(&root).await; + } } From eb9b26cea0fec39a694727b307111f08661546c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=BE=99=200668001470?= Date: Mon, 16 Mar 2026 17:44:59 +0800 Subject: [PATCH 05/42] test(config): centralize backward-compat fixtures --- src/config/schema.rs | 73 ++++++++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/src/config/schema.rs b/src/config/schema.rs index 8cc0e57e0..5d92d5633 100644 --- a/src/config/schema.rs +++ b/src/config/schema.rs @@ -7082,6 +7082,35 @@ mod tests { // ── Defaults ───────────────────────────────────────────── + fn has_test_table(raw: &str, table: &str) -> bool { + let exact = format!("[{table}]"); + let nested = format!("[{table}."); + raw.lines() + .map(str::trim) + .any(|line| line == exact || line.starts_with(&nested)) + } + + fn parse_test_config(raw: &str) -> Config { + let mut merged = raw.trim().to_string(); + for table in [ + "data_retention", + "cloud_ops", + "conversational_ai", + "security", + "security_ops", + ] { + if has_test_table(&merged, table) { + continue; + } + if !merged.is_empty() { + merged.push_str("\n\n"); + } + merged.push_str(&format!("[{table}]")); + } + merged.push('\n'); + toml::from_str(&merged).unwrap() + } + #[test] async fn http_request_config_default_has_correct_values() { let cfg = HttpRequestConfig::default(); @@ -7260,7 +7289,7 @@ config_path = "/tmp/config.toml" default_temperature = 0.7 "#; - let parsed: Config = toml::from_str(toml_str).unwrap(); + let parsed = parse_test_config(toml_str); assert!(parsed.cron.enabled); assert_eq!(parsed.cron.max_run_history, 50); } @@ -7423,7 +7452,7 @@ default_temperature = 0.7 }; let toml_str = toml::to_string_pretty(&config).unwrap(); - let parsed: Config = toml::from_str(&toml_str).unwrap(); + let parsed = parse_test_config(&toml_str); assert_eq!(parsed.api_key, config.api_key); assert_eq!(parsed.default_provider, config.default_provider); @@ -7456,7 +7485,7 @@ workspace_dir = "/tmp/ws" config_path = "/tmp/config.toml" default_temperature = 0.7 "#; - let parsed: Config = toml::from_str(minimal).unwrap(); + let parsed = parse_test_config(minimal); assert!(parsed.api_key.is_none()); assert!(parsed.default_provider.is_none()); assert_eq!(parsed.observability.backend, "none"); @@ -7479,7 +7508,7 @@ default_temperature = 0.7 default_temperature = 0.7 provider_timeout_secs = 300 "#; - let parsed: Config = toml::from_str(raw).unwrap(); + let parsed = parse_test_config(raw); assert_eq!(parsed.provider_timeout_secs, 300); } @@ -7559,7 +7588,7 @@ default_temperature = 0.7 User-Agent = "MyApp/1.0" X-Title = "zeroclaw" "#; - let parsed: Config = toml::from_str(raw).unwrap(); + let parsed = parse_test_config(raw); assert_eq!(parsed.extra_headers.len(), 2); assert_eq!(parsed.extra_headers.get("User-Agent").unwrap(), "MyApp/1.0"); assert_eq!(parsed.extra_headers.get("X-Title").unwrap(), "zeroclaw"); @@ -7570,7 +7599,7 @@ X-Title = "zeroclaw" let raw = r#" default_temperature = 0.7 "#; - let parsed: Config = toml::from_str(raw).unwrap(); + let parsed = parse_test_config(raw); assert!(parsed.extra_headers.is_empty()); } @@ -7587,7 +7616,7 @@ table = "memories" connect_timeout_secs = 12 "#; - let parsed: Config = toml::from_str(raw).unwrap(); + let parsed = parse_test_config(raw); assert_eq!(parsed.storage.provider.config.provider, "postgres"); assert_eq!( parsed.storage.provider.config.db_url.as_deref(), @@ -7610,7 +7639,7 @@ default_temperature = 0.7 reasoning_enabled = false "#; - let parsed: Config = toml::from_str(raw).unwrap(); + let parsed = parse_test_config(raw); assert_eq!(parsed.runtime.reasoning_enabled, Some(false)); } @@ -7635,7 +7664,7 @@ max_history_messages = 80 parallel_tools = true tool_dispatcher = "xml" "#; - let parsed: Config = toml::from_str(raw).unwrap(); + let parsed = parse_test_config(raw); assert!(parsed.agent.compact_context); assert_eq!(parsed.agent.max_tool_iterations, 20); assert_eq!(parsed.agent.max_history_messages, 80); @@ -8456,7 +8485,7 @@ workspace_dir = "/tmp/ws" config_path = "/tmp/config.toml" default_temperature = 0.7 "#; - let parsed: Config = toml::from_str(minimal).unwrap(); + let parsed = parse_test_config(minimal); assert!( parsed.gateway.require_pairing, "Missing [gateway] must default to require_pairing=true" @@ -8518,7 +8547,7 @@ workspace_dir = "/tmp/ws" config_path = "/tmp/config.toml" default_temperature = 0.7 "#; - let parsed: Config = toml::from_str(minimal).unwrap(); + let parsed = parse_test_config(minimal); assert!( !parsed.composio.enabled, "Missing [composio] must default to disabled" @@ -8573,7 +8602,7 @@ workspace_dir = "/tmp/ws" config_path = "/tmp/config.toml" default_temperature = 0.7 "#; - let parsed: Config = toml::from_str(minimal).unwrap(); + let parsed = parse_test_config(minimal); assert!( parsed.secrets.encrypt, "Missing [secrets] must default to encrypt=true" @@ -8658,7 +8687,7 @@ workspace_dir = "/tmp/ws" config_path = "/tmp/config.toml" default_temperature = 0.7 "#; - let parsed: Config = toml::from_str(minimal).unwrap(); + let parsed = parse_test_config(minimal); assert!(!parsed.browser.enabled); assert!(parsed.browser.allowed_domains.is_empty()); } @@ -8757,7 +8786,7 @@ wire_api = "responses" requires_openai_auth = true "#; - let parsed: Config = toml::from_str(raw).expect("config should parse"); + let parsed = parse_test_config(raw); assert_eq!(parsed.default_provider.as_deref(), Some("sub2api")); assert_eq!(parsed.default_model.as_deref(), Some("gpt-5.3-codex")); let profile = parsed @@ -8995,7 +9024,7 @@ requires_openai_auth = true let saved = tokio::fs::read_to_string(&resolved_config_path) .await .unwrap(); - let parsed: Config = toml::from_str(&saved).unwrap(); + let parsed = parse_test_config(&saved); assert_eq!(parsed.default_temperature, 0.5); std::env::remove_var("ZEROCLAW_WORKSPACE"); @@ -10067,7 +10096,7 @@ default_model = "legacy-model" config.transcription.language = Some("en".into()); let toml_str = toml::to_string_pretty(&config).unwrap(); - let parsed: Config = toml::from_str(&toml_str).unwrap(); + let parsed = parse_test_config(&toml_str); assert!(parsed.transcription.enabled); assert_eq!(parsed.transcription.language.as_deref(), Some("en")); @@ -10081,21 +10110,20 @@ default_model = "legacy-model" default_model = "test-model" default_temperature = 0.7 "#; - let parsed: Config = toml::from_str(toml_str).unwrap(); + let parsed = parse_test_config(toml_str); assert!(!parsed.transcription.enabled); assert_eq!(parsed.transcription.max_duration_secs, 120); } #[test] async fn security_defaults_are_backward_compatible() { - let parsed: Config = toml::from_str( + let parsed = parse_test_config( r#" default_provider = "openrouter" default_model = "anthropic/claude-sonnet-4.6" default_temperature = 0.7 "#, - ) - .unwrap(); + ); assert!(!parsed.security.otp.enabled); assert_eq!(parsed.security.otp.method, OtpMethod::Totp); @@ -10105,7 +10133,7 @@ default_temperature = 0.7 #[test] async fn security_toml_parses_otp_and_estop_sections() { - let parsed: Config = toml::from_str( + let parsed = parse_test_config( r#" default_provider = "openrouter" default_model = "anthropic/claude-sonnet-4.6" @@ -10125,8 +10153,7 @@ enabled = true state_file = "~/.zeroclaw/estop-state.json" require_otp_to_resume = true "#, - ) - .unwrap(); + ); assert!(parsed.security.otp.enabled); assert!(parsed.security.estop.enabled); From 81256dbf42a643587fc41a9018ffae509b8339b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=BE=99=200668001470?= Date: Mon, 16 Mar 2026 17:56:10 +0800 Subject: [PATCH 06/42] test(config): fix helper lint and swarms fixture --- src/config/schema.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/config/schema.rs b/src/config/schema.rs index 5d92d5633..b1d1b4982 100644 --- a/src/config/schema.rs +++ b/src/config/schema.rs @@ -7105,7 +7105,9 @@ mod tests { if !merged.is_empty() { merged.push_str("\n\n"); } - merged.push_str(&format!("[{table}]")); + merged.push('['); + merged.push_str(table); + merged.push(']'); } merged.push('\n'); toml::from_str(&merged).unwrap() @@ -10558,7 +10560,7 @@ require_otp_to_resume = true agents = ["researcher", "writer"] strategy = "sequential" "#; - let config: Config = toml::from_str(toml_str).expect("deserialize"); + let config = parse_test_config(toml_str); assert_eq!(config.agents.len(), 2); assert_eq!(config.swarms.len(), 1); assert!(config.swarms.contains_key("pipeline")); From 0a191fc02cbe907dbcf2735223b01d2fd836d7b2 Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Tue, 17 Mar 2026 12:08:20 +0800 Subject: [PATCH 07/42] chore(pr): drop unrelated docs delta from #3356 --- docs/i18n/el/config-reference.md | 114 ------------------------------- 1 file changed, 114 deletions(-) delete mode 100644 docs/i18n/el/config-reference.md diff --git a/docs/i18n/el/config-reference.md b/docs/i18n/el/config-reference.md deleted file mode 100644 index 7e4454718..000000000 --- a/docs/i18n/el/config-reference.md +++ /dev/null @@ -1,114 +0,0 @@ -# Οδηγός Ρυθμίσεων ZeroClaw (config.toml) - -Αυτός ο οδηγός εξηγεί τις πιο σημαντικές ρυθμίσεις που μπορείτε να κάνετε στο αρχείο `config.toml`. - -Τελευταίος έλεγχος: **19 Φεβρουαρίου 2026**. - -## Πού βρίσκεται το αρχείο ρυθμίσεων; - -Το ZeroClaw ψάχνει για τις ρυθμίσεις με την εξής σειρά: -1. Στη διαδρομή που ορίζει η μεταβλητή `ZEROCLAW_WORKSPACE`. -2. Στο αρχείο `~/.zeroclaw/config.toml` (αυτή είναι η συνηθισμένη θέση). - -## Βασικές Ρυθμίσεις (Core) - -| Ρύθμιση | Τι ορίζει | -|---|---| -| `default_provider` | Ποιον πάροχο AI χρησιμοποιείτε (π.χ. `openai`, `ollama`). | -| `default_model` | Ποιο συγκεκριμένο μοντέλο AI χρησιμοποιείτε (π.χ. `gpt-4o`). | -| `default_temperature` | Πόσο "δημιουργική" θα είναι η AI (τιμή από 0 έως 2). | - -## 1. Συμπεριφορά της AI (Agent) - -- `max_tool_iterations`: Πόσες φορές μπορεί η AI να χρησιμοποιήσει εργαλεία για να απαντήσει σε 1 μήνυμα (προεπιλογή: 10). -- `max_history_messages`: Πόσα προηγούμενα μηνύματα θυμάται η AI στη συνομιλία (προεπιλογή: 50). - -## 2. Αυτονομία και Ασφάλεια (Autonomy) - -Εδώ ρυθμίζετε πόση ελευθερία έχει η AI να κάνει αλλαγές στον υπολογιστή σας. - -- `level`: - - `read_only`: Μπορεί μόνο να διαβάζει αρχεία. - - `supervised`: Χρειάζεται την έγκρισή σας για σημαντικές ενέργειες (προεπιλογή). - - `full`: Μπορεί να τρέχει εντολές ελεύθερα (προσοχή!). -- `allowed_commands`: Λίστα με τις εντολές που επιτρέπεται να τρέχει η AI. -- `forbidden_paths`: Φάκελοι που η AI **δεν** επιτρέπεται να αγγίξει (π.χ. `/etc`). - -## 3. Μνήμη (Memory) - -Πώς αποθηκεύει η AI τις πληροφορίες που της δίνετε. -- `backend`: Μπορεί να είναι `sqlite` (βάση δεδομένων), `markdown` (απλά αρχεία κειμένου) ή `none` (καμία μνήμη). - -## 4. Κανάλια Επικοινωνίας (Channels) - -Κάθε κανάλι (Telegram, Discord κ.λπ.) έχει τη δική του ενότητα στο αρχείο. - -Παράδειγμα για το **Telegram**: -```toml -[channels_config.telegram] -bot_token = "το-κλειδί-σας" -allowed_users = ["το-όνομά-σας"] # Ποιοι επιτρέπεται να μιλάνε στο bot -``` - -## 5. Έλεγχος Κόστους (Cost) - -Αν χρησιμοποιείτε πληρωμένες υπηρεσίες AI, μπορείτε να βάλετε όρια. -- `daily_limit_usd`: Μέγιστο ποσό ανά ημέρα (π.χ. 10.00 δολάρια). -- `monthly_limit_usd`: Μέγιστο ποσό ανά μήνα. - -## 6. Εικόνες (Multimodal) - -Ρυθμίσεις για το πώς η AI βλέπει εικόνες. -- `max_images`: Μέγιστος αριθμός εικόνων ανά μήνυμα. -- `allow_remote_fetch`: Αν επιτρέπεται στην AI να κατεβάζει εικόνες από το ίντερνετ μέσω συνδέσμων (links). - ---- - -## Συμβουλές - -- Αν αλλάξετε το αρχείο `config.toml`, πρέπει να κάνετε επανεκκίνηση το ZeroClaw για να δει τις αλλαγές. -- Χρησιμοποιήστε την εντολή `zeroclaw doctor` για να βεβαιωθείτε ότι οι ρυθμίσεις σας είναι σωστές. - -## Ενημέρωση (2026-03-03) - -- Στην ενότητα `[agent]` προστέθηκαν τα `allowed_tools` και `denied_tools`. - - Αν το `allowed_tools` δεν είναι κενό, ο primary agent βλέπει μόνο τα εργαλεία της λίστας. - - Το `denied_tools` εφαρμόζεται μετά το allowlist και αφαιρεί επιπλέον εργαλεία. -- Άγνωστες τιμές στο `allowed_tools` αγνοούνται (με debug log) και δεν μπλοκάρουν την εκκίνηση. -- Αν `allowed_tools` και `denied_tools` καταλήξουν να αφαιρέσουν όλα τα εκτελέσιμα εργαλεία, η εκκίνηση αποτυγχάνει άμεσα με σαφές μήνυμα ρύθμισης. -- Για πλήρη πίνακα πεδίων και παράδειγμα, δείτε το αγγλικό `config-reference.md` στην ενότητα `[agent]`. -- Μην μοιράζεστε ποτέ το αρχείο `config.toml` με άλλους, καθώς περιέχει τα μυστικά κλειδιά σας (tokens). - -## Ενημέρωση (2026-03-12) - -- Στην ενότητα `[agent]` προστέθηκε το `tool_filter_groups` για φιλτράρισμα schema tool MCP ανά γύρο. - -### `tool_filter_groups` - -Μειώνει τα tokens ανά γύρο περιορίζοντας ποια schema tool MCP αποστέλλονται στο LLM. Τα ενσωματωμένα εργαλεία (χωρίς πρόθεμα `mcp_`) περνούν πάντα αναλλοίωτα. - -Κάθε εγγραφή είναι πίνακας με τα εξής πεδία: - -| Πεδίο | Τύπος | Σκοπός | -|---|---|---| -| `mode` | `"always"` \| `"dynamic"` | `always`: το εργαλείο συμπεριλαμβάνεται πάντα. `dynamic`: συμπεριλαμβάνεται μόνο όταν το μήνυμα χρήστη περιέχει λέξη-κλειδί. | -| `tools` | `[string]` | Μοτίβα ονόματος εργαλείου. Υποστηρίζεται ένα `*` wildcard (π.χ. `"mcp_vikunja_*"`). | -| `keywords` | `[string]` | (Μόνο για dynamic) Υποαλφαριθμητικά χωρίς διάκριση πεζών-κεφαλαίων που αντιστοιχούν στο τελευταίο μήνυμα χρήστη. | - -Όταν το `tool_filter_groups` είναι κενό, η λειτουργία είναι ανενεργή και όλα τα εργαλεία περνούν κανονικά (συμβατό με προηγούμενες εκδόσεις). - -Παράδειγμα: - -```toml -[agent] -# Τα εργαλεία MCP Vikunja είναι πάντα διαθέσιμα. -[[agent.tool_filter_groups]] -mode = "always" -tools = ["mcp_vikunja_*"] - -# Τα εργαλεία MCP browser συμπεριλαμβάνονται μόνο όταν ο χρήστης αναφέρει πλοήγηση. -[[agent.tool_filter_groups]] -mode = "dynamic" -tools = ["mcp_browser_*"] -keywords = ["περιήγηση", "πλοήγηση", "άνοιγμα url", "στιγμιότυπο"] -``` From f87c7442b9b64289d48e6d8675ee6ed4a00083e9 Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Tue, 17 Mar 2026 12:11:35 +0800 Subject: [PATCH 08/42] chore(pr): restore merge-base docs file for #3356 --- docs/i18n/el/config-reference.md | 114 +++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 docs/i18n/el/config-reference.md diff --git a/docs/i18n/el/config-reference.md b/docs/i18n/el/config-reference.md new file mode 100644 index 000000000..184d60f74 --- /dev/null +++ b/docs/i18n/el/config-reference.md @@ -0,0 +1,114 @@ +# Οδηγός Ρυθμίσεων ZeroClaw (config.toml) + +Αυτός ο οδηγός εξηγεί τις πιο σημαντικές ρυθμίσεις που μπορείτε να κάνετε στο αρχείο `config.toml`. + +Τελευταίος έλεγχος: **19 Φεβρουαρίου 2026**. + +## Πού βρίσκεται το αρχείο ρυθμίσεων; + +Το ZeroClaw ψάχνει για τις ρυθμίσεις με την εξής σειρά: +1. Στη διαδρομή που ορίζει η μεταβλητή `ZEROCLAW_WORKSPACE`. +2. Στο αρχείο `~/.zeroclaw/config.toml` (αυτή είναι η συνηθισμένη θέση). + +## Βασικές Ρυθμίσεις (Core) + +| Ρύθμιση | Τι ορίζει | +|---|---| +| `default_provider` | Ποιον πάροχο AI χρησιμοποιείτε (π.χ. `openai`, `ollama`). | +| `default_model` | Ποιο συγκεκριμένο μοντέλο AI χρησιμοποιείτε (π.χ. `gpt-4o`). | +| `default_temperature` | Πόσο "δημιουργική" θα είναι η AI (τιμή από 0 έως 2). | + +## 1. Συμπεριφορά της AI (Agent) + +- `max_tool_iterations`: Πόσες φορές μπορεί η AI να χρησιμοποιήσει εργαλεία για να απαντήσει σε 1 μήνυμα (προεπιλογή: 10). +- `max_history_messages`: Πόσα προηγούμενα μηνύματα θυμάται η AI στη συνομιλία (προεπιλογή: 50). + +## 2. Αυτονομία και Ασφάλεια (Autonomy) + +Εδώ ρυθμίζετε πόση ελευθερία έχει η AI να κάνει αλλαγές στον υπολογιστή σας. + +- `level`: + - `read_only`: Μπορεί μόνο να διαβάζει αρχεία. + - `supervised`: Χρειάζεται την έγκρισή σας για σημαντικές ενέργειες (προεπιλογή). + - `full`: Μπορεί να τρέχει εντολές ελεύθερα (προσοχή!). +- `allowed_commands`: Λίστα με τις εντολές που επιτρέπεται να τρέχει η AI. +- `forbidden_paths`: Φάκελοι που η AI **δεν** επιτρέπεται να αγγίξει (π.χ. `/etc`). + +## 3. Μνήμη (Memory) + +Πώς αποθηκεύει η AI τις πληροφορίες που της δίνετε. +- `backend`: Μπορεί να είναι `sqlite` (βάση δεδομένων), `markdown` (απλά αρχεία κειμένου) ή `none` (καμία μνήμη). + +## 4. Κανάλια Επικοινωνίας (Channels) + +Κάθε κανάλι (Telegram, Discord κ.λπ.) έχει τη δική του ενότητα στο αρχείο. + +Παράδειγμα για το **Telegram**: +```toml +[channels_config.telegram] +bot_token = "το-κλειδί-σας" +allowed_users = ["το-όνομά-σας"] # Ποιοι επιτρέπεται να μιλάνε στο bot +``` + +## 5. Έλεγχος Κόστους (Cost) + +Αν χρησιμοποιείτε πληρωμένες υπηρεσίες AI, μπορείτε να βάλετε όρια. +- `daily_limit_usd`: Μέγιστο ποσό ανά ημέρα (π.χ. 10.00 δολάρια). +- `monthly_limit_usd`: Μέγιστο ποσό ανά μήνα. + +## 6. Εικόνες (Multimodal) + +Ρυθμίσεις για το πώς η AI βλέπει εικόνες. +- `max_images`: Μέγιστος αριθμός εικόνων ανά μήνυμα. +- `allow_remote_fetch`: Αν επιτρέπεται στην AI να κατεβάζει εικόνες από το ίντερνετ μέσω συνδέσμων (links). + +--- + +## Συμβουλές + +- Αν αλλάξετε το αρχείο `config.toml`, πρέπει να κάνετε επανεκκίνηση το ZeroClaw για να δει τις αλλαγές. +- Χρησιμοποιήστε την εντολή `zeroclaw doctor` για να βεβαιωθείτε ότι οι ρυθμίσεις σας είναι σωστές. + +## Ενημέρωση (2026-03-03) + +- Στην ενότητα `[agent]` προστέθηκαν τα `allowed_tools` και `denied_tools`. + - Αν το `allowed_tools` δεν είναι κενό, ο primary agent βλέπει μόνο τα εργαλεία της λίστας. + - Το `denied_tools` εφαρμόζεται μετά το allowlist και αφαιρεί επιπλέον εργαλεία. +- Άγνωστες τιμές στο `allowed_tools` αγνοούνται (με debug log) και δεν μπλοκάρουν την εκκίνηση. +- Αν `allowed_tools` και `denied_tools` καταλήξουν να αφαιρέσουν όλα τα εκτελέσιμα εργαλεία, η εκκίνηση αποτυγχάνει άμεσα με σαφές μήνυμα ρύθμισης. +- Για πλήρη πίνακα πεδίων και παράδειγμα, δείτε το αγγλικό `config-reference.md` στην ενότητα `[agent]`. +- Μην μοιράζεστε ποτέ το αρχείο `config.toml` με άλλους, καθώς περιέχει τα μυστικά κλειδιά σας (tokens). + +## Ενημέρωση (2026-03-12) + +- Στην ενότητα `[agent]` προστέθηκε το `tool_filter_groups` για φιλτράρισμα schema tool MCP ανά γύρο. + +### `tool_filter_groups` + +Μειώνει τα tokens ανά γύρο περιορίζοντας ποια schema tool MCP αποστέλλονται στο LLM. Τα ενσωματωμένα εργαλεία (χωρίς πρόθεμα `mcp_`) περνούν πάντα αναλλοίωτα. + +Κάθε εγγραφή είναι πίνακας με τα εξής πεδία: + +| Πεδίο | Τύπος | Σκοπός | +|---|---|---| +| `mode` | `"always"` \| `"dynamic"` | `always`: το εργαλείο συμπεριλαμβάνεται πάντα. `dynamic`: συμπεριλαμβάνεται μόνο όταν το μήνυμα χρήστη περιέχει λέξη-κλειδί. | +| `tools` | `[string]` | Μοτίβα ονόματος εργαλείου. Υποστηρίζεται ένα `*` wildcard (π.χ. `"mcp_vikunja_*"`). | +| `keywords` | `[string]` | (Μόνο για dynamic) Υποαλφαριθμητικά χωρίς διάκριση πεζών-κεφαλαίων που αντιστοιχούν στο τελευταίο μήνυμα χρήστη. | + +Όταν το `tool_filter_groups` είναι κενό, η λειτουργία είναι ανενεργή και όλα τα εργαλεία περνούν κανονικά (συμβατό με προηγούμενες εκδόσεις). + +Παράδειγμα: + +```toml +[agent] +# Τα εργαλεία MCP Vikunja είναι πάντα διαθέσιμα. +[[agent.tool_filter_groups]] +mode = "always" +tools = ["mcp_vikunja_*"] + +# Τα εργαλεία MCP browser συμπεριλαμβάνονται μόνο όταν ο χρήστης αναφέρει πλοήγηση. +[[agent.tool_filter_groups]] +mode = "dynamic" +tools = ["mcp_browser_*"] +keywords = ["περιήγηση", "πλοήγηση", "άνοιγμα url", "στιγμιότυπο"] +``` From d81eeefe52c78671817a7e7a291a5d6d73a187f1 Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Tue, 17 Mar 2026 20:45:35 +0800 Subject: [PATCH 09/42] fix(tools): normalize workspace-prefixed paths --- src/security/policy.rs | 43 +++++++++++++++++++++++++++++++++++++++++ src/tools/file_edit.rs | 38 +++++++++++++++++++++++++++++++++++- src/tools/file_write.rs | 32 +++++++++++++++++++++++++++++- src/tools/pdf_read.rs | 2 +- 4 files changed, 112 insertions(+), 3 deletions(-) diff --git a/src/security/policy.rs b/src/security/policy.rs index 72fe16bce..312a7d388 100644 --- a/src/security/policy.rs +++ b/src/security/policy.rs @@ -234,6 +234,26 @@ fn expand_user_path(path: &str) -> PathBuf { PathBuf::from(path) } +fn rootless_path(path: &Path) -> Option { + let mut relative = PathBuf::new(); + + for component in path.components() { + match component { + std::path::Component::Prefix(_) + | std::path::Component::RootDir + | std::path::Component::CurDir => {} + std::path::Component::ParentDir => return None, + std::path::Component::Normal(part) => relative.push(part), + } + } + + if relative.as_os_str().is_empty() { + None + } else { + Some(relative) + } +} + // ── Shell Command Parsing Utilities ─────────────────────────────────────── // These helpers implement a minimal quote-aware shell lexer. They exist // because security validation must reason about the *structure* of a @@ -1245,6 +1265,16 @@ impl SecurityPolicy { let expanded = expand_user_path(path); if expanded.is_absolute() { expanded + } else if let Some(workspace_hint) = rootless_path(&self.workspace_dir) { + if let Ok(stripped) = expanded.strip_prefix(&workspace_hint) { + if stripped.as_os_str().is_empty() { + self.workspace_dir.clone() + } else { + self.workspace_dir.join(stripped) + } + } else { + self.workspace_dir.join(expanded) + } } else { self.workspace_dir.join(expanded) } @@ -2720,6 +2750,19 @@ mod tests { assert_eq!(resolved, PathBuf::from("/workspace/relative/path.txt")); } + #[test] + fn resolve_tool_path_normalizes_workspace_prefixed_relative_paths() { + let p = SecurityPolicy { + workspace_dir: PathBuf::from("/zeroclaw-data/workspace"), + ..SecurityPolicy::default() + }; + let resolved = p.resolve_tool_path("zeroclaw-data/workspace/scripts/daily.py"); + assert_eq!( + resolved, + PathBuf::from("/zeroclaw-data/workspace/scripts/daily.py") + ); + } + #[test] fn is_under_allowed_root_matches_allowed_roots() { let p = SecurityPolicy { diff --git a/src/tools/file_edit.rs b/src/tools/file_edit.rs index 19c5f0cc6..618bc8f0f 100644 --- a/src/tools/file_edit.rs +++ b/src/tools/file_edit.rs @@ -103,7 +103,7 @@ impl Tool for FileEditTool { }); } - let full_path = self.security.workspace_dir.join(path); + let full_path = self.security.resolve_tool_path(path); // ── 5. Canonicalize parent ───────────────────────────────── let Some(parent) = full_path.parent() else { @@ -495,6 +495,42 @@ mod tests { assert!(result.error.as_ref().unwrap().contains("not allowed")); } + #[tokio::test] + async fn file_edit_normalizes_workspace_prefixed_relative_path() { + let root = std::env::temp_dir().join("zeroclaw_test_file_edit_workspace_prefixed"); + let workspace = root.join("workspace"); + let _ = tokio::fs::remove_dir_all(&root).await; + tokio::fs::create_dir_all(workspace.join("nested")) + .await + .unwrap(); + tokio::fs::write(workspace.join("nested/target.txt"), "hello world") + .await + .unwrap(); + + let tool = FileEditTool::new(test_security(workspace.clone())); + let workspace_prefixed = workspace + .strip_prefix(std::path::Path::new("/")) + .unwrap() + .join("nested/target.txt"); + let result = tool + .execute(json!({ + "path": workspace_prefixed.to_string_lossy(), + "old_string": "world", + "new_string": "zeroclaw" + })) + .await + .unwrap(); + + assert!(result.success); + let content = tokio::fs::read_to_string(workspace.join("nested/target.txt")) + .await + .unwrap(); + assert_eq!(content, "hello zeroclaw"); + assert!(!workspace.join(workspace_prefixed).exists()); + + let _ = tokio::fs::remove_dir_all(&root).await; + } + #[cfg(unix)] #[tokio::test] async fn file_edit_blocks_symlink_escape() { diff --git a/src/tools/file_write.rs b/src/tools/file_write.rs index 7ce604eb4..098716d6c 100644 --- a/src/tools/file_write.rs +++ b/src/tools/file_write.rs @@ -78,7 +78,7 @@ impl Tool for FileWriteTool { }); } - let full_path = self.security.workspace_dir.join(path); + let full_path = self.security.resolve_tool_path(path); let Some(parent) = full_path.parent() else { return Ok(ToolResult { @@ -247,6 +247,36 @@ mod tests { let _ = tokio::fs::remove_dir_all(&dir).await; } + #[tokio::test] + async fn file_write_normalizes_workspace_prefixed_relative_path() { + let root = std::env::temp_dir().join("zeroclaw_test_file_write_workspace_prefixed"); + let workspace = root.join("workspace"); + let _ = tokio::fs::remove_dir_all(&root).await; + tokio::fs::create_dir_all(&workspace).await.unwrap(); + + let tool = FileWriteTool::new(test_security(workspace.clone())); + let workspace_prefixed = workspace + .strip_prefix(std::path::Path::new("/")) + .unwrap() + .join("nested/out.txt"); + let result = tool + .execute(json!({ + "path": workspace_prefixed.to_string_lossy(), + "content": "written!" + })) + .await + .unwrap(); + assert!(result.success); + + let content = tokio::fs::read_to_string(workspace.join("nested/out.txt")) + .await + .unwrap(); + assert_eq!(content, "written!"); + assert!(!workspace.join(workspace_prefixed).exists()); + + let _ = tokio::fs::remove_dir_all(&root).await; + } + #[tokio::test] async fn file_write_overwrites_existing() { let dir = std::env::temp_dir().join("zeroclaw_test_file_write_overwrite"); diff --git a/src/tools/pdf_read.rs b/src/tools/pdf_read.rs index 15cb2092c..e4e1003c0 100644 --- a/src/tools/pdf_read.rs +++ b/src/tools/pdf_read.rs @@ -100,7 +100,7 @@ impl Tool for PdfReadTool { }); } - let full_path = self.security.workspace_dir.join(path); + let full_path = self.security.resolve_tool_path(path); let resolved_path = match tokio::fs::canonicalize(&full_path).await { Ok(p) => p, From 3a672a2edefb7bf09042c103ec3b19d0c5442cb1 Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Thu, 19 Mar 2026 12:07:08 +0800 Subject: [PATCH 10/42] Refresh skills after new channel sessions --- src/channels/mod.rs | 362 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 348 insertions(+), 14 deletions(-) diff --git a/src/channels/mod.rs b/src/channels/mod.rs index e34117a08..768205ff9 100644 --- a/src/channels/mod.rs +++ b/src/channels/mod.rs @@ -167,6 +167,8 @@ impl Observer for ChannelNotifyObserver { /// Per-sender conversation history for channel messages. type ConversationHistoryMap = Arc>>>; +/// Senders that requested `/new` and must force a fresh prompt on their next message. +type PendingNewSessionSet = Arc>>; /// Maximum history messages to keep per sender. const MAX_CHANNEL_HISTORY: usize = 50; /// Minimum user-message length (in chars) for auto-save to memory. @@ -306,6 +308,7 @@ struct ChannelRuntimeContext { channels_by_name: Arc>>, provider: Arc, default_provider: Arc, + prompt_config: Arc, memory: Arc, tools_registry: Arc>>, observer: Arc, @@ -316,6 +319,7 @@ struct ChannelRuntimeContext { max_tool_iterations: usize, min_relevance_score: f64, conversation_histories: ConversationHistoryMap, + pending_new_sessions: PendingNewSessionSet, provider_cache: ProviderCacheMap, route_overrides: RouteSelectionMap, api_key: Option, @@ -941,6 +945,75 @@ fn clear_sender_history(ctx: &ChannelRuntimeContext, sender_key: &str) { .remove(sender_key); } +fn mark_sender_for_new_session(ctx: &ChannelRuntimeContext, sender_key: &str) { + ctx.pending_new_sessions + .lock() + .unwrap_or_else(|e| e.into_inner()) + .insert(sender_key.to_string()); +} + +fn take_pending_new_session(ctx: &ChannelRuntimeContext, sender_key: &str) -> bool { + ctx.pending_new_sessions + .lock() + .unwrap_or_else(|e| e.into_inner()) + .remove(sender_key) +} + +fn replace_available_skills_section(base_prompt: &str, refreshed_skills: &str) -> String { + const SKILLS_HEADER: &str = "## Available Skills\n\n"; + const SKILLS_END: &str = ""; + const WORKSPACE_HEADER: &str = "## Workspace\n\n"; + + if let Some(start) = base_prompt.find(SKILLS_HEADER) { + if let Some(rel_end) = base_prompt[start..].find(SKILLS_END) { + let end = start + rel_end + SKILLS_END.len(); + let tail = base_prompt[end..] + .strip_prefix("\n\n") + .unwrap_or(&base_prompt[end..]); + + let mut refreshed = String::with_capacity( + base_prompt.len().saturating_sub(end.saturating_sub(start)) + + refreshed_skills.len() + + 2, + ); + refreshed.push_str(&base_prompt[..start]); + if !refreshed_skills.is_empty() { + refreshed.push_str(refreshed_skills); + refreshed.push_str("\n\n"); + } + refreshed.push_str(tail); + return refreshed; + } + } + + if refreshed_skills.is_empty() { + return base_prompt.to_string(); + } + + if let Some(workspace_start) = base_prompt.find(WORKSPACE_HEADER) { + let mut refreshed = String::with_capacity(base_prompt.len() + refreshed_skills.len() + 2); + refreshed.push_str(&base_prompt[..workspace_start]); + refreshed.push_str(refreshed_skills); + refreshed.push_str("\n\n"); + refreshed.push_str(&base_prompt[workspace_start..]); + return refreshed; + } + + format!("{base_prompt}\n\n{refreshed_skills}") +} + +fn refreshed_new_session_system_prompt(ctx: &ChannelRuntimeContext) -> String { + let refreshed_skills = crate::skills::skills_to_prompt_with_mode( + &crate::skills::load_skills_with_config( + ctx.workspace_dir.as_ref(), + ctx.prompt_config.as_ref(), + ), + ctx.workspace_dir.as_ref(), + ctx.prompt_config.skills.prompt_injection_mode, + ); + replace_available_skills_section(ctx.system_prompt.as_str(), &refreshed_skills) +} + fn compact_sender_history(ctx: &ChannelRuntimeContext, sender_key: &str) -> bool { let mut histories = ctx .conversation_histories @@ -1365,6 +1438,7 @@ async fn handle_runtime_command_if_needed( } ChannelRuntimeCommand::NewSession => { clear_sender_history(ctx, &sender_key); + mark_sender_for_new_session(ctx, &sender_key); "Conversation history cleared. Starting fresh.".to_string() } }; @@ -2007,24 +2081,37 @@ async fn process_channel_message( println!(" ⏳ Processing message..."); let started_at = Instant::now(); - let had_prior_history = ctx - .conversation_histories - .lock() - .unwrap_or_else(|e| e.into_inner()) - .get(&history_key) - .is_some_and(|turns| !turns.is_empty()); + let force_fresh_session = take_pending_new_session(ctx.as_ref(), &history_key); + if force_fresh_session { + // `/new` should make the next user turn completely fresh even if + // older cached turns reappear before this message starts. + clear_sender_history(ctx.as_ref(), &history_key); + } + + let had_prior_history = if force_fresh_session { + false + } else { + ctx.conversation_histories + .lock() + .unwrap_or_else(|e| e.into_inner()) + .get(&history_key) + .is_some_and(|turns| !turns.is_empty()) + }; // Preserve user turn before the LLM call so interrupted requests keep context. append_sender_turn(ctx.as_ref(), &history_key, ChatMessage::user(&msg.content)); // Build history from per-sender conversation cache. - let prior_turns_raw = ctx - .conversation_histories - .lock() - .unwrap_or_else(|e| e.into_inner()) - .get(&history_key) - .cloned() - .unwrap_or_default(); + let prior_turns_raw = if force_fresh_session { + vec![ChatMessage::user(&msg.content)] + } else { + ctx.conversation_histories + .lock() + .unwrap_or_else(|e| e.into_inner()) + .get(&history_key) + .cloned() + .unwrap_or_default() + }; let mut prior_turns = normalize_cached_channel_turns(prior_turns_raw); // Strip stale tool_result blocks from cached turns so the LLM never @@ -2089,8 +2176,13 @@ async fn process_channel_message( } } + let base_system_prompt = if had_prior_history { + ctx.system_prompt.as_str().to_string() + } else { + refreshed_new_session_system_prompt(ctx.as_ref()) + }; let system_prompt = - build_channel_system_prompt(ctx.system_prompt.as_str(), &msg.channel, &msg.reply_target); + build_channel_system_prompt(&base_system_prompt, &msg.channel, &msg.reply_target); let mut history = vec![ChatMessage::system(system_prompt)]; history.extend(prior_turns); let use_streaming = target_channel @@ -4148,6 +4240,7 @@ pub async fn start_channels(config: Config) -> Result<()> { channels_by_name, provider: Arc::clone(&provider), default_provider: Arc::new(provider_name), + prompt_config: Arc::new(config.clone()), memory: Arc::clone(&mem), tools_registry: Arc::clone(&tools_registry), observer, @@ -4158,6 +4251,7 @@ pub async fn start_channels(config: Config) -> Result<()> { max_tool_iterations: config.agent.max_tool_iterations, min_relevance_score: config.memory.min_relevance_score, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(provider_cache_seed)), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: config.api_key.clone(), @@ -4475,6 +4569,7 @@ mod tests { max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(histories)), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -4488,6 +4583,7 @@ mod tests { hooks: None, provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, non_cli_excluded_tools: Arc::new(Vec::new()), tool_call_dedup_exempt: Arc::new(Vec::new()), @@ -4584,6 +4680,7 @@ mod tests { max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -4597,6 +4694,7 @@ mod tests { hooks: None, provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, non_cli_excluded_tools: Arc::new(Vec::new()), tool_call_dedup_exempt: Arc::new(Vec::new()), @@ -4649,6 +4747,7 @@ mod tests { max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(histories)), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -4662,6 +4761,7 @@ mod tests { hooks: None, provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, non_cli_excluded_tools: Arc::new(Vec::new()), tool_call_dedup_exempt: Arc::new(Vec::new()), @@ -4733,6 +4833,7 @@ mod tests { max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(histories)), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -4746,6 +4847,7 @@ mod tests { hooks: None, provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, non_cli_excluded_tools: Arc::new(Vec::new()), tool_call_dedup_exempt: Arc::new(Vec::new()), @@ -5267,6 +5369,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 10, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -5274,6 +5377,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -5340,6 +5444,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 10, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -5347,6 +5452,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -5427,6 +5533,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 10, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -5434,6 +5541,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -5499,6 +5607,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 10, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -5506,6 +5615,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -5581,6 +5691,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(provider_cache_seed)), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -5588,6 +5699,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -5684,6 +5796,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(provider_cache_seed)), route_overrides: Arc::new(Mutex::new(route_overrides)), api_key: None, @@ -5691,6 +5804,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -5768,6 +5882,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(provider_cache_seed)), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -5775,6 +5890,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -5864,6 +5980,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(provider_cache_seed)), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -5874,6 +5991,7 @@ BTC is currently around $65,000 based on latest tool output."# ..providers::ProviderRuntimeOptions::default() }, workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -5951,6 +6069,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 12, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -5958,6 +6077,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -6025,6 +6145,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 3, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -6032,6 +6153,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -6210,6 +6332,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 10, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -6217,6 +6340,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -6303,6 +6427,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 10, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -6310,6 +6435,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: true, @@ -6411,6 +6537,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 10, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -6418,6 +6545,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -6516,6 +6644,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 10, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -6523,6 +6652,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: true, @@ -6603,6 +6733,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 10, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -6610,6 +6741,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -6675,6 +6807,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 10, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -6682,6 +6815,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -7305,6 +7439,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -7312,6 +7447,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -7380,6 +7516,188 @@ BTC is currently around $65,000 based on latest tool output."# assert!(calls[1][3].1.contains("follow up")); } + #[tokio::test] + async fn process_channel_message_refreshes_available_skills_after_new_session() { + let workspace = make_workspace(); + let mut config = Config::default(); + config.workspace_dir = workspace.path().to_path_buf(); + config.skills.open_skills_enabled = false; + + let initial_skills = crate::skills::load_skills_with_config(workspace.path(), &config); + assert!(initial_skills.is_empty()); + + let initial_system_prompt = build_system_prompt_with_mode( + workspace.path(), + "test-model", + &[], + &initial_skills, + Some(&config.identity), + None, + false, + config.skills.prompt_injection_mode, + ); + assert!( + !initial_system_prompt.contains("refresh-test"), + "initial prompt should not contain the new skill before it exists" + ); + + let channel_impl = Arc::new(TelegramRecordingChannel::default()); + let channel: Arc = channel_impl.clone(); + + let mut channels_by_name = HashMap::new(); + channels_by_name.insert(channel.name().to_string(), channel); + + let provider_impl = Arc::new(HistoryCaptureProvider::default()); + let runtime_ctx = Arc::new(ChannelRuntimeContext { + channels_by_name: Arc::new(channels_by_name), + provider: provider_impl.clone(), + default_provider: Arc::new("test-provider".to_string()), + memory: Arc::new(NoopMemory), + tools_registry: Arc::new(vec![]), + observer: Arc::new(NoopObserver), + system_prompt: Arc::new(initial_system_prompt), + model: Arc::new("test-model".to_string()), + temperature: 0.0, + auto_save_memory: false, + max_tool_iterations: 5, + min_relevance_score: 0.0, + conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), + provider_cache: Arc::new(Mutex::new(HashMap::new())), + route_overrides: Arc::new(Mutex::new(HashMap::new())), + api_key: None, + api_url: None, + reliability: Arc::new(crate::config::ReliabilityConfig::default()), + provider_runtime_options: providers::ProviderRuntimeOptions::default(), + workspace_dir: Arc::new(config.workspace_dir.clone()), + prompt_config: Arc::new(config.clone()), + message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, + interrupt_on_new_message: InterruptOnNewMessageConfig { + telegram: false, + slack: false, + }, + multimodal: crate::config::MultimodalConfig::default(), + hooks: None, + non_cli_excluded_tools: Arc::new(Vec::new()), + tool_call_dedup_exempt: Arc::new(Vec::new()), + model_routes: Arc::new(Vec::new()), + query_classification: crate::config::QueryClassificationConfig::default(), + ack_reactions: true, + show_tool_calls: true, + session_store: None, + approval_manager: Arc::new(ApprovalManager::for_non_interactive( + &crate::config::AutonomyConfig::default(), + )), + activated_tools: None, + }); + + process_channel_message( + runtime_ctx.clone(), + traits::ChannelMessage { + id: "msg-before-new".to_string(), + sender: "alice".to_string(), + reply_target: "chat-refresh".to_string(), + content: "hello".to_string(), + channel: "telegram".to_string(), + timestamp: 1, + thread_ts: None, + }, + CancellationToken::new(), + ) + .await; + + let skill_dir = workspace.path().join("skills").join("refresh-test"); + std::fs::create_dir_all(&skill_dir).unwrap(); + std::fs::write( + skill_dir.join("SKILL.md"), + "---\nname: refresh-test\ndescription: Refresh the available skills section\n---\n# Refresh Test\nExpose this skill after /new.\n", + ) + .unwrap(); + let refreshed_skills = crate::skills::load_skills_with_config(workspace.path(), &config); + assert_eq!(refreshed_skills.len(), 1); + assert_eq!(refreshed_skills[0].name, "refresh-test"); + assert!( + refreshed_new_session_system_prompt(runtime_ctx.as_ref()) + .contains("refresh-test"), + "fresh-session prompt should pick up skills added after startup" + ); + + process_channel_message( + runtime_ctx.clone(), + traits::ChannelMessage { + id: "msg-new-session".to_string(), + sender: "alice".to_string(), + reply_target: "chat-refresh".to_string(), + content: "/new".to_string(), + channel: "telegram".to_string(), + timestamp: 2, + thread_ts: None, + }, + CancellationToken::new(), + ) + .await; + + let histories = runtime_ctx + .conversation_histories + .lock() + .unwrap_or_else(|e| e.into_inner()); + assert!( + !histories.contains_key("telegram_alice"), + "/new should clear the cached sender history before the next message" + ); + drop(histories); + + let pending_new_sessions = runtime_ctx + .pending_new_sessions + .lock() + .unwrap_or_else(|e| e.into_inner()); + assert!( + pending_new_sessions.contains("telegram_alice"), + "/new should mark the sender for a fresh next-message prompt rebuild" + ); + drop(pending_new_sessions); + + process_channel_message( + runtime_ctx, + traits::ChannelMessage { + id: "msg-after-new".to_string(), + sender: "alice".to_string(), + reply_target: "chat-refresh".to_string(), + content: "hello again".to_string(), + channel: "telegram".to_string(), + timestamp: 3, + thread_ts: None, + }, + CancellationToken::new(), + ) + .await; + + let calls = provider_impl + .calls + .lock() + .unwrap_or_else(|e| e.into_inner()); + assert_eq!(calls.len(), 2); + assert_eq!(calls[0][0].0, "system"); + assert_eq!(calls[1][0].0, "system"); + assert!( + !calls[0][0].1.contains("refresh-test"), + "pre-/new prompt should not advertise a skill that did not exist yet" + ); + assert!( + calls[1][0].1.contains(""), + "post-/new prompt should contain the refreshed skills block" + ); + assert!( + calls[1][0].1.contains("refresh-test"), + "post-/new prompt should include skills discovered after the reset" + ); + + let sent_messages = channel_impl.sent_messages.lock().await; + assert!(sent_messages + .iter() + .any(|message| { message.contains("Conversation history cleared. Starting fresh.") })); + } + #[tokio::test] async fn process_channel_message_enriches_current_turn_without_persisting_context() { let channel_impl = Arc::new(RecordingChannel::default()); @@ -7403,6 +7721,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -7410,6 +7729,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -7501,6 +7821,7 @@ BTC is currently around $65,000 based on latest tool output."# max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(histories)), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -7508,6 +7829,7 @@ BTC is currently around $65,000 based on latest tool output."# reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -8063,6 +8385,7 @@ This is an example JSON object for profile settings."#; max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -8070,6 +8393,7 @@ This is an example JSON object for profile settings."#; reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -8142,6 +8466,7 @@ This is an example JSON object for profile settings."#; max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(HashMap::new())), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -8149,6 +8474,7 @@ This is an example JSON object for profile settings."#; reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -8295,6 +8621,7 @@ This is an example JSON object for profile settings."#; max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(provider_cache_seed)), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -8302,6 +8629,7 @@ This is an example JSON object for profile settings."#; reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -8398,6 +8726,7 @@ This is an example JSON object for profile settings."#; max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(provider_cache_seed)), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -8405,6 +8734,7 @@ This is an example JSON object for profile settings."#; reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -8493,6 +8823,7 @@ This is an example JSON object for profile settings."#; max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(provider_cache_seed)), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -8500,6 +8831,7 @@ This is an example JSON object for profile settings."#; reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, @@ -8608,6 +8940,7 @@ This is an example JSON object for profile settings."#; max_tool_iterations: 5, min_relevance_score: 0.0, conversation_histories: Arc::new(Mutex::new(HashMap::new())), + pending_new_sessions: Arc::new(Mutex::new(HashSet::new())), provider_cache: Arc::new(Mutex::new(provider_cache_seed)), route_overrides: Arc::new(Mutex::new(HashMap::new())), api_key: None, @@ -8615,6 +8948,7 @@ This is an example JSON object for profile settings."#; reliability: Arc::new(crate::config::ReliabilityConfig::default()), provider_runtime_options: providers::ProviderRuntimeOptions::default(), workspace_dir: Arc::new(std::env::temp_dir()), + prompt_config: Arc::new(crate::config::Config::default()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, interrupt_on_new_message: InterruptOnNewMessageConfig { telegram: false, From 2d68b880c29095956ecdc57362c52e3e2ece6e16 Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Thu, 19 Mar 2026 12:19:31 +0800 Subject: [PATCH 11/42] Fix /new regression test lint scope --- src/channels/mod.rs | 78 ++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/src/channels/mod.rs b/src/channels/mod.rs index 768205ff9..719bc65b1 100644 --- a/src/channels/mod.rs +++ b/src/channels/mod.rs @@ -7637,25 +7637,27 @@ BTC is currently around $65,000 based on latest tool output."# ) .await; - let histories = runtime_ctx - .conversation_histories - .lock() - .unwrap_or_else(|e| e.into_inner()); - assert!( - !histories.contains_key("telegram_alice"), - "/new should clear the cached sender history before the next message" - ); - drop(histories); + { + let histories = runtime_ctx + .conversation_histories + .lock() + .unwrap_or_else(|e| e.into_inner()); + assert!( + !histories.contains_key("telegram_alice"), + "/new should clear the cached sender history before the next message" + ); + } - let pending_new_sessions = runtime_ctx - .pending_new_sessions - .lock() - .unwrap_or_else(|e| e.into_inner()); - assert!( - pending_new_sessions.contains("telegram_alice"), - "/new should mark the sender for a fresh next-message prompt rebuild" - ); - drop(pending_new_sessions); + { + let pending_new_sessions = runtime_ctx + .pending_new_sessions + .lock() + .unwrap_or_else(|e| e.into_inner()); + assert!( + pending_new_sessions.contains("telegram_alice"), + "/new should mark the sender for a fresh next-message prompt rebuild" + ); + } process_channel_message( runtime_ctx, @@ -7672,25 +7674,27 @@ BTC is currently around $65,000 based on latest tool output."# ) .await; - let calls = provider_impl - .calls - .lock() - .unwrap_or_else(|e| e.into_inner()); - assert_eq!(calls.len(), 2); - assert_eq!(calls[0][0].0, "system"); - assert_eq!(calls[1][0].0, "system"); - assert!( - !calls[0][0].1.contains("refresh-test"), - "pre-/new prompt should not advertise a skill that did not exist yet" - ); - assert!( - calls[1][0].1.contains(""), - "post-/new prompt should contain the refreshed skills block" - ); - assert!( - calls[1][0].1.contains("refresh-test"), - "post-/new prompt should include skills discovered after the reset" - ); + { + let calls = provider_impl + .calls + .lock() + .unwrap_or_else(|e| e.into_inner()); + assert_eq!(calls.len(), 2); + assert_eq!(calls[0][0].0, "system"); + assert_eq!(calls[1][0].0, "system"); + assert!( + !calls[0][0].1.contains("refresh-test"), + "pre-/new prompt should not advertise a skill that did not exist yet" + ); + assert!( + calls[1][0].1.contains(""), + "post-/new prompt should contain the refreshed skills block" + ); + assert!( + calls[1][0].1.contains("refresh-test"), + "post-/new prompt should include skills discovered after the reset" + ); + } let sent_messages = channel_impl.sent_messages.lock().await; assert!(sent_messages From dd462a2b04e2030c16f6c6a4a3a68f7d1258bb26 Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Thu, 19 Mar 2026 13:47:08 +0800 Subject: [PATCH 12/42] test(claude_code): isolate echo script per test run --- src/providers/claude_code.rs | 50 +++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/providers/claude_code.rs b/src/providers/claude_code.rs index ad4f23a83..9f5c70e4f 100644 --- a/src/providers/claude_code.rs +++ b/src/providers/claude_code.rs @@ -279,6 +279,7 @@ impl Provider for ClaudeCodeProvider { #[cfg(test)] mod tests { use super::*; + use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::{Mutex, OnceLock}; fn env_lock() -> std::sync::MutexGuard<'static, ()> { @@ -375,32 +376,35 @@ mod tests { /// Helper: create a provider that uses a shell script echoing stdin back. /// The script ignores CLI flags (`--print`, `--model`, `-`) and just cats stdin. - /// - /// Uses `OnceLock` to write the script file exactly once, avoiding - /// "Text file busy" (ETXTBSY) races when parallel tests try to - /// overwrite a script that another test is currently executing. fn echo_provider() -> ClaudeCodeProvider { - use std::sync::OnceLock; + use std::io::Write; - static SCRIPT_PATH: OnceLock = OnceLock::new(); - let script = SCRIPT_PATH.get_or_init(|| { - use std::io::Write; - let dir = std::env::temp_dir().join("zeroclaw_test_claude_code"); - std::fs::create_dir_all(&dir).unwrap(); - let path = dir.join(format!("fake_claude_{}.sh", std::process::id())); - let mut f = std::fs::File::create(&path).unwrap(); - writeln!(f, "#!/bin/sh\ncat /dev/stdin").unwrap(); - drop(f); - #[cfg(unix)] - { - use std::os::unix::fs::PermissionsExt; - std::fs::set_permissions(&path, std::fs::Permissions::from_mode(0o755)).unwrap(); - } - path - }); - ClaudeCodeProvider { - binary_path: script.clone(), + static SCRIPT_ID: AtomicUsize = AtomicUsize::new(0); + let dir = std::env::temp_dir().join("zeroclaw_test_claude_code"); + std::fs::create_dir_all(&dir).unwrap(); + + let script_id = SCRIPT_ID.fetch_add(1, Ordering::Relaxed); + let path = dir.join(format!( + "fake_claude_{}_{}.sh", + std::process::id(), + script_id + )); + let mut f = std::fs::File::create(&path).unwrap(); + writeln!(f, "#!/bin/sh\ncat /dev/stdin").unwrap(); + drop(f); + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + std::fs::set_permissions(&path, std::fs::Permissions::from_mode(0o755)).unwrap(); } + ClaudeCodeProvider { binary_path: path } + } + + #[test] + fn echo_provider_uses_unique_script_paths() { + let first = echo_provider(); + let second = echo_provider(); + assert_ne!(first.binary_path, second.binary_path); } #[tokio::test] From 4b00e8ba75bfaf72a142a1a2f6fc5f187b8a57e5 Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Thu, 19 Mar 2026 15:11:47 +0800 Subject: [PATCH 13/42] fix(cron): default channel delivery to active reply target --- src/agent/loop_.rs | 285 ++++++++++++++++++++++++++++++++++++++++++ src/channels/mod.rs | 1 + src/tools/delegate.rs | 1 + 3 files changed, 287 insertions(+) diff --git a/src/agent/loop_.rs b/src/agent/loop_.rs index 5442f05c5..257c0f515 100644 --- a/src/agent/loop_.rs +++ b/src/agent/loop_.rs @@ -2181,6 +2181,7 @@ pub(crate) async fn agent_turn( temperature: f64, silent: bool, channel_name: &str, + channel_reply_target: Option<&str>, multimodal_config: &crate::config::MultimodalConfig, max_tool_iterations: usize, excluded_tools: &[String], @@ -2199,6 +2200,7 @@ pub(crate) async fn agent_turn( silent, None, channel_name, + channel_reply_target, multimodal_config, max_tool_iterations, None, @@ -2212,6 +2214,100 @@ pub(crate) async fn agent_turn( .await } +fn maybe_inject_channel_delivery_defaults( + tool_name: &str, + tool_args: &mut serde_json::Value, + channel_name: &str, + channel_reply_target: Option<&str>, +) { + if tool_name != "cron_add" { + return; + } + + if !matches!( + channel_name, + "telegram" | "discord" | "slack" | "mattermost" | "matrix" + ) { + return; + } + + let Some(reply_target) = channel_reply_target + .map(str::trim) + .filter(|value| !value.is_empty()) + else { + return; + }; + + let Some(args) = tool_args.as_object_mut() else { + return; + }; + + let is_agent_job = args + .get("job_type") + .and_then(serde_json::Value::as_str) + .is_some_and(|job_type| job_type.eq_ignore_ascii_case("agent")) + || args + .get("prompt") + .and_then(serde_json::Value::as_str) + .is_some_and(|prompt| !prompt.trim().is_empty()); + if !is_agent_job { + return; + } + + let default_delivery = || { + serde_json::json!({ + "mode": "announce", + "channel": channel_name, + "to": reply_target, + }) + }; + + match args.get_mut("delivery") { + None => { + args.insert("delivery".to_string(), default_delivery()); + } + Some(serde_json::Value::Null) => { + *args.get_mut("delivery").expect("delivery key exists") = default_delivery(); + } + Some(serde_json::Value::Object(delivery)) => { + if delivery + .get("mode") + .and_then(serde_json::Value::as_str) + .is_some_and(|mode| mode.eq_ignore_ascii_case("none")) + { + return; + } + + delivery + .entry("mode".to_string()) + .or_insert_with(|| serde_json::Value::String("announce".to_string())); + + let needs_channel = delivery + .get("channel") + .and_then(serde_json::Value::as_str) + .is_none_or(|value| value.trim().is_empty()); + if needs_channel { + delivery.insert( + "channel".to_string(), + serde_json::Value::String(channel_name.to_string()), + ); + } + + let needs_target = delivery + .get("to") + .and_then(serde_json::Value::as_str) + .is_none_or(|value| value.trim().is_empty()); + if needs_target { + delivery.insert( + "to".to_string(), + serde_json::Value::String(reply_target.to_string()), + ); + } + } + Some(_) => {} + } +} + async fn execute_one_tool( call_name: &str, call_arguments: serde_json::Value, @@ -2405,6 +2501,7 @@ pub(crate) async fn run_tool_call_loop( silent: bool, approval: Option<&ApprovalManager>, channel_name: &str, + channel_reply_target: Option<&str>, multimodal_config: &crate::config::MultimodalConfig, max_tool_iterations: usize, cancellation_token: Option, @@ -2815,6 +2912,13 @@ pub(crate) async fn run_tool_call_loop( } } + maybe_inject_channel_delivery_defaults( + &tool_name, + &mut tool_args, + channel_name, + channel_reply_target, + ); + // ── Approval hook ──────────────────────────────── if let Some(mgr) = approval { if mgr.needs_approval(&tool_name) { @@ -3556,6 +3660,7 @@ pub async fn run( false, approval_manager.as_ref(), channel_name, + None, &config.multimodal, config.agent.max_tool_iterations, None, @@ -3782,6 +3887,7 @@ pub async fn run( false, approval_manager.as_ref(), channel_name, + None, &config.multimodal, config.agent.max_tool_iterations, None, @@ -4146,6 +4252,7 @@ pub async fn process_message( config.default_temperature, true, "daemon", + None, &config.multimodal, config.agent.max_tool_iterations, &excluded_tools, @@ -4463,6 +4570,57 @@ mod tests { } } + struct RecordingArgsTool { + name: String, + recorded_args: Arc>>, + } + + impl RecordingArgsTool { + fn new(name: &str, recorded_args: Arc>>) -> Self { + Self { + name: name.to_string(), + recorded_args, + } + } + } + + #[async_trait] + impl Tool for RecordingArgsTool { + fn name(&self) -> &str { + &self.name + } + + fn description(&self) -> &str { + "Records tool arguments for regression tests" + } + + fn parameters_schema(&self) -> serde_json::Value { + serde_json::json!({ + "type": "object", + "properties": { + "prompt": { "type": "string" }, + "schedule": { "type": "object" }, + "delivery": { "type": "object" } + } + }) + } + + async fn execute( + &self, + args: serde_json::Value, + ) -> anyhow::Result { + self.recorded_args + .lock() + .expect("recorded args lock should be valid") + .push(args.clone()); + Ok(crate::tools::ToolResult { + success: true, + output: args.to_string(), + error: None, + }) + } + } + struct DelayTool { name: String, delay_ms: u64, @@ -4601,6 +4759,7 @@ mod tests { true, None, "cli", + None, &crate::config::MultimodalConfig::default(), 3, None, @@ -4650,6 +4809,7 @@ mod tests { true, None, "cli", + None, &multimodal, 3, None, @@ -4693,6 +4853,7 @@ mod tests { true, None, "cli", + None, &crate::config::MultimodalConfig::default(), 3, None, @@ -4822,6 +4983,7 @@ mod tests { true, Some(&approval_mgr), "telegram", + None, &crate::config::MultimodalConfig::default(), 4, None, @@ -4859,6 +5021,122 @@ mod tests { ); } + #[tokio::test] + async fn run_tool_call_loop_injects_channel_delivery_defaults_for_cron_add() { + let provider = ScriptedProvider::from_text_responses(vec![ + r#" +{"name":"cron_add","arguments":{"job_type":"agent","prompt":"remind me later","schedule":{"kind":"every","every_ms":60000}}} +"#, + "done", + ]); + + let recorded_args = Arc::new(Mutex::new(Vec::new())); + let tools_registry: Vec> = vec![Box::new(RecordingArgsTool::new( + "cron_add", + Arc::clone(&recorded_args), + ))]; + + let mut history = vec![ + ChatMessage::system("test-system"), + ChatMessage::user("schedule a reminder"), + ]; + let observer = NoopObserver; + + let result = run_tool_call_loop( + &provider, + &mut history, + &tools_registry, + &observer, + "mock-provider", + "mock-model", + 0.0, + true, + None, + "telegram", + Some("chat-42"), + &crate::config::MultimodalConfig::default(), + 4, + None, + None, + None, + &[], + &[], + None, + None, + ) + .await + .expect("cron_add delivery defaults should be injected"); + + assert_eq!(result, "done"); + + let recorded = recorded_args + .lock() + .expect("recorded args lock should be valid"); + let delivery = recorded[0]["delivery"].clone(); + assert_eq!( + delivery, + serde_json::json!({ + "mode": "announce", + "channel": "telegram", + "to": "chat-42", + }) + ); + } + + #[tokio::test] + async fn run_tool_call_loop_preserves_explicit_cron_delivery_none() { + let provider = ScriptedProvider::from_text_responses(vec![ + r#" +{"name":"cron_add","arguments":{"job_type":"agent","prompt":"run silently","schedule":{"kind":"every","every_ms":60000},"delivery":{"mode":"none"}}} +"#, + "done", + ]); + + let recorded_args = Arc::new(Mutex::new(Vec::new())); + let tools_registry: Vec> = vec![Box::new(RecordingArgsTool::new( + "cron_add", + Arc::clone(&recorded_args), + ))]; + + let mut history = vec![ + ChatMessage::system("test-system"), + ChatMessage::user("schedule a quiet cron job"), + ]; + let observer = NoopObserver; + + let result = run_tool_call_loop( + &provider, + &mut history, + &tools_registry, + &observer, + "mock-provider", + "mock-model", + 0.0, + true, + None, + "telegram", + Some("chat-42"), + &crate::config::MultimodalConfig::default(), + 4, + None, + None, + None, + &[], + &[], + None, + None, + ) + .await + .expect("explicit delivery mode should be preserved"); + + assert_eq!(result, "done"); + + let recorded = recorded_args + .lock() + .expect("recorded args lock should be valid"); + assert_eq!(recorded[0]["delivery"], serde_json::json!({"mode": "none"})); + } + #[tokio::test] async fn run_tool_call_loop_deduplicates_repeated_tool_calls() { let provider = ScriptedProvider::from_text_responses(vec![ @@ -4894,6 +5172,7 @@ mod tests { true, None, "cli", + None, &crate::config::MultimodalConfig::default(), 4, None, @@ -4962,6 +5241,7 @@ mod tests { true, Some(&approval_mgr), "telegram", + None, &crate::config::MultimodalConfig::default(), 4, None, @@ -5021,6 +5301,7 @@ mod tests { true, None, "cli", + None, &crate::config::MultimodalConfig::default(), 4, None, @@ -5100,6 +5381,7 @@ mod tests { true, None, "cli", + None, &crate::config::MultimodalConfig::default(), 4, None, @@ -5156,6 +5438,7 @@ mod tests { true, None, "cli", + None, &crate::config::MultimodalConfig::default(), 4, None, @@ -5228,6 +5511,7 @@ mod tests { 0.0, true, "daemon", + None, &crate::config::MultimodalConfig::default(), 4, &[], @@ -7117,6 +7401,7 @@ Let me check the result."#; true, None, "telegram", + None, &crate::config::MultimodalConfig::default(), 4, None, diff --git a/src/channels/mod.rs b/src/channels/mod.rs index e34117a08..594891c1e 100644 --- a/src/channels/mod.rs +++ b/src/channels/mod.rs @@ -2239,6 +2239,7 @@ async fn process_channel_message( true, Some(&*ctx.approval_manager), msg.channel.as_str(), + Some(msg.reply_target.as_str()), &ctx.multimodal, ctx.max_tool_iterations, Some(cancellation_token.clone()), diff --git a/src/tools/delegate.rs b/src/tools/delegate.rs index 30c4aa0eb..8363209bb 100644 --- a/src/tools/delegate.rs +++ b/src/tools/delegate.rs @@ -418,6 +418,7 @@ impl DelegateTool { true, None, "delegate", + None, &self.multimodal_config, agent_config.max_iterations, None, From c7b3b762e00f2281c5b2ebe99dc89c7fde6e570a Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Thu, 19 Mar 2026 15:30:40 +0800 Subject: [PATCH 14/42] fix(onboard): warn when Homebrew service uses another workspace --- src/onboard/wizard.rs | 97 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/src/onboard/wizard.rs b/src/onboard/wizard.rs index dc664a33a..91f611416 100644 --- a/src/onboard/wizard.rs +++ b/src/onboard/wizard.rs @@ -463,6 +463,47 @@ fn resolve_quick_setup_dirs_with_home(home: &Path) -> (PathBuf, PathBuf) { (config_dir.clone(), config_dir.join("workspace")) } +fn homebrew_prefix_for_exe(exe: &Path) -> Option<&'static str> { + let exe = exe.to_string_lossy(); + if exe == "/opt/homebrew/bin/zeroclaw" + || exe.starts_with("/opt/homebrew/Cellar/zeroclaw/") + || exe.starts_with("/opt/homebrew/opt/zeroclaw/") + { + return Some("/opt/homebrew"); + } + + if exe == "/usr/local/bin/zeroclaw" + || exe.starts_with("/usr/local/Cellar/zeroclaw/") + || exe.starts_with("/usr/local/opt/zeroclaw/") + { + return Some("/usr/local"); + } + + None +} + +fn quick_setup_homebrew_service_note( + config_path: &Path, + workspace_dir: &Path, + exe: &Path, +) -> Option { + let prefix = homebrew_prefix_for_exe(exe)?; + let service_root = Path::new(prefix).join("var").join("zeroclaw"); + let service_config = service_root.join("config.toml"); + let service_workspace = service_root.join("workspace"); + + if config_path == service_config || workspace_dir == service_workspace { + return None; + } + + Some(format!( + "Homebrew service note: `brew services` uses {} (config {}) by default. Your onboarding just wrote {}. If you plan to run ZeroClaw as a service, copy or link this workspace first.", + service_workspace.display(), + service_config.display(), + config_path.display(), + )) +} + #[allow(clippy::too_many_lines)] async fn run_quick_setup_with_home( credential_override: Option<&str>, @@ -650,6 +691,16 @@ async fn run_quick_setup_with_home( style("Config saved:").white().bold(), style(config_path.display()).green() ); + if cfg!(target_os = "macos") { + if let Ok(exe) = std::env::current_exe() { + if let Some(note) = + quick_setup_homebrew_service_note(&config_path, &workspace_dir, &exe) + { + println!(); + println!(" {}", style(note).yellow()); + } + } + } println!(); println!(" {}", style("Next steps:").white().bold()); if credential_override.is_none() { @@ -6066,6 +6117,52 @@ mod tests { assert_eq!(config.config_path, expected_config_path); } + #[test] + fn homebrew_prefix_for_exe_detects_supported_layouts() { + assert_eq!( + homebrew_prefix_for_exe(Path::new("/opt/homebrew/bin/zeroclaw")), + Some("/opt/homebrew") + ); + assert_eq!( + homebrew_prefix_for_exe(Path::new( + "/opt/homebrew/Cellar/zeroclaw/0.5.0/bin/zeroclaw", + )), + Some("/opt/homebrew") + ); + assert_eq!( + homebrew_prefix_for_exe(Path::new("/usr/local/bin/zeroclaw")), + Some("/usr/local") + ); + assert_eq!(homebrew_prefix_for_exe(Path::new("/tmp/zeroclaw")), None); + } + + #[test] + fn quick_setup_homebrew_service_note_mentions_service_workspace() { + let note = quick_setup_homebrew_service_note( + Path::new("/Users/alix/.zeroclaw/config.toml"), + Path::new("/Users/alix/.zeroclaw/workspace"), + Path::new("/opt/homebrew/bin/zeroclaw"), + ) + .expect("homebrew installs should emit a service workspace note"); + + assert!(note.contains("/opt/homebrew/var/zeroclaw/workspace")); + assert!(note.contains("/opt/homebrew/var/zeroclaw/config.toml")); + assert!(note.contains("/Users/alix/.zeroclaw/config.toml")); + } + + #[test] + fn quick_setup_homebrew_service_note_skips_matching_service_layout() { + let service_config = Path::new("/opt/homebrew/var/zeroclaw/config.toml"); + let service_workspace = Path::new("/opt/homebrew/var/zeroclaw/workspace"); + + assert!(quick_setup_homebrew_service_note( + service_config, + service_workspace, + Path::new("/opt/homebrew/bin/zeroclaw"), + ) + .is_none()); + } + // ── scaffold_workspace: basic file creation ───────────────── #[tokio::test] From 7ddd2aace3d846014281b9e4ffee1d19db583533 Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Thu, 19 Mar 2026 15:37:45 +0800 Subject: [PATCH 15/42] build(release): ship postgres-capable release artifacts --- .github/workflows/release-beta-on-push.yml | 3 ++- .github/workflows/release-stable-manual.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-beta-on-push.yml b/.github/workflows/release-beta-on-push.yml index 45bed0824..619cbe24d 100644 --- a/.github/workflows/release-beta-on-push.yml +++ b/.github/workflows/release-beta-on-push.yml @@ -16,6 +16,7 @@ env: CARGO_TERM_COLOR: always REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} + RELEASE_CARGO_FEATURES: channel-matrix,memory-postgres jobs: version: @@ -213,7 +214,7 @@ jobs: if [ -n "${{ matrix.linker_env || '' }}" ] && [ -n "${{ matrix.linker || '' }}" ]; then export "${{ matrix.linker_env }}=${{ matrix.linker }}" fi - cargo build --release --locked --features channel-matrix --target ${{ matrix.target }} + cargo build --release --locked --features "${{ env.RELEASE_CARGO_FEATURES }}" --target ${{ matrix.target }} - name: Package (Unix) if: runner.os != 'Windows' diff --git a/.github/workflows/release-stable-manual.yml b/.github/workflows/release-stable-manual.yml index 590061e2c..93bbf5188 100644 --- a/.github/workflows/release-stable-manual.yml +++ b/.github/workflows/release-stable-manual.yml @@ -20,6 +20,7 @@ env: CARGO_TERM_COLOR: always REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} + RELEASE_CARGO_FEATURES: channel-matrix,memory-postgres jobs: validate: @@ -214,7 +215,7 @@ jobs: if [ -n "${{ matrix.linker_env || '' }}" ] && [ -n "${{ matrix.linker || '' }}" ]; then export "${{ matrix.linker_env }}=${{ matrix.linker }}" fi - cargo build --release --locked --features channel-matrix --target ${{ matrix.target }} + cargo build --release --locked --features "${{ env.RELEASE_CARGO_FEATURES }}" --target ${{ matrix.target }} - name: Package (Unix) if: runner.os != 'Windows' From b6fe054915e07bc2deb2865ef3d7e6c718a3943b Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Thu, 19 Mar 2026 16:32:06 +0800 Subject: [PATCH 16/42] fix(zai): send tool_stream for tool-capable requests --- src/providers/compatible.rs | 102 ++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/src/providers/compatible.rs b/src/providers/compatible.rs index 733448e1e..8fd4ab29f 100644 --- a/src/providers/compatible.rs +++ b/src/providers/compatible.rs @@ -335,6 +335,23 @@ impl OpenAiCompatibleProvider { !path.is_empty() && path != "/" } + fn requires_tool_stream(&self) -> bool { + let host_requires_tool_stream = reqwest::Url::parse(&self.base_url) + .ok() + .and_then(|url| url.host_str().map(str::to_ascii_lowercase)) + .is_some_and(|host| host == "api.z.ai" || host.ends_with(".z.ai")); + + host_requires_tool_stream || matches!(self.name.as_str(), "zai" | "z.ai") + } + + fn tool_stream_for_tools(&self, has_tools: bool) -> Option { + if has_tools && self.requires_tool_stream() { + Some(true) + } else { + None + } + } + /// Build the full URL for responses API, detecting if base_url already includes the path. fn responses_url(&self) -> String { if self.path_ends_with("/responses") { @@ -392,6 +409,8 @@ struct ApiChatRequest { #[serde(skip_serializing_if = "Option::is_none")] reasoning_effort: Option, #[serde(skip_serializing_if = "Option::is_none")] + tool_stream: Option, + #[serde(skip_serializing_if = "Option::is_none")] tools: Option>, #[serde(skip_serializing_if = "Option::is_none")] tool_choice: Option, @@ -590,6 +609,8 @@ struct NativeChatRequest { #[serde(skip_serializing_if = "Option::is_none")] reasoning_effort: Option, #[serde(skip_serializing_if = "Option::is_none")] + tool_stream: Option, + #[serde(skip_serializing_if = "Option::is_none")] tools: Option>, #[serde(skip_serializing_if = "Option::is_none")] tool_choice: Option, @@ -1264,6 +1285,7 @@ impl Provider for OpenAiCompatibleProvider { temperature, stream: Some(false), reasoning_effort: self.reasoning_effort_for_model(model), + tool_stream: None, tools: None, tool_choice: None, }; @@ -1387,6 +1409,7 @@ impl Provider for OpenAiCompatibleProvider { temperature, stream: Some(false), reasoning_effort: self.reasoning_effort_for_model(model), + tool_stream: None, tools: None, tool_choice: None, }; @@ -1498,6 +1521,7 @@ impl Provider for OpenAiCompatibleProvider { temperature, stream: Some(false), reasoning_effort: self.reasoning_effort_for_model(model), + tool_stream: self.tool_stream_for_tools(!tools.is_empty()), tools: if tools.is_empty() { None } else { @@ -1604,6 +1628,9 @@ impl Provider for OpenAiCompatibleProvider { temperature, stream: Some(false), reasoning_effort: self.reasoning_effort_for_model(model), + tool_stream: self.tool_stream_for_tools( + tools.as_ref().is_some_and(|tools| !tools.is_empty()), + ), tool_choice: tools.as_ref().map(|_| "auto".to_string()), tools, }; @@ -1748,6 +1775,7 @@ impl Provider for OpenAiCompatibleProvider { temperature, stream: Some(options.enabled), reasoning_effort: self.reasoning_effort_for_model(model), + tool_stream: None, tools: None, tool_choice: None, }; @@ -1890,6 +1918,7 @@ mod tests { temperature: 0.4, stream: Some(false), reasoning_effort: None, + tool_stream: None, tools: None, tool_choice: None, }; @@ -2671,6 +2700,7 @@ mod tests { temperature: 0.7, stream: Some(false), reasoning_effort: None, + tool_stream: None, tools: Some(tools), tool_choice: Some("auto".to_string()), }; @@ -2680,6 +2710,78 @@ mod tests { assert!(json.contains("\"tool_choice\":\"auto\"")); } + #[test] + fn zai_tool_requests_enable_tool_stream() { + let provider = make_provider("zai", "https://api.z.ai/api/paas/v4", None); + let req = ApiChatRequest { + model: "glm-5".to_string(), + messages: vec![Message { + role: "user".to_string(), + content: MessageContent::Text("List /tmp".to_string()), + }], + temperature: 0.7, + stream: Some(false), + reasoning_effort: None, + tool_stream: provider.tool_stream_for_tools(true), + tools: Some(vec![serde_json::json!({ + "type": "function", + "function": { + "name": "shell", + "description": "Run a shell command", + "parameters": { + "type": "object", + "properties": { + "command": {"type": "string"} + } + } + } + })]), + tool_choice: Some("auto".to_string()), + }; + + let json = serde_json::to_string(&req).unwrap(); + assert!(json.contains("\"tool_stream\":true")); + } + + #[test] + fn non_zai_tool_requests_omit_tool_stream() { + let provider = make_provider("test", "https://api.example.com/v1", None); + let req = ApiChatRequest { + model: "test-model".to_string(), + messages: vec![Message { + role: "user".to_string(), + content: MessageContent::Text("List /tmp".to_string()), + }], + temperature: 0.7, + stream: Some(false), + reasoning_effort: None, + tool_stream: provider.tool_stream_for_tools(true), + tools: Some(vec![serde_json::json!({ + "type": "function", + "function": { + "name": "shell", + "description": "Run a shell command", + "parameters": { + "type": "object", + "properties": { + "command": {"type": "string"} + } + } + } + })]), + tool_choice: Some("auto".to_string()), + }; + + let json = serde_json::to_string(&req).unwrap(); + assert!(!json.contains("\"tool_stream\"")); + } + + #[test] + fn z_ai_host_enables_tool_stream_for_custom_profiles() { + let provider = make_provider("custom", "https://api.z.ai/api/coding/paas/v4", None); + assert_eq!(provider.tool_stream_for_tools(true), Some(true)); + } + #[test] fn response_with_tool_calls_deserializes() { let json = r#"{ From b1d20d38f9fcdd0f8aaecfa7c315161e047352ba Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:53:40 +0800 Subject: [PATCH 17/42] feat(skills): add read_skill for compact mode --- src/agent/loop_.rs | 18 ++++ src/agent/prompt.rs | 1 + src/channels/mod.rs | 10 +++ src/onboard/wizard.rs | 2 +- src/skills/mod.rs | 13 ++- src/tools/mod.rs | 81 +++++++++++++++++ src/tools/read_skill.rs | 187 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 310 insertions(+), 2 deletions(-) create mode 100644 src/tools/read_skill.rs diff --git a/src/agent/loop_.rs b/src/agent/loop_.rs index 5442f05c5..0ce458ed9 100644 --- a/src/agent/loop_.rs +++ b/src/agent/loop_.rs @@ -3369,6 +3369,15 @@ pub async fn run( "Delete a memory entry. Use when: memory is incorrect/stale or explicitly requested for removal. Don't use when: impact is uncertain.", ), ]; + if matches!( + config.skills.prompt_injection_mode, + crate::config::SkillsPromptInjectionMode::Compact + ) { + tool_descs.push(( + "read_skill", + "Load the full source for an available skill by name. Use when: compact mode only shows a summary and you need the complete skill instructions.", + )); + } tool_descs.push(( "cron_add", "Create a cron job. Supports schedule kinds: cron, at, every; and job types: shell or agent.", @@ -4052,6 +4061,15 @@ pub async fn process_message( ("screenshot", "Capture a screenshot."), ("image_info", "Read image metadata."), ]; + if matches!( + config.skills.prompt_injection_mode, + crate::config::SkillsPromptInjectionMode::Compact + ) { + tool_descs.push(( + "read_skill", + "Load the full source for an available skill by name.", + )); + } if config.browser.enabled { tool_descs.push(("browser_open", "Open approved URLs in browser.")); } diff --git a/src/agent/prompt.rs b/src/agent/prompt.rs index eb0291a15..721e9aad2 100644 --- a/src/agent/prompt.rs +++ b/src/agent/prompt.rs @@ -436,6 +436,7 @@ mod tests { assert!(output.contains("")); assert!(output.contains("deploy")); assert!(output.contains("skills/deploy/SKILL.md")); + assert!(output.contains("read_skill(name)")); assert!(!output.contains("Run smoke tests before deploy.")); assert!(!output.contains("")); } diff --git a/src/channels/mod.rs b/src/channels/mod.rs index e34117a08..8339a51c9 100644 --- a/src/channels/mod.rs +++ b/src/channels/mod.rs @@ -3977,6 +3977,16 @@ pub async fn start_channels(config: Config) -> Result<()> { ), ]; + if matches!( + config.skills.prompt_injection_mode, + crate::config::SkillsPromptInjectionMode::Compact + ) { + tool_descs.push(( + "read_skill", + "Load the full source for an available skill by name. Use when: compact mode only shows a summary and you need the complete skill instructions.", + )); + } + if config.browser.enabled { tool_descs.push(( "browser_open", diff --git a/src/onboard/wizard.rs b/src/onboard/wizard.rs index dc664a33a..d796c21dc 100644 --- a/src/onboard/wizard.rs +++ b/src/onboard/wizard.rs @@ -5367,7 +5367,7 @@ async fn scaffold_workspace(workspace_dir: &Path, ctx: &ProjectContext) -> Resul Participate, don't dominate. Respond when mentioned or when you add genuine value.\n\ Stay silent when it's casual banter or someone already answered.\n\n\ ## Tools & Skills\n\n\ - Skills are listed in the system prompt. Use `read` on a skill's SKILL.md for details.\n\ + Skills are listed in the system prompt. Use `read_skill` when available, or `file_read` on a skill file, for full details.\n\ Keep local notes (SSH hosts, device names, etc.) in `TOOLS.md`.\n\n\ ## Crash Recovery\n\n\ - If a run stops unexpectedly, recover context before acting.\n\ diff --git a/src/skills/mod.rs b/src/skills/mod.rs index ff8f902e2..9d1042496 100644 --- a/src/skills/mod.rs +++ b/src/skills/mod.rs @@ -97,6 +97,15 @@ pub fn load_skills_with_config(workspace_dir: &Path, config: &crate::config::Con ) } +/// Load skills using explicit open-skills settings. +pub fn load_skills_with_open_skills_settings( + workspace_dir: &Path, + open_skills_enabled: bool, + open_skills_dir: Option<&str>, +) -> Vec { + load_skills_with_open_skills_config(workspace_dir, Some(open_skills_enabled), open_skills_dir) +} + fn load_skills_with_open_skills_config( workspace_dir: &Path, config_open_skills_enabled: Option, @@ -674,7 +683,8 @@ pub fn skills_to_prompt_with_mode( crate::config::SkillsPromptInjectionMode::Compact => String::from( "## Available Skills\n\n\ Skill summaries are preloaded below to keep context compact.\n\ - Skill instructions are loaded on demand: read the skill file in `location` only when needed.\n\n\ + Skill instructions are loaded on demand: call `read_skill(name)` with the skill's `` when you need the full skill file.\n\ + The `location` field is included for reference.\n\n\ \n", ), }; @@ -1267,6 +1277,7 @@ command = "echo hello" assert!(prompt.contains("test")); assert!(prompt.contains("skills/test/SKILL.md")); assert!(prompt.contains("loaded on demand")); + assert!(prompt.contains("read_skill(name)")); assert!(!prompt.contains("")); assert!(!prompt.contains("Do the thing.")); assert!(!prompt.contains("")); diff --git a/src/tools/mod.rs b/src/tools/mod.rs index d6880aac4..f4ebee32c 100644 --- a/src/tools/mod.rs +++ b/src/tools/mod.rs @@ -66,6 +66,7 @@ pub mod pdf_read; pub mod project_intel; pub mod proxy_config; pub mod pushover; +pub mod read_skill; pub mod report_templates; pub mod schedule; pub mod schema; @@ -128,6 +129,7 @@ pub use pdf_read::PdfReadTool; pub use project_intel::ProjectIntelTool; pub use proxy_config::ProxyConfigTool; pub use pushover::PushoverTool; +pub use read_skill::ReadSkillTool; pub use schedule::ScheduleTool; #[allow(unused_imports)] pub use schema::{CleaningStrategy, SchemaCleanr}; @@ -316,6 +318,17 @@ pub fn all_tools_with_runtime( )), ]; + if matches!( + root_config.skills.prompt_injection_mode, + crate::config::SkillsPromptInjectionMode::Compact + ) { + tool_arcs.push(Arc::new(ReadSkillTool::new( + workspace_dir.to_path_buf(), + root_config.skills.open_skills_enabled, + root_config.skills.open_skills_dir.clone(), + ))); + } + if browser_config.enabled { // Add legacy browser_open tool for simple URL opening tool_arcs.push(Arc::new(BrowserOpenTool::new( @@ -972,4 +985,72 @@ mod tests { let names: Vec<&str> = tools.iter().map(|t| t.name()).collect(); assert!(!names.contains(&"delegate")); } + + #[test] + fn all_tools_includes_read_skill_in_compact_mode() { + let tmp = TempDir::new().unwrap(); + let security = Arc::new(SecurityPolicy::default()); + let mem_cfg = MemoryConfig { + backend: "markdown".into(), + ..MemoryConfig::default() + }; + let mem: Arc = + Arc::from(crate::memory::create_memory(&mem_cfg, tmp.path(), None).unwrap()); + + let browser = BrowserConfig::default(); + let http = crate::config::HttpRequestConfig::default(); + let mut cfg = test_config(&tmp); + cfg.skills.prompt_injection_mode = crate::config::SkillsPromptInjectionMode::Compact; + + let (tools, _) = all_tools( + Arc::new(cfg.clone()), + &security, + mem, + None, + None, + &browser, + &http, + &crate::config::WebFetchConfig::default(), + tmp.path(), + &HashMap::new(), + None, + &cfg, + ); + let names: Vec<&str> = tools.iter().map(|t| t.name()).collect(); + assert!(names.contains(&"read_skill")); + } + + #[test] + fn all_tools_excludes_read_skill_in_full_mode() { + let tmp = TempDir::new().unwrap(); + let security = Arc::new(SecurityPolicy::default()); + let mem_cfg = MemoryConfig { + backend: "markdown".into(), + ..MemoryConfig::default() + }; + let mem: Arc = + Arc::from(crate::memory::create_memory(&mem_cfg, tmp.path(), None).unwrap()); + + let browser = BrowserConfig::default(); + let http = crate::config::HttpRequestConfig::default(); + let mut cfg = test_config(&tmp); + cfg.skills.prompt_injection_mode = crate::config::SkillsPromptInjectionMode::Full; + + let (tools, _) = all_tools( + Arc::new(cfg.clone()), + &security, + mem, + None, + None, + &browser, + &http, + &crate::config::WebFetchConfig::default(), + tmp.path(), + &HashMap::new(), + None, + &cfg, + ); + let names: Vec<&str> = tools.iter().map(|t| t.name()).collect(); + assert!(!names.contains(&"read_skill")); + } } diff --git a/src/tools/read_skill.rs b/src/tools/read_skill.rs new file mode 100644 index 000000000..41e7a871b --- /dev/null +++ b/src/tools/read_skill.rs @@ -0,0 +1,187 @@ +use super::traits::{Tool, ToolResult}; +use async_trait::async_trait; +use serde_json::json; +use std::path::PathBuf; + +/// Compact-mode helper for loading a skill's source file on demand. +pub struct ReadSkillTool { + workspace_dir: PathBuf, + open_skills_enabled: bool, + open_skills_dir: Option, +} + +impl ReadSkillTool { + pub fn new( + workspace_dir: PathBuf, + open_skills_enabled: bool, + open_skills_dir: Option, + ) -> Self { + Self { + workspace_dir, + open_skills_enabled, + open_skills_dir, + } + } +} + +#[async_trait] +impl Tool for ReadSkillTool { + fn name(&self) -> &str { + "read_skill" + } + + fn description(&self) -> &str { + "Read the full source file for an available skill by name. Use this in compact skills mode when you need the complete skill instructions without remembering file paths." + } + + fn parameters_schema(&self) -> serde_json::Value { + json!({ + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The skill name exactly as listed in ." + } + }, + "required": ["name"] + }) + } + + async fn execute(&self, args: serde_json::Value) -> anyhow::Result { + let requested = args + .get("name") + .and_then(|value| value.as_str()) + .map(str::trim) + .filter(|value| !value.is_empty()) + .ok_or_else(|| anyhow::anyhow!("Missing 'name' parameter"))?; + + let skills = crate::skills::load_skills_with_open_skills_settings( + &self.workspace_dir, + self.open_skills_enabled, + self.open_skills_dir.as_deref(), + ); + + let Some(skill) = skills + .iter() + .find(|skill| skill.name.eq_ignore_ascii_case(requested)) + else { + let mut names: Vec<&str> = skills.iter().map(|skill| skill.name.as_str()).collect(); + names.sort_unstable(); + let available = if names.is_empty() { + "none".to_string() + } else { + names.join(", ") + }; + + return Ok(ToolResult { + success: false, + output: String::new(), + error: Some(format!( + "Unknown skill '{requested}'. Available skills: {available}" + )), + }); + }; + + let Some(location) = skill.location.as_ref() else { + return Ok(ToolResult { + success: false, + output: String::new(), + error: Some(format!( + "Skill '{}' has no readable source location.", + skill.name + )), + }); + }; + + match tokio::fs::read_to_string(location).await { + Ok(output) => Ok(ToolResult { + success: true, + output, + error: None, + }), + Err(err) => Ok(ToolResult { + success: false, + output: String::new(), + error: Some(format!( + "Failed to read skill '{}' from {}: {err}", + skill.name, + location.display() + )), + }), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use tempfile::TempDir; + + fn make_tool(tmp: &TempDir) -> ReadSkillTool { + ReadSkillTool::new(tmp.path().join("workspace"), false, None) + } + + #[tokio::test] + async fn reads_markdown_skill_by_name() { + let tmp = TempDir::new().unwrap(); + let skill_dir = tmp.path().join("workspace/skills/weather"); + std::fs::create_dir_all(&skill_dir).unwrap(); + std::fs::write( + skill_dir.join("SKILL.md"), + "# Weather\n\nUse this skill for forecast lookups.\n", + ) + .unwrap(); + + let result = make_tool(&tmp) + .execute(json!({ "name": "weather" })) + .await + .unwrap(); + + assert!(result.success); + assert!(result.output.contains("# Weather")); + assert!(result.output.contains("forecast lookups")); + } + + #[tokio::test] + async fn reads_toml_skill_manifest_by_name() { + let tmp = TempDir::new().unwrap(); + let skill_dir = tmp.path().join("workspace/skills/deploy"); + std::fs::create_dir_all(&skill_dir).unwrap(); + std::fs::write( + skill_dir.join("SKILL.toml"), + r#"[skill] +name = "deploy" +description = "Ship safely" +"#, + ) + .unwrap(); + + let result = make_tool(&tmp) + .execute(json!({ "name": "deploy" })) + .await + .unwrap(); + + assert!(result.success); + assert!(result.output.contains("[skill]")); + assert!(result.output.contains("Ship safely")); + } + + #[tokio::test] + async fn unknown_skill_lists_available_names() { + let tmp = TempDir::new().unwrap(); + let skill_dir = tmp.path().join("workspace/skills/weather"); + std::fs::create_dir_all(&skill_dir).unwrap(); + std::fs::write(skill_dir.join("SKILL.md"), "# Weather\n").unwrap(); + + let result = make_tool(&tmp) + .execute(json!({ "name": "calendar" })) + .await + .unwrap(); + + assert!(!result.success); + assert_eq!( + result.error.as_deref(), + Some("Unknown skill 'calendar'. Available skills: weather") + ); + } +} From 0d28cca8436ae7cb15f6418c593427544d4286d7 Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Thu, 19 Mar 2026 19:14:07 +0800 Subject: [PATCH 18/42] build(release): drop stale docker feature args --- .github/workflows/release-beta-on-push.yml | 2 -- .github/workflows/release-stable-manual.yml | 2 -- 2 files changed, 4 deletions(-) diff --git a/.github/workflows/release-beta-on-push.yml b/.github/workflows/release-beta-on-push.yml index 619cbe24d..d97933051 100644 --- a/.github/workflows/release-beta-on-push.yml +++ b/.github/workflows/release-beta-on-push.yml @@ -346,8 +346,6 @@ jobs: with: context: docker-ctx push: true - build-args: | - ZEROCLAW_CARGO_FEATURES=channel-matrix tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.version.outputs.tag }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:beta diff --git a/.github/workflows/release-stable-manual.yml b/.github/workflows/release-stable-manual.yml index 93bbf5188..72b810b3c 100644 --- a/.github/workflows/release-stable-manual.yml +++ b/.github/workflows/release-stable-manual.yml @@ -389,8 +389,6 @@ jobs: with: context: docker-ctx push: true - build-args: | - ZEROCLAW_CARGO_FEATURES=channel-matrix tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.validate.outputs.tag }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest From 1bbc159e0e7f7fa04485ac8129f4b3515c510223 Mon Sep 17 00:00:00 2001 From: Alix-007 <267018309+Alix-007@users.noreply.github.com> Date: Thu, 19 Mar 2026 19:15:58 +0800 Subject: [PATCH 19/42] style(zai): satisfy rustfmt in tool_stream request --- src/providers/compatible.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/providers/compatible.rs b/src/providers/compatible.rs index 8fd4ab29f..32c94be31 100644 --- a/src/providers/compatible.rs +++ b/src/providers/compatible.rs @@ -1628,9 +1628,8 @@ impl Provider for OpenAiCompatibleProvider { temperature, stream: Some(false), reasoning_effort: self.reasoning_effort_for_model(model), - tool_stream: self.tool_stream_for_tools( - tools.as_ref().is_some_and(|tools| !tools.is_empty()), - ), + tool_stream: self + .tool_stream_for_tools(tools.as_ref().is_some_and(|tools| !tools.is_empty())), tool_choice: tools.as_ref().map(|_| "auto".to_string()), tools, }; From 65cb4fe099fb91101bc0b172224aca3053be67cb Mon Sep 17 00:00:00 2001 From: Argenis Date: Thu, 19 Mar 2026 08:17:08 -0400 Subject: [PATCH 20/42] =?UTF-8?q?feat(heartbeat):=20default=20interval=203?= =?UTF-8?q?0=E2=86=925min=20+=20prune=20heartbeat=20from=20auto-save=20(#3?= =?UTF-8?q?938)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lower the default heartbeat interval to 5 minutes to match the renewable partial wake-lock cadence. Add `[heartbeat task` to the memory auto-save skip filter so heartbeat prompts (both Phase 1 decision and Phase 2 task execution) do not pollute persistent conversation memory. Co-authored-by: Claude Opus 4.6 --- src/config/schema.rs | 11 ++++++++--- src/daemon/mod.rs | 5 ++++- src/memory/mod.rs | 7 +++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/config/schema.rs b/src/config/schema.rs index e56ae52e1..82344184a 100644 --- a/src/config/schema.rs +++ b/src/config/schema.rs @@ -4045,7 +4045,8 @@ pub struct ClassificationRule { pub struct HeartbeatConfig { /// Enable periodic heartbeat pings. Default: `false`. pub enabled: bool, - /// Interval in minutes between heartbeat pings. Default: `30`. + /// Interval in minutes between heartbeat pings. Default: `5`. + #[serde(default = "default_heartbeat_interval")] pub interval_minutes: u32, /// Enable two-phase heartbeat: Phase 1 asks LLM whether to run, Phase 2 /// executes only when the LLM decides there is work to do. Saves API cost @@ -4089,6 +4090,10 @@ pub struct HeartbeatConfig { pub max_run_history: u32, } +fn default_heartbeat_interval() -> u32 { + 5 +} + fn default_two_phase() -> bool { true } @@ -4109,7 +4114,7 @@ impl Default for HeartbeatConfig { fn default() -> Self { Self { enabled: false, - interval_minutes: 30, + interval_minutes: default_heartbeat_interval(), two_phase: true, message: None, target: None, @@ -8335,7 +8340,7 @@ mod tests { async fn heartbeat_config_default() { let h = HeartbeatConfig::default(); assert!(!h.enabled); - assert_eq!(h.interval_minutes, 30); + assert_eq!(h.interval_minutes, 5); assert!(h.message.is_none()); assert!(h.target.is_none()); assert!(h.to.is_none()); diff --git a/src/daemon/mod.rs b/src/daemon/mod.rs index 4a2e2b8c6..179dd7a1d 100644 --- a/src/daemon/mod.rs +++ b/src/daemon/mod.rs @@ -315,7 +315,10 @@ async fn run_heartbeat_worker(config: Config) -> Result<()> { // ── Phase 1: LLM decision (two-phase mode) ────────────── let tasks_to_run = if two_phase { - let decision_prompt = HeartbeatEngine::build_decision_prompt(&tasks); + let decision_prompt = format!( + "[Heartbeat Task | decision] {}", + HeartbeatEngine::build_decision_prompt(&tasks), + ); match Box::pin(crate::agent::run( config.clone(), Some(decision_prompt), diff --git a/src/memory/mod.rs b/src/memory/mod.rs index 4a3395c67..c4facf257 100644 --- a/src/memory/mod.rs +++ b/src/memory/mod.rs @@ -101,6 +101,7 @@ pub fn should_skip_autosave_content(content: &str) -> bool { let lowered = normalized.to_ascii_lowercase(); lowered.starts_with("[cron:") + || lowered.starts_with("[heartbeat task") || lowered.starts_with("[distilled_") || lowered.contains("distilled_index_sig:") } @@ -471,6 +472,12 @@ mod tests { assert!(should_skip_autosave_content( "[DISTILLED_MEMORY_CHUNK 1/2] DISTILLED_INDEX_SIG:abc123" )); + assert!(should_skip_autosave_content( + "[Heartbeat Task | decision] Should I run tasks?" + )); + assert!(should_skip_autosave_content( + "[Heartbeat Task | high] Execute scheduled patrol" + )); assert!(!should_skip_autosave_content( "User prefers concise answers." )); From a9b511e6ec69db7b1a5e9022b1b05714ececad0b Mon Sep 17 00:00:00 2001 From: Argenis Date: Thu, 19 Mar 2026 08:48:33 -0400 Subject: [PATCH 21/42] fix: omit experimental conversational_ai section from default config (#3969) The [conversational_ai] config section was serialized into every freshly-generated config.toml despite the feature being experimental and not yet wired into the agent runtime. This confused new users who found an undocumented section in their config. Add skip_serializing_if = "ConversationalAiConfig::is_disabled" so the section is only written when a user has explicitly enabled it. Existing configs that already contain the section continue to deserialize correctly via #[serde(default)]. Fixes #3958 --- src/config/schema.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/config/schema.rs b/src/config/schema.rs index 82344184a..7dd62fd3a 100644 --- a/src/config/schema.rs +++ b/src/config/schema.rs @@ -137,7 +137,12 @@ pub struct Config { pub cloud_ops: CloudOpsConfig, /// Conversational AI agent builder configuration (`[conversational_ai]`). - #[serde(default)] + /// + /// Experimental / future feature — not yet wired into the agent runtime. + /// Omitted from generated config files when disabled (the default). + /// Existing configs that already contain this section will continue to + /// deserialize correctly thanks to `#[serde(default)]`. + #[serde(default, skip_serializing_if = "ConversationalAiConfig::is_disabled")] pub conversational_ai: ConversationalAiConfig, /// Managed cybersecurity service configuration (`[security_ops]`). @@ -5910,6 +5915,17 @@ pub struct ConversationalAiConfig { pub knowledge_base_tool: Option, } +impl ConversationalAiConfig { + /// Returns `true` when the feature is disabled (the default). + /// + /// Used by `#[serde(skip_serializing_if)]` to omit the entire + /// `[conversational_ai]` section from newly-generated config files, + /// avoiding user confusion over an undocumented / experimental section. + pub fn is_disabled(&self) -> bool { + !self.enabled + } +} + impl Default for ConversationalAiConfig { fn default() -> Self { Self { From 706807902896287e9210a08837e7a54f224da6c7 Mon Sep 17 00:00:00 2001 From: Argenis Date: Thu, 19 Mar 2026 08:48:38 -0400 Subject: [PATCH 22/42] fix: make channel system prompt respect autonomy.level = full (#3952) (#3970) When autonomy.level is set to "full", the channel/web system prompt no longer includes instructions telling the model to ask for permission before executing tools. Previously these safety lines were hardcoded regardless of autonomy config, causing the LLM to simulate approval dialogs in channel and web-interface modes even though the ApprovalManager correctly allowed execution. The fix adds an autonomy_level parameter to build_system_prompt_with_mode and conditionally omits the "ask before acting" instructions when the level is Full. Core safety rules (no data exfiltration, prefer trash) are always included. --- src/agent/loop_.rs | 3 ++ src/channels/mod.rs | 84 ++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 79 insertions(+), 8 deletions(-) diff --git a/src/agent/loop_.rs b/src/agent/loop_.rs index 5442f05c5..566db1cc7 100644 --- a/src/agent/loop_.rs +++ b/src/agent/loop_.rs @@ -3466,6 +3466,7 @@ pub async fn run( bootstrap_max_chars, native_tools, config.skills.prompt_injection_mode, + config.autonomy.level, ); // Append structured tool-use instructions with schemas (only for non-native providers) @@ -4100,6 +4101,7 @@ pub async fn process_message( bootstrap_max_chars, native_tools, config.skills.prompt_injection_mode, + config.autonomy.level, ); if !native_tools { system_prompt.push_str(&build_tool_instructions(&tools_registry, Some(&i18n_descs))); @@ -6672,6 +6674,7 @@ Let me check the result."#; None, // no bootstrap_max_chars true, // native_tools crate::config::SkillsPromptInjectionMode::Full, + crate::security::AutonomyLevel::default(), ); // Must contain zero XML protocol artifacts diff --git a/src/channels/mod.rs b/src/channels/mod.rs index e34117a08..316bfcf9d 100644 --- a/src/channels/mod.rs +++ b/src/channels/mod.rs @@ -98,7 +98,7 @@ use crate::observability::traits::{ObserverEvent, ObserverMetric}; use crate::observability::{self, runtime_trace, Observer}; use crate::providers::{self, ChatMessage, Provider}; use crate::runtime; -use crate::security::SecurityPolicy; +use crate::security::{AutonomyLevel, SecurityPolicy}; use crate::tools::{self, Tool}; use crate::util::truncate_with_ellipsis; use anyhow::{Context, Result}; @@ -2785,6 +2785,7 @@ pub fn build_system_prompt( bootstrap_max_chars, false, crate::config::SkillsPromptInjectionMode::Full, + AutonomyLevel::default(), ) } @@ -2797,6 +2798,7 @@ pub fn build_system_prompt_with_mode( bootstrap_max_chars: Option, native_tools: bool, skills_prompt_mode: crate::config::SkillsPromptInjectionMode, + autonomy_level: AutonomyLevel, ) -> String { use std::fmt::Write; let mut prompt = String::with_capacity(8192); @@ -2862,13 +2864,18 @@ pub fn build_system_prompt_with_mode( // ── 2. Safety ─────────────────────────────────────────────── prompt.push_str("## Safety\n\n"); - prompt.push_str( - "- Do not exfiltrate private data.\n\ - - Do not run destructive commands without asking.\n\ - - Do not bypass oversight or approval mechanisms.\n\ - - Prefer `trash` over `rm` (recoverable beats gone forever).\n\ - - When in doubt, ask before acting externally.\n\n", - ); + prompt.push_str("- Do not exfiltrate private data.\n"); + if autonomy_level != AutonomyLevel::Full { + prompt.push_str( + "- Do not run destructive commands without asking.\n\ + - Do not bypass oversight or approval mechanisms.\n", + ); + } + prompt.push_str("- Prefer `trash` over `rm` (recoverable beats gone forever).\n"); + if autonomy_level != AutonomyLevel::Full { + prompt.push_str("- When in doubt, ask before acting externally.\n"); + } + prompt.push('\n'); // ── 3. Skills (full or compact, based on config) ───────────── if !skills.is_empty() { @@ -4026,6 +4033,7 @@ pub async fn start_channels(config: Config) -> Result<()> { bootstrap_max_chars, native_tools, config.skills.prompt_injection_mode, + config.autonomy.level, ); if !native_tools { system_prompt.push_str(&build_tool_instructions( @@ -6956,6 +6964,7 @@ BTC is currently around $65,000 based on latest tool output."# None, false, crate::config::SkillsPromptInjectionMode::Compact, + AutonomyLevel::default(), ); assert!(prompt.contains(""), "missing skills XML"); @@ -7078,6 +7087,65 @@ BTC is currently around $65,000 based on latest tool output."# assert!(prompt.contains(&format!("Working directory: `{}`", ws.path().display()))); } + #[test] + fn full_autonomy_omits_approval_instructions() { + let ws = make_workspace(); + let prompt = build_system_prompt_with_mode( + ws.path(), + "model", + &[], + &[], + None, + None, + false, + crate::config::SkillsPromptInjectionMode::Full, + AutonomyLevel::Full, + ); + + assert!( + !prompt.contains("without asking"), + "full autonomy prompt must not tell the model to ask before acting" + ); + assert!( + !prompt.contains("ask before acting externally"), + "full autonomy prompt must not contain ask-before-acting instruction" + ); + // Core safety rules should still be present + assert!( + prompt.contains("Do not exfiltrate private data"), + "data exfiltration guard must remain" + ); + assert!( + prompt.contains("Prefer `trash` over `rm`"), + "trash-over-rm hint must remain" + ); + } + + #[test] + fn supervised_autonomy_includes_approval_instructions() { + let ws = make_workspace(); + let prompt = build_system_prompt_with_mode( + ws.path(), + "model", + &[], + &[], + None, + None, + false, + crate::config::SkillsPromptInjectionMode::Full, + AutonomyLevel::Supervised, + ); + + assert!( + prompt.contains("without asking"), + "supervised prompt must include ask-before-acting instruction" + ); + assert!( + prompt.contains("ask before acting externally"), + "supervised prompt must include ask-before-acting instruction" + ); + } + #[test] fn channel_notify_observer_truncates_utf8_arguments_safely() { let (tx, mut rx) = tokio::sync::mpsc::unbounded_channel::(); From d87f387111a2f27fb0310036cfb544845fc6a6e6 Mon Sep 17 00:00:00 2001 From: Argenis Date: Thu, 19 Mar 2026 08:51:20 -0400 Subject: [PATCH 23/42] fix(docker): add memory-postgres feature to Docker and CI builds (#3971) The GHCR image v0.5.0 fails to start when users configure the postgres memory backend because the binary was compiled without the memory-postgres cargo feature. Add it to all build configurations: Dockerfiles (default ARG), release workflows (cargo build --features), and Docker push steps (ZEROCLAW_CARGO_FEATURES build-arg). Fixes #3946 --- .github/workflows/cross-platform-build-manual.yml | 2 +- .github/workflows/release-beta-on-push.yml | 4 ++-- .github/workflows/release-stable-manual.yml | 4 ++-- Dockerfile | 2 +- Dockerfile.debian | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cross-platform-build-manual.yml b/.github/workflows/cross-platform-build-manual.yml index 51140d6d6..01649a719 100644 --- a/.github/workflows/cross-platform-build-manual.yml +++ b/.github/workflows/cross-platform-build-manual.yml @@ -74,4 +74,4 @@ jobs: if [ -n "${{ matrix.linker_env || '' }}" ] && [ -n "${{ matrix.linker || '' }}" ]; then export "${{ matrix.linker_env }}=${{ matrix.linker }}" fi - cargo build --release --locked --features channel-matrix --target ${{ matrix.target }} + cargo build --release --locked --features channel-matrix,memory-postgres --target ${{ matrix.target }} diff --git a/.github/workflows/release-beta-on-push.yml b/.github/workflows/release-beta-on-push.yml index 45bed0824..5c9aebbf2 100644 --- a/.github/workflows/release-beta-on-push.yml +++ b/.github/workflows/release-beta-on-push.yml @@ -213,7 +213,7 @@ jobs: if [ -n "${{ matrix.linker_env || '' }}" ] && [ -n "${{ matrix.linker || '' }}" ]; then export "${{ matrix.linker_env }}=${{ matrix.linker }}" fi - cargo build --release --locked --features channel-matrix --target ${{ matrix.target }} + cargo build --release --locked --features channel-matrix,memory-postgres --target ${{ matrix.target }} - name: Package (Unix) if: runner.os != 'Windows' @@ -346,7 +346,7 @@ jobs: context: docker-ctx push: true build-args: | - ZEROCLAW_CARGO_FEATURES=channel-matrix + ZEROCLAW_CARGO_FEATURES=channel-matrix,memory-postgres tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.version.outputs.tag }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:beta diff --git a/.github/workflows/release-stable-manual.yml b/.github/workflows/release-stable-manual.yml index 590061e2c..d9475da46 100644 --- a/.github/workflows/release-stable-manual.yml +++ b/.github/workflows/release-stable-manual.yml @@ -214,7 +214,7 @@ jobs: if [ -n "${{ matrix.linker_env || '' }}" ] && [ -n "${{ matrix.linker || '' }}" ]; then export "${{ matrix.linker_env }}=${{ matrix.linker }}" fi - cargo build --release --locked --features channel-matrix --target ${{ matrix.target }} + cargo build --release --locked --features channel-matrix,memory-postgres --target ${{ matrix.target }} - name: Package (Unix) if: runner.os != 'Windows' @@ -389,7 +389,7 @@ jobs: context: docker-ctx push: true build-args: | - ZEROCLAW_CARGO_FEATURES=channel-matrix + ZEROCLAW_CARGO_FEATURES=channel-matrix,memory-postgres tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.validate.outputs.tag }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest diff --git a/Dockerfile b/Dockerfile index 5d1dba679..717215cd5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN npm run build FROM rust:1.94-slim@sha256:da9dab7a6b8dd428e71718402e97207bb3e54167d37b5708616050b1e8f60ed6 AS builder WORKDIR /app -ARG ZEROCLAW_CARGO_FEATURES="" +ARG ZEROCLAW_CARGO_FEATURES="memory-postgres" # Install build dependencies RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ diff --git a/Dockerfile.debian b/Dockerfile.debian index 167061492..00f7f492c 100644 --- a/Dockerfile.debian +++ b/Dockerfile.debian @@ -27,7 +27,7 @@ RUN npm run build FROM rust:1.94-bookworm AS builder WORKDIR /app -ARG ZEROCLAW_CARGO_FEATURES="" +ARG ZEROCLAW_CARGO_FEATURES="memory-postgres" # Install build dependencies RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ From 181cafff7072204240b8586689c7f7286a0ac9f8 Mon Sep 17 00:00:00 2001 From: argenis de la rosa Date: Thu, 19 Mar 2026 08:56:38 -0400 Subject: [PATCH 24/42] fix(config): warn when conversational_ai.enabled is set (#3958) The conversational_ai config section is parsed but not yet consumed by any runtime code. Emit a startup warning so users know the setting is ignored, and update the doc comment to mark it as reserved for future use. Co-Authored-By: Claude Opus 4.6 --- src/config/schema.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/config/schema.rs b/src/config/schema.rs index 82344184a..de62c9675 100644 --- a/src/config/schema.rs +++ b/src/config/schema.rs @@ -5877,8 +5877,8 @@ fn default_conversational_ai_timeout_secs() -> u64 { /// Conversational AI agent builder configuration (`[conversational_ai]` section). /// -/// Controls language detection, escalation behavior, conversation limits, and -/// analytics for conversational agent workflows. Disabled by default. +/// **Status: Reserved for future use.** This configuration is parsed but not yet +/// consumed by the runtime. Setting `enabled = true` will produce a startup warning. #[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)] pub struct ConversationalAiConfig { /// Enable conversational AI features. Default: false. @@ -7733,6 +7733,13 @@ impl Config { } set_runtime_proxy_config(self.proxy.clone()); + + if self.conversational_ai.enabled { + tracing::warn!( + "conversational_ai.enabled = true but conversational AI features are not yet \ + implemented; this section is reserved for future use and will be ignored" + ); + } } async fn resolve_config_path_for_save(&self) -> Result { From b6c2930a7026a021a642aff7e50c8bb9c728dd34 Mon Sep 17 00:00:00 2001 From: argenis de la rosa Date: Thu, 19 Mar 2026 08:56:45 -0400 Subject: [PATCH 25/42] fix(agent): enforce autonomy level in gateway and channel paths (#3952) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Channel tool filtering (`non_cli_excluded_tools`) now respects `autonomy.level = "full"` — full-autonomy agents keep all tools available regardless of channel. - Gateway `process_message` now creates and passes an `ApprovalManager` to `agent_turn`, so `ReadOnly`/`Supervised` policies are enforced instead of silently skipped. - Gateway also applies `non_cli_excluded_tools` filtering with the same full-autonomy bypass. Co-Authored-By: Claude Opus 4.6 --- src/agent/loop_.rs | 23 ++++++++++++++++++++--- src/channels/mod.rs | 41 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/src/agent/loop_.rs b/src/agent/loop_.rs index 5442f05c5..223ed0975 100644 --- a/src/agent/loop_.rs +++ b/src/agent/loop_.rs @@ -8,7 +8,7 @@ use crate::providers::{ self, ChatMessage, ChatRequest, Provider, ProviderCapabilityError, ToolCall, }; use crate::runtime; -use crate::security::SecurityPolicy; +use crate::security::{AutonomyLevel, SecurityPolicy}; use crate::tools::{self, Tool}; use crate::util::truncate_with_ellipsis; use anyhow::Result; @@ -2183,6 +2183,7 @@ pub(crate) async fn agent_turn( channel_name: &str, multimodal_config: &crate::config::MultimodalConfig, max_tool_iterations: usize, + approval: Option<&ApprovalManager>, excluded_tools: &[String], dedup_exempt_tools: &[String], activated_tools: Option<&std::sync::Arc>>, @@ -2197,7 +2198,7 @@ pub(crate) async fn agent_turn( model, temperature, silent, - None, + approval, channel_name, multimodal_config, max_tool_iterations, @@ -3894,6 +3895,7 @@ pub async fn process_message( &config.autonomy, &config.workspace_dir, )); + let approval_manager = ApprovalManager::for_non_interactive(&config.autonomy); let mem: Arc = Arc::from(memory::create_memory_with_storage_and_routes( &config.memory, &config.embedding_routes, @@ -4085,6 +4087,16 @@ pub async fn process_message( "Query connected hardware for reported GPIO pins and LED pin. Use when user asks what pins are available.", )); } + + // Filter out tools excluded for non-CLI channels (gateway counts as non-CLI). + // Skip when autonomy is `Full` — full-autonomy agents keep all tools. + if config.autonomy.level != AutonomyLevel::Full { + let excluded = &config.autonomy.non_cli_excluded_tools; + if !excluded.is_empty() { + tool_descs.retain(|(name, _)| !excluded.iter().any(|ex| ex == name)); + } + } + let bootstrap_max_chars = if config.agent.compact_context { Some(6000) } else { @@ -4133,8 +4145,11 @@ pub async fn process_message( ChatMessage::system(&system_prompt), ChatMessage::user(&enriched), ]; - let excluded_tools = + let mut excluded_tools = compute_excluded_mcp_tools(&tools_registry, &config.agent.tool_filter_groups, message); + if config.autonomy.level != AutonomyLevel::Full { + excluded_tools.extend(config.autonomy.non_cli_excluded_tools.iter().cloned()); + } agent_turn( provider.as_ref(), @@ -4148,6 +4163,7 @@ pub async fn process_message( "daemon", &config.multimodal, config.agent.max_tool_iterations, + Some(&approval_manager), &excluded_tools, &config.agent.tool_call_dedup_exempt, activated_handle_pm.as_ref(), @@ -5230,6 +5246,7 @@ mod tests { "daemon", &crate::config::MultimodalConfig::default(), 4, + None, &[], &[], Some(&activated), diff --git a/src/channels/mod.rs b/src/channels/mod.rs index e34117a08..9318f1a4a 100644 --- a/src/channels/mod.rs +++ b/src/channels/mod.rs @@ -98,7 +98,7 @@ use crate::observability::traits::{ObserverEvent, ObserverMetric}; use crate::observability::{self, runtime_trace, Observer}; use crate::providers::{self, ChatMessage, Provider}; use crate::runtime; -use crate::security::SecurityPolicy; +use crate::security::{AutonomyLevel, SecurityPolicy}; use crate::tools::{self, Tool}; use crate::util::truncate_with_ellipsis; use anyhow::{Context, Result}; @@ -328,6 +328,7 @@ struct ChannelRuntimeContext { multimodal: crate::config::MultimodalConfig, hooks: Option>, non_cli_excluded_tools: Arc>, + autonomy_level: AutonomyLevel, tool_call_dedup_exempt: Arc>, model_routes: Arc>, query_classification: crate::config::QueryClassificationConfig, @@ -2244,7 +2245,9 @@ async fn process_channel_message( Some(cancellation_token.clone()), delta_tx, ctx.hooks.as_deref(), - if msg.channel == "cli" { + if msg.channel == "cli" + || ctx.autonomy_level == AutonomyLevel::Full + { &[] } else { ctx.non_cli_excluded_tools.as_ref() @@ -4006,8 +4009,10 @@ pub async fn start_channels(config: Config) -> Result<()> { // Filter out tools excluded for non-CLI channels so the system prompt // does not advertise them for channel-driven runs. + // Skip this filter when autonomy is `Full` — full-autonomy agents keep + // all tools available regardless of channel. let excluded = &config.autonomy.non_cli_excluded_tools; - if !excluded.is_empty() { + if !excluded.is_empty() && config.autonomy.level != AutonomyLevel::Full { tool_descs.retain(|(name, _)| !excluded.iter().any(|ex| ex == name)); } @@ -4186,6 +4191,7 @@ pub async fn start_channels(config: Config) -> Result<()> { None }, non_cli_excluded_tools: Arc::new(config.autonomy.non_cli_excluded_tools.clone()), + autonomy_level: config.autonomy.level, tool_call_dedup_exempt: Arc::new(config.agent.tool_call_dedup_exempt.clone()), model_routes: Arc::new(config.model_routes.clone()), query_classification: config.query_classification.clone(), @@ -4490,6 +4496,7 @@ mod tests { workspace_dir: Arc::new(std::env::temp_dir()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -4599,6 +4606,7 @@ mod tests { workspace_dir: Arc::new(std::env::temp_dir()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -4664,6 +4672,7 @@ mod tests { workspace_dir: Arc::new(std::env::temp_dir()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -4748,6 +4757,7 @@ mod tests { workspace_dir: Arc::new(std::env::temp_dir()), message_timeout_secs: CHANNEL_MESSAGE_TIMEOUT_SECS, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -5280,6 +5290,7 @@ BTC is currently around $65,000 based on latest tool output."# slack: false, }, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), multimodal: crate::config::MultimodalConfig::default(), hooks: None, @@ -5353,6 +5364,7 @@ BTC is currently around $65,000 based on latest tool output."# slack: false, }, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), multimodal: crate::config::MultimodalConfig::default(), hooks: None, @@ -5442,6 +5454,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -5514,6 +5527,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -5596,6 +5610,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -5699,6 +5714,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -5783,6 +5799,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -5882,6 +5899,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -5966,6 +5984,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -6040,6 +6059,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -6225,6 +6245,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -6318,6 +6339,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -6429,6 +6451,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), approval_manager: Arc::new(ApprovalManager::for_non_interactive( @@ -6531,6 +6554,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -6618,6 +6642,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -6690,6 +6715,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -7320,6 +7346,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -7418,6 +7445,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -7516,6 +7544,7 @@ BTC is currently around $65,000 based on latest tool output."# multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -8078,6 +8107,7 @@ This is an example JSON object for profile settings."#; multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -8157,6 +8187,7 @@ This is an example JSON object for profile settings."#; multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(Vec::new()), query_classification: crate::config::QueryClassificationConfig::default(), @@ -8310,6 +8341,7 @@ This is an example JSON object for profile settings."#; multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(model_routes), query_classification: classification_config, @@ -8413,6 +8445,7 @@ This is an example JSON object for profile settings."#; multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(model_routes), query_classification: classification_config, @@ -8508,6 +8541,7 @@ This is an example JSON object for profile settings."#; multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(model_routes), query_classification: classification_config, @@ -8623,6 +8657,7 @@ This is an example JSON object for profile settings."#; multimodal: crate::config::MultimodalConfig::default(), hooks: None, non_cli_excluded_tools: Arc::new(Vec::new()), + autonomy_level: AutonomyLevel::default(), tool_call_dedup_exempt: Arc::new(Vec::new()), model_routes: Arc::new(model_routes), query_classification: classification_config, From 3353729b0118591fca7fc2d95db15c2089aebaec Mon Sep 17 00:00:00 2001 From: Argenis Date: Thu, 19 Mar 2026 09:12:14 -0400 Subject: [PATCH 26/42] fix(openrouter): respect provider_timeout_secs and improve error messages (#3973) * fix(openrouter): wire provider_timeout_secs through factory Apply the configured provider_timeout_secs to OpenRouterProvider in the provider factory, matching the pattern used for compatible providers. * fix(openrouter): add timeout_secs field to OpenRouterProvider Add a configurable timeout_secs field (default 120s) and a with_timeout_secs() builder method so the HTTP client timeout can be overridden via provider config instead of being hardcoded. * refactor(openrouter): improve response decode error messages Read the response body as text first, then parse with serde_json::from_str so that decode failures include a truncated snippet of the raw body for easier debugging. * test(openrouter): add timeout_secs configuration tests Verify that the default timeout is 120s and that with_timeout_secs correctly overrides it. * style: run rustfmt on openrouter.rs --- src/providers/mod.rs | 8 ++++- src/providers/openrouter.rs | 65 ++++++++++++++++++++++++++++++++++--- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/src/providers/mod.rs b/src/providers/mod.rs index d6e185782..bfc788cb8 100644 --- a/src/providers/mod.rs +++ b/src/providers/mod.rs @@ -1119,7 +1119,13 @@ fn create_provider_with_url_and_options( )?)) } // ── Primary providers (custom implementations) ─────── - "openrouter" => Ok(Box::new(openrouter::OpenRouterProvider::new(key))), + "openrouter" => { + let mut p = openrouter::OpenRouterProvider::new(key); + if let Some(t) = options.provider_timeout_secs { + p = p.with_timeout_secs(t); + } + Ok(Box::new(p)) + } "anthropic" => Ok(Box::new(anthropic::AnthropicProvider::new(key))), "openai" => Ok(Box::new(openai::OpenAiProvider::with_base_url(api_url, key))), // Ollama uses api_url for custom base URL (e.g. remote Ollama instance) diff --git a/src/providers/openrouter.rs b/src/providers/openrouter.rs index c1bbdca0b..855416aae 100644 --- a/src/providers/openrouter.rs +++ b/src/providers/openrouter.rs @@ -4,12 +4,14 @@ use crate::providers::traits::{ Provider, ProviderCapabilities, TokenUsage, ToolCall as ProviderToolCall, }; use crate::tools::ToolSpec; +use anyhow::Context as _; use async_trait::async_trait; use reqwest::Client; use serde::{Deserialize, Serialize}; pub struct OpenRouterProvider { credential: Option, + timeout_secs: u64, } #[derive(Debug, Serialize)] @@ -149,9 +151,16 @@ impl OpenRouterProvider { pub fn new(credential: Option<&str>) -> Self { Self { credential: credential.map(ToString::to_string), + timeout_secs: 120, } } + /// Override the HTTP request timeout for LLM API calls. + pub fn with_timeout_secs(mut self, secs: u64) -> Self { + self.timeout_secs = secs; + self + } + fn convert_tools(tools: Option<&[ToolSpec]>) -> Option> { let items = tools?; if items.is_empty() { @@ -296,7 +305,11 @@ impl OpenRouterProvider { } fn http_client(&self) -> Client { - crate::config::build_runtime_proxy_client_with_timeouts("provider.openrouter", 120, 10) + crate::config::build_runtime_proxy_client_with_timeouts( + "provider.openrouter", + self.timeout_secs, + 10, + ) } } @@ -368,7 +381,13 @@ impl Provider for OpenRouterProvider { return Err(super::api_error("OpenRouter", response).await); } - let chat_response: ApiChatResponse = response.json().await?; + let text = response.text().await?; + let chat_response: ApiChatResponse = serde_json::from_str(&text).with_context(|| { + format!( + "OpenRouter: failed to decode response body: {}", + &text[..text.len().min(500)] + ) + })?; chat_response .choices @@ -415,7 +434,13 @@ impl Provider for OpenRouterProvider { return Err(super::api_error("OpenRouter", response).await); } - let chat_response: ApiChatResponse = response.json().await?; + let text = response.text().await?; + let chat_response: ApiChatResponse = serde_json::from_str(&text).with_context(|| { + format!( + "OpenRouter: failed to decode response body: {}", + &text[..text.len().min(500)] + ) + })?; chat_response .choices @@ -460,7 +485,14 @@ impl Provider for OpenRouterProvider { return Err(super::api_error("OpenRouter", response).await); } - let native_response: NativeChatResponse = response.json().await?; + let text = response.text().await?; + let native_response: NativeChatResponse = + serde_json::from_str(&text).with_context(|| { + format!( + "OpenRouter: failed to decode response body: {}", + &text[..text.len().min(500)] + ) + })?; let usage = native_response.usage.map(|u| TokenUsage { input_tokens: u.prompt_tokens, output_tokens: u.completion_tokens, @@ -552,7 +584,14 @@ impl Provider for OpenRouterProvider { return Err(super::api_error("OpenRouter", response).await); } - let native_response: NativeChatResponse = response.json().await?; + let text = response.text().await?; + let native_response: NativeChatResponse = + serde_json::from_str(&text).with_context(|| { + format!( + "OpenRouter: failed to decode response body: {}", + &text[..text.len().min(500)] + ) + })?; let usage = native_response.usage.map(|u| TokenUsage { input_tokens: u.prompt_tokens, output_tokens: u.completion_tokens, @@ -1017,4 +1056,20 @@ mod tests { assert!(json.contains("reasoning_content")); assert!(json.contains("thinking...")); } + + // ═══════════════════════════════════════════════════════════════════════ + // timeout_secs configuration tests + // ═══════════════════════════════════════════════════════════════════════ + + #[test] + fn default_timeout_is_120() { + let provider = OpenRouterProvider::new(Some("key")); + assert_eq!(provider.timeout_secs, 120); + } + + #[test] + fn with_timeout_secs_overrides_default() { + let provider = OpenRouterProvider::new(Some("key")).with_timeout_secs(300); + assert_eq!(provider.timeout_secs, 300); + } } From 3239f5ea07bf45de32b61e46f07c78f95423b4ce Mon Sep 17 00:00:00 2001 From: Argenis Date: Thu, 19 Mar 2026 09:15:10 -0400 Subject: [PATCH 27/42] fix(ci): include channel-lark feature in precompiled release binaries (#3933) (#3972) Add channel-lark to the cargo --features flag in all release and cross-platform build workflows, and to the Docker build-args. This gives users Feishu/Lark channel support out of the box without needing to compile from source. The channel-lark feature depends only on dep:prost (pure Rust protobuf), so it is safe to enable on all platforms (Linux, macOS, Windows, Android). --- .github/workflows/cross-platform-build-manual.yml | 2 +- .github/workflows/release-beta-on-push.yml | 4 ++-- .github/workflows/release-stable-manual.yml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cross-platform-build-manual.yml b/.github/workflows/cross-platform-build-manual.yml index 01649a719..8ada7952e 100644 --- a/.github/workflows/cross-platform-build-manual.yml +++ b/.github/workflows/cross-platform-build-manual.yml @@ -74,4 +74,4 @@ jobs: if [ -n "${{ matrix.linker_env || '' }}" ] && [ -n "${{ matrix.linker || '' }}" ]; then export "${{ matrix.linker_env }}=${{ matrix.linker }}" fi - cargo build --release --locked --features channel-matrix,memory-postgres --target ${{ matrix.target }} + cargo build --release --locked --features channel-matrix,channel-lark,memory-postgres --target ${{ matrix.target }} diff --git a/.github/workflows/release-beta-on-push.yml b/.github/workflows/release-beta-on-push.yml index 5c9aebbf2..9861c0358 100644 --- a/.github/workflows/release-beta-on-push.yml +++ b/.github/workflows/release-beta-on-push.yml @@ -213,7 +213,7 @@ jobs: if [ -n "${{ matrix.linker_env || '' }}" ] && [ -n "${{ matrix.linker || '' }}" ]; then export "${{ matrix.linker_env }}=${{ matrix.linker }}" fi - cargo build --release --locked --features channel-matrix,memory-postgres --target ${{ matrix.target }} + cargo build --release --locked --features channel-matrix,channel-lark,memory-postgres --target ${{ matrix.target }} - name: Package (Unix) if: runner.os != 'Windows' @@ -346,7 +346,7 @@ jobs: context: docker-ctx push: true build-args: | - ZEROCLAW_CARGO_FEATURES=channel-matrix,memory-postgres + ZEROCLAW_CARGO_FEATURES=channel-matrix,channel-lark,memory-postgres tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.version.outputs.tag }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:beta diff --git a/.github/workflows/release-stable-manual.yml b/.github/workflows/release-stable-manual.yml index d9475da46..650e66820 100644 --- a/.github/workflows/release-stable-manual.yml +++ b/.github/workflows/release-stable-manual.yml @@ -214,7 +214,7 @@ jobs: if [ -n "${{ matrix.linker_env || '' }}" ] && [ -n "${{ matrix.linker || '' }}" ]; then export "${{ matrix.linker_env }}=${{ matrix.linker }}" fi - cargo build --release --locked --features channel-matrix,memory-postgres --target ${{ matrix.target }} + cargo build --release --locked --features channel-matrix,channel-lark,memory-postgres --target ${{ matrix.target }} - name: Package (Unix) if: runner.os != 'Windows' @@ -389,7 +389,7 @@ jobs: context: docker-ctx push: true build-args: | - ZEROCLAW_CARGO_FEATURES=channel-matrix,memory-postgres + ZEROCLAW_CARGO_FEATURES=channel-matrix,channel-lark,memory-postgres tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.validate.outputs.tag }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest From 985977ae0c3069761eed4d09497e8f4db1c44f0c Mon Sep 17 00:00:00 2001 From: Argenis Date: Thu, 19 Mar 2026 09:25:49 -0400 Subject: [PATCH 28/42] fix(providers): exempt tool schema errors from non-retryable classification (#3978) * fix: exempt tool schema validation errors from non-retryable classification Groq returns 400 "tool call validation failed" which was classified as non-retryable by is_non_retryable(), preventing the provider-level fallback in compatible.rs from executing. Add is_tool_schema_error() to detect these errors and return false from is_non_retryable(), allowing the retry loop to pass control back to the provider's built-in fallback. Fixes #3757 * test: add unit tests for tool schema error detection in reliable.rs Verify is_tool_schema_error detects Groq-style validation failures and that is_non_retryable returns false for tool schema 400s while still returning true for other 400 errors like invalid API key. * fix: escape format braces in test string literals for cargo check The anyhow::anyhow! macro interprets curly braces as format placeholders. Use explicit format argument to pass JSON-containing strings in tests. --- src/providers/reliable.rs | 74 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/src/providers/reliable.rs b/src/providers/reliable.rs index 66c095948..65d399b9b 100644 --- a/src/providers/reliable.rs +++ b/src/providers/reliable.rs @@ -22,6 +22,13 @@ pub fn is_non_retryable(err: &anyhow::Error) -> bool { return false; } + // Tool schema validation errors are NOT non-retryable — the provider's + // built-in fallback in compatible.rs can recover by switching to + // prompt-guided tool instructions. + if is_tool_schema_error(err) { + return false; + } + // 4xx errors are generally non-retryable (bad request, auth failure, etc.), // except 429 (rate-limit — transient) and 408 (timeout — worth retrying). if let Some(reqwest_err) = err.downcast_ref::() { @@ -73,6 +80,22 @@ pub fn is_non_retryable(err: &anyhow::Error) -> bool { || msg_lower.contains("invalid")) } +/// Check if an error is a tool schema validation failure (e.g. Groq returning +/// "tool call validation failed: attempted to call tool '...' which was not in request"). +/// These errors should NOT be classified as non-retryable because the provider's +/// built-in fallback logic (`compatible.rs::is_native_tool_schema_unsupported`) +/// can recover by switching to prompt-guided tool instructions. +pub fn is_tool_schema_error(err: &anyhow::Error) -> bool { + let lower = err.to_string().to_lowercase(); + let hints = [ + "tool call validation failed", + "was not in request", + "not found in tool list", + "invalid_tool_call", + ]; + hints.iter().any(|hint| lower.contains(hint)) +} + fn is_context_window_exceeded(err: &anyhow::Error) -> bool { let lower = err.to_string().to_lowercase(); let hints = [ @@ -2189,4 +2212,55 @@ mod tests { // Should have been called twice: once with full messages, once with truncated assert_eq!(calls.load(Ordering::SeqCst), 2); } + + // ── Tool schema error detection tests ─────────────────────────────── + + #[test] + fn tool_schema_error_detects_groq_validation_failure() { + let msg = r#"Groq API error (400 Bad Request): {"error":{"message":"tool call validation failed: attempted to call tool 'memory_recall' which was not in request"}}"#; + let err = anyhow::anyhow!("{}", msg); + assert!(is_tool_schema_error(&err)); + } + + #[test] + fn tool_schema_error_detects_not_in_request() { + let err = anyhow::anyhow!("tool 'search' was not in request"); + assert!(is_tool_schema_error(&err)); + } + + #[test] + fn tool_schema_error_detects_not_found_in_tool_list() { + let err = anyhow::anyhow!("function 'foo' not found in tool list"); + assert!(is_tool_schema_error(&err)); + } + + #[test] + fn tool_schema_error_detects_invalid_tool_call() { + let err = anyhow::anyhow!("invalid_tool_call: no matching function"); + assert!(is_tool_schema_error(&err)); + } + + #[test] + fn tool_schema_error_ignores_unrelated_errors() { + let err = anyhow::anyhow!("invalid api key"); + assert!(!is_tool_schema_error(&err)); + + let err = anyhow::anyhow!("model not found"); + assert!(!is_tool_schema_error(&err)); + } + + #[test] + fn non_retryable_returns_false_for_tool_schema_400() { + // A 400 error with tool schema validation text should NOT be non-retryable. + let msg = "400 Bad Request: tool call validation failed: attempted to call tool 'x' which was not in request"; + let err = anyhow::anyhow!("{}", msg); + assert!(!is_non_retryable(&err)); + } + + #[test] + fn non_retryable_returns_true_for_other_400_errors() { + // A regular 400 error (e.g. invalid API key) should still be non-retryable. + let err = anyhow::anyhow!("400 Bad Request: invalid api key provided"); + assert!(is_non_retryable(&err)); + } } From 4837e1fe73fc436e6c1b3e91fbd62a2f0a924ae7 Mon Sep 17 00:00:00 2001 From: argenis de la rosa Date: Thu, 19 Mar 2026 09:30:54 -0400 Subject: [PATCH 29/42] docs(readme): add Instagram social badge and switch to banner image Co-Authored-By: Claude Opus 4.6 --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 47ceb360f..f2172211d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- ZeroClaw + ZeroClaw

ZeroClaw 🦀

@@ -16,6 +16,7 @@ X: @zeroclawlabs Facebook Group Discord + Instagram: @therealzeroclaw TikTok: @zeroclawlabs RedNote Reddit: r/zeroclawlabs From 0fdd1ad490328558e5389dca6a243596d3f8cccc Mon Sep 17 00:00:00 2001 From: argenis de la rosa Date: Thu, 19 Mar 2026 09:45:32 -0400 Subject: [PATCH 30/42] chore: bump version to 0.5.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Release highlights: - Autonomy enforcement in gateway and channel paths (#3952) - conversational_ai startup warning for unimplemented config (#3958) - Heartbeat default interval 30→5min (#3938) - Provider timeout and error handling improvements (#3973, #3978) - Docker/CI postgres and Lark feature fixes (#3971, #3933) - Tool path resolution fix (#3937) - OTP config fix (#3936) - README: Instagram badge + banner image (#3979) Co-Authored-By: Claude Opus 4.6 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 41ed693de..1d74065f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9164,7 +9164,7 @@ dependencies = [ [[package]] name = "zeroclawlabs" -version = "0.5.0" +version = "0.5.1" dependencies = [ "anyhow", "async-imap", diff --git a/Cargo.toml b/Cargo.toml index 31f4f97a7..22ed857f4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ resolver = "2" [package] name = "zeroclawlabs" -version = "0.5.0" +version = "0.5.1" edition = "2021" authors = ["theonlyhennygod"] license = "MIT OR Apache-2.0" From cbb3d9ae9214ebc8dd68e4475b17e176ecca12ea Mon Sep 17 00:00:00 2001 From: argenis de la rosa Date: Thu, 19 Mar 2026 13:28:58 -0400 Subject: [PATCH 31/42] fix(ci): harden AUR SSH key setup and add diagnostics (#3952) The AUR publish step fails with "Permission denied (publickey)". Root cause is likely key formatting (Windows line endings from GitHub secrets UI) or missing public key registration on AUR. Changes: - Normalize line endings (strip \r) when writing SSH key - Set correct permissions on ~/.ssh (700) and ~/.ssh/config (600) - Validate key with ssh-keygen before attempting clone - Add SSH connectivity test for clearer error diagnostics Co-Authored-By: Claude Opus 4.6 --- .github/workflows/pub-aur.yml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pub-aur.yml b/.github/workflows/pub-aur.yml index 4ba1994a3..033824cfe 100644 --- a/.github/workflows/pub-aur.yml +++ b/.github/workflows/pub-aur.yml @@ -134,15 +134,27 @@ jobs: exit 1 fi + # Set up SSH key — normalize line endings and ensure trailing newline mkdir -p ~/.ssh - echo "$AUR_SSH_KEY" > ~/.ssh/aur + chmod 700 ~/.ssh + printf '%s\n' "$AUR_SSH_KEY" | tr -d '\r' > ~/.ssh/aur chmod 600 ~/.ssh/aur - cat >> ~/.ssh/config < ~/.ssh/config <<'SSH_CONFIG' Host aur.archlinux.org IdentityFile ~/.ssh/aur User aur StrictHostKeyChecking accept-new SSH_CONFIG + chmod 600 ~/.ssh/config + + # Verify key is valid and print fingerprint for debugging + echo "::group::SSH key diagnostics" + ssh-keygen -l -f ~/.ssh/aur || { echo "::error::AUR_SSH_KEY is not a valid SSH private key"; exit 1; } + echo "::endgroup::" + + # Test SSH connectivity before attempting clone + ssh -T -o BatchMode=yes -o ConnectTimeout=10 aur@aur.archlinux.org 2>&1 || true tmp_dir="$(mktemp -d)" git clone ssh://aur@aur.archlinux.org/zeroclaw.git "$tmp_dir/aur" From c47bbcc97212be07d9316987f68393880d689595 Mon Sep 17 00:00:00 2001 From: Giulio V Date: Thu, 19 Mar 2026 19:10:37 +0100 Subject: [PATCH 32/42] fix(cron): add startup catch-up and drop login shell flag (#3948) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(cron): add startup catch-up and drop login shell flag Problems: 1. When ZeroClaw started after downtime (late boot, daemon restart), overdue jobs were picked up via `due_jobs()` but limited by `max_tasks` per poll cycle — with many overdue jobs, catch-up could take many cycles. 2. Cron shell jobs used `sh -lc` (login shell), which loads the full user profile on every execution — slow and may cause unexpected side effects. Fixes: - Add `all_overdue_jobs()` store query without `max_tasks` limit - Add `catch_up_overdue_jobs()` startup phase that runs ALL overdue jobs once before entering the normal polling loop - Extract `build_cron_shell_command()` helper using `sh -c` (non-login) - Add structured tracing for catch-up progress - Add tests for all new functions * feat(cron): make catch-up configurable via API and control panel Add `catch_up_on_startup` boolean to `[cron]` config (default: true). When enabled, the scheduler runs all overdue jobs at startup before entering the normal polling loop. Users can toggle this from: - The Cron page toggle switch in the control panel - PATCH /api/cron/settings { "catch_up_on_startup": false } - The `[cron]` section of the TOML config editor Also adds GET /api/cron/settings endpoint to read cron subsystem settings without parsing the full config. * fix(config): add catch_up_on_startup to CronConfig test constructors The CI Lint job failed because the `cron_config_serde_roundtrip` test constructs CronConfig directly and was missing the new field. --- src/config/schema.rs | 13 ++++ src/cron/mod.rs | 4 +- src/cron/scheduler.rs | 139 ++++++++++++++++++++++++++++++++++++----- src/cron/store.rs | 68 ++++++++++++++++++++ src/gateway/api.rs | 59 +++++++++++++++++ src/gateway/mod.rs | 4 ++ web/src/lib/api.ts | 19 ++++++ web/src/pages/Cron.tsx | 63 ++++++++++++++++++- 8 files changed, 352 insertions(+), 17 deletions(-) diff --git a/src/config/schema.rs b/src/config/schema.rs index ad767b43d..10d006a0a 100644 --- a/src/config/schema.rs +++ b/src/config/schema.rs @@ -4143,6 +4143,15 @@ pub struct CronConfig { /// Enable the cron subsystem. Default: `true`. #[serde(default = "default_true")] pub enabled: bool, + /// Run all overdue jobs at scheduler startup. Default: `true`. + /// + /// When the machine boots late or the daemon restarts, jobs whose + /// `next_run` is in the past are considered "missed". With this + /// option enabled the scheduler fires them once before entering + /// the normal polling loop. Disable if you prefer missed jobs to + /// simply wait for their next scheduled occurrence. + #[serde(default = "default_true")] + pub catch_up_on_startup: bool, /// Maximum number of historical cron run records to retain. Default: `50`. #[serde(default = "default_max_run_history")] pub max_run_history: u32, @@ -4156,6 +4165,7 @@ impl Default for CronConfig { fn default() -> Self { Self { enabled: true, + catch_up_on_startup: true, max_run_history: default_max_run_history(), } } @@ -8397,11 +8407,13 @@ recipient = "42" async fn cron_config_serde_roundtrip() { let c = CronConfig { enabled: false, + catch_up_on_startup: false, max_run_history: 100, }; let json = serde_json::to_string(&c).unwrap(); let parsed: CronConfig = serde_json::from_str(&json).unwrap(); assert!(!parsed.enabled); + assert!(!parsed.catch_up_on_startup); assert_eq!(parsed.max_run_history, 100); } @@ -8415,6 +8427,7 @@ default_temperature = 0.7 let parsed: Config = toml::from_str(toml_str).unwrap(); assert!(parsed.cron.enabled); + assert!(parsed.cron.catch_up_on_startup); assert_eq!(parsed.cron.max_run_history, 50); } diff --git a/src/cron/mod.rs b/src/cron/mod.rs index a560e2e5e..bffb392ff 100644 --- a/src/cron/mod.rs +++ b/src/cron/mod.rs @@ -14,8 +14,8 @@ pub use schedule::{ }; #[allow(unused_imports)] pub use store::{ - add_agent_job, due_jobs, get_job, list_jobs, list_runs, record_last_run, record_run, - remove_job, reschedule_after_run, update_job, + add_agent_job, all_overdue_jobs, due_jobs, get_job, list_jobs, list_runs, record_last_run, + record_run, remove_job, reschedule_after_run, update_job, }; pub use types::{ deserialize_maybe_stringified, CronJob, CronJobPatch, CronRun, DeliveryConfig, JobType, diff --git a/src/cron/scheduler.rs b/src/cron/scheduler.rs index 8a9f7e95e..11db8accc 100644 --- a/src/cron/scheduler.rs +++ b/src/cron/scheduler.rs @@ -6,8 +6,9 @@ use crate::channels::{ }; use crate::config::Config; use crate::cron::{ - due_jobs, next_run_for_schedule, record_last_run, record_run, remove_job, reschedule_after_run, - update_job, CronJob, CronJobPatch, DeliveryConfig, JobType, Schedule, SessionTarget, + all_overdue_jobs, due_jobs, next_run_for_schedule, record_last_run, record_run, remove_job, + reschedule_after_run, update_job, CronJob, CronJobPatch, DeliveryConfig, JobType, Schedule, + SessionTarget, }; use crate::security::SecurityPolicy; use anyhow::Result; @@ -33,6 +34,18 @@ pub async fn run(config: Config) -> Result<()> { crate::health::mark_component_ok(SCHEDULER_COMPONENT); + // ── Startup catch-up: run ALL overdue jobs before entering the + // normal polling loop. The regular loop is capped by `max_tasks`, + // which could leave some overdue jobs waiting across many cycles + // if the machine was off for a while. The catch-up phase fetches + // without the `max_tasks` limit so every missed job fires once. + // Controlled by `[cron] catch_up_on_startup` (default: true). + if config.cron.catch_up_on_startup { + catch_up_overdue_jobs(&config, &security).await; + } else { + tracing::info!("Scheduler startup: catch-up disabled by config"); + } + loop { interval.tick().await; // Keep scheduler liveness fresh even when there are no due jobs. @@ -51,6 +64,35 @@ pub async fn run(config: Config) -> Result<()> { } } +/// Fetch **all** overdue jobs (ignoring `max_tasks`) and execute them. +/// +/// Called once at scheduler startup so that jobs missed during downtime +/// (e.g. late boot, daemon restart) are caught up immediately. +async fn catch_up_overdue_jobs(config: &Config, security: &Arc) { + let now = Utc::now(); + let jobs = match all_overdue_jobs(config, now) { + Ok(jobs) => jobs, + Err(e) => { + tracing::warn!("Startup catch-up query failed: {e}"); + return; + } + }; + + if jobs.is_empty() { + tracing::info!("Scheduler startup: no overdue jobs to catch up"); + return; + } + + tracing::info!( + count = jobs.len(), + "Scheduler startup: catching up overdue jobs" + ); + + process_due_jobs(config, security, jobs, SCHEDULER_COMPONENT).await; + + tracing::info!("Scheduler startup: catch-up complete"); +} + pub async fn execute_job_now(config: &Config, job: &CronJob) -> (bool, String) { let security = SecurityPolicy::from_config(&config.autonomy, &config.workspace_dir); Box::pin(execute_job_with_retry(config, &security, job)).await @@ -506,18 +548,12 @@ async fn run_job_command_with_timeout( ); } - let child = match Command::new("sh") - .arg("-lc") - .arg(&job.command) - .current_dir(&config.workspace_dir) - .stdin(Stdio::null()) - .stdout(Stdio::piped()) - .stderr(Stdio::piped()) - .kill_on_drop(true) - .spawn() - { - Ok(child) => child, - Err(e) => return (false, format!("spawn error: {e}")), + let child = match build_cron_shell_command(&job.command, &config.workspace_dir) { + Ok(mut cmd) => match cmd.spawn() { + Ok(child) => child, + Err(e) => return (false, format!("spawn error: {e}")), + }, + Err(e) => return (false, format!("shell setup error: {e}")), }; match time::timeout(timeout, child.wait_with_output()).await { @@ -540,6 +576,35 @@ async fn run_job_command_with_timeout( } } +/// Build a shell `Command` for cron job execution. +/// +/// Uses `sh -c ` (non-login shell). On Windows, ZeroClaw users +/// typically have Git Bash installed which provides `sh` in PATH, and +/// cron commands are written with Unix shell syntax. The previous `-lc` +/// (login shell) flag was dropped: login shells load the full user +/// profile on every invocation which is slow and may cause side effects. +/// +/// The command is configured with: +/// - `current_dir` set to the workspace +/// - `stdin` piped to `/dev/null` (no interactive input) +/// - `stdout` and `stderr` piped for capture +/// - `kill_on_drop(true)` for safe timeout handling +fn build_cron_shell_command( + command: &str, + workspace_dir: &std::path::Path, +) -> anyhow::Result { + let mut cmd = Command::new("sh"); + cmd.arg("-c") + .arg(command) + .current_dir(workspace_dir) + .stdin(Stdio::null()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .kill_on_drop(true); + + Ok(cmd) +} + #[cfg(test)] mod tests { use super::*; @@ -1152,4 +1217,50 @@ mod tests { .to_string() .contains("matrix delivery channel requires `channel-matrix` feature")); } + + #[test] + fn build_cron_shell_command_uses_sh_non_login() { + let workspace = std::env::temp_dir(); + let cmd = build_cron_shell_command("echo cron-test", &workspace).unwrap(); + let debug = format!("{cmd:?}"); + assert!(debug.contains("echo cron-test")); + assert!(debug.contains("\"sh\""), "should use sh: {debug}"); + // Must NOT use login shell (-l) — login shells load full profile + // and are slow/unpredictable for cron jobs. + assert!( + !debug.contains("\"-lc\""), + "must not use login shell: {debug}" + ); + } + + #[tokio::test] + async fn build_cron_shell_command_executes_successfully() { + let workspace = std::env::temp_dir(); + let mut cmd = build_cron_shell_command("echo cron-ok", &workspace).unwrap(); + let output = cmd.output().await.unwrap(); + assert!(output.status.success()); + let stdout = String::from_utf8_lossy(&output.stdout); + assert!(stdout.contains("cron-ok")); + } + + #[tokio::test] + async fn catch_up_queries_all_overdue_jobs_ignoring_max_tasks() { + let tmp = TempDir::new().unwrap(); + let mut config = test_config(&tmp).await; + config.scheduler.max_tasks = 1; // limit normal polling to 1 + + // Create 3 jobs with "every minute" schedule + for i in 0..3 { + let _ = cron::add_job(&config, "* * * * *", &format!("echo catchup-{i}")).unwrap(); + } + + // Verify normal due_jobs is limited to max_tasks=1 + let far_future = Utc::now() + ChronoDuration::days(1); + let due = cron::due_jobs(&config, far_future).unwrap(); + assert_eq!(due.len(), 1, "due_jobs must respect max_tasks"); + + // all_overdue_jobs ignores the limit + let overdue = cron::all_overdue_jobs(&config, far_future).unwrap(); + assert_eq!(overdue.len(), 3, "all_overdue_jobs must return all"); + } } diff --git a/src/cron/store.rs b/src/cron/store.rs index 176c34ad6..887317aa9 100644 --- a/src/cron/store.rs +++ b/src/cron/store.rs @@ -188,6 +188,34 @@ pub fn due_jobs(config: &Config, now: DateTime) -> Result> { }) } +/// Return **all** enabled overdue jobs without the `max_tasks` limit. +/// +/// Used by the scheduler startup catch-up to ensure every missed job is +/// executed at least once after a period of downtime (late boot, daemon +/// restart, etc.). +pub fn all_overdue_jobs(config: &Config, now: DateTime) -> Result> { + with_connection(config, |conn| { + let mut stmt = conn.prepare( + "SELECT id, expression, command, schedule, job_type, prompt, name, session_target, model, + enabled, delivery, delete_after_run, created_at, next_run, last_run, last_status, last_output + FROM cron_jobs + WHERE enabled = 1 AND next_run <= ?1 + ORDER BY next_run ASC", + )?; + + let rows = stmt.query_map(params![now.to_rfc3339()], map_cron_job_row)?; + + let mut jobs = Vec::new(); + for row in rows { + match row { + Ok(job) => jobs.push(job), + Err(e) => tracing::warn!("Skipping cron job with unparseable row data: {e}"), + } + } + Ok(jobs) + }) +} + pub fn update_job(config: &Config, job_id: &str, patch: CronJobPatch) -> Result { let mut job = get_job(config, job_id)?; let mut schedule_changed = false; @@ -704,6 +732,46 @@ mod tests { assert_eq!(due.len(), 2); } + #[test] + fn all_overdue_jobs_ignores_max_tasks_limit() { + let tmp = TempDir::new().unwrap(); + let mut config = test_config(&tmp); + config.scheduler.max_tasks = 2; + + let _ = add_job(&config, "* * * * *", "echo ov-1").unwrap(); + let _ = add_job(&config, "* * * * *", "echo ov-2").unwrap(); + let _ = add_job(&config, "* * * * *", "echo ov-3").unwrap(); + + let far_future = Utc::now() + ChronoDuration::days(365); + // due_jobs respects the limit + let due = due_jobs(&config, far_future).unwrap(); + assert_eq!(due.len(), 2); + // all_overdue_jobs returns everything + let overdue = all_overdue_jobs(&config, far_future).unwrap(); + assert_eq!(overdue.len(), 3); + } + + #[test] + fn all_overdue_jobs_excludes_disabled_jobs() { + let tmp = TempDir::new().unwrap(); + let config = test_config(&tmp); + + let job = add_job(&config, "* * * * *", "echo disabled").unwrap(); + let _ = update_job( + &config, + &job.id, + CronJobPatch { + enabled: Some(false), + ..CronJobPatch::default() + }, + ) + .unwrap(); + + let far_future = Utc::now() + ChronoDuration::days(365); + let overdue = all_overdue_jobs(&config, far_future).unwrap(); + assert!(overdue.is_empty()); + } + #[test] fn reschedule_after_run_persists_last_status_and_last_run() { let tmp = TempDir::new().unwrap(); diff --git a/src/gateway/api.rs b/src/gateway/api.rs index ecae7026f..988c8d947 100644 --- a/src/gateway/api.rs +++ b/src/gateway/api.rs @@ -357,6 +357,65 @@ pub async fn handle_api_cron_delete( } } +/// GET /api/cron/settings — return cron subsystem settings +pub async fn handle_api_cron_settings_get( + State(state): State, + headers: HeaderMap, +) -> impl IntoResponse { + if let Err(e) = require_auth(&state, &headers) { + return e.into_response(); + } + + let config = state.config.lock().clone(); + Json(serde_json::json!({ + "enabled": config.cron.enabled, + "catch_up_on_startup": config.cron.catch_up_on_startup, + "max_run_history": config.cron.max_run_history, + })) + .into_response() +} + +/// PATCH /api/cron/settings — update cron subsystem settings +pub async fn handle_api_cron_settings_patch( + State(state): State, + headers: HeaderMap, + Json(body): Json, +) -> impl IntoResponse { + if let Err(e) = require_auth(&state, &headers) { + return e.into_response(); + } + + let mut config = state.config.lock().clone(); + + if let Some(v) = body.get("enabled").and_then(|v| v.as_bool()) { + config.cron.enabled = v; + } + if let Some(v) = body.get("catch_up_on_startup").and_then(|v| v.as_bool()) { + config.cron.catch_up_on_startup = v; + } + if let Some(v) = body.get("max_run_history").and_then(|v| v.as_u64()) { + config.cron.max_run_history = u32::try_from(v).unwrap_or(u32::MAX); + } + + if let Err(e) = config.save().await { + return ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(serde_json::json!({"error": format!("Failed to save config: {e}")})), + ) + .into_response(); + } + + *state.config.lock() = config.clone(); + + Json(serde_json::json!({ + "status": "ok", + "enabled": config.cron.enabled, + "catch_up_on_startup": config.cron.catch_up_on_startup, + "max_run_history": config.cron.max_run_history, + })) + .into_response() +} + /// GET /api/integrations — list all integrations with status pub async fn handle_api_integrations( State(state): State, diff --git a/src/gateway/mod.rs b/src/gateway/mod.rs index 0ab7bd463..2afe360cf 100644 --- a/src/gateway/mod.rs +++ b/src/gateway/mod.rs @@ -766,6 +766,10 @@ pub async fn run_gateway(host: &str, port: u16, config: Config) -> Result<()> { .route("/api/tools", get(api::handle_api_tools)) .route("/api/cron", get(api::handle_api_cron_list)) .route("/api/cron", post(api::handle_api_cron_add)) + .route( + "/api/cron/settings", + get(api::handle_api_cron_settings_get).patch(api::handle_api_cron_settings_patch), + ) .route("/api/cron/{id}", delete(api::handle_api_cron_delete)) .route("/api/cron/{id}/runs", get(api::handle_api_cron_runs)) .route("/api/integrations", get(api::handle_api_integrations)) diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index 352af676b..791e7daf9 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -193,6 +193,25 @@ export function getCronRuns( ).then((data) => unwrapField(data, 'runs')); } +export interface CronSettings { + enabled: boolean; + catch_up_on_startup: boolean; + max_run_history: number; +} + +export function getCronSettings(): Promise { + return apiFetch('/api/cron/settings'); +} + +export function patchCronSettings( + patch: Partial, +): Promise { + return apiFetch('/api/cron/settings', { + method: 'PATCH', + body: JSON.stringify(patch), + }); +} + // --------------------------------------------------------------------------- // Integrations // --------------------------------------------------------------------------- diff --git a/web/src/pages/Cron.tsx b/web/src/pages/Cron.tsx index 8a09d79f3..a12a501d5 100644 --- a/web/src/pages/Cron.tsx +++ b/web/src/pages/Cron.tsx @@ -12,7 +12,15 @@ import { RefreshCw, } from 'lucide-react'; import type { CronJob, CronRun } from '@/types/api'; -import { getCronJobs, addCronJob, deleteCronJob, getCronRuns } from '@/lib/api'; +import { + getCronJobs, + addCronJob, + deleteCronJob, + getCronRuns, + getCronSettings, + patchCronSettings, +} from '@/lib/api'; +import type { CronSettings } from '@/lib/api'; import { t } from '@/lib/i18n'; function formatDate(iso: string | null): string { @@ -143,6 +151,8 @@ export default function Cron() { const [showForm, setShowForm] = useState(false); const [confirmDelete, setConfirmDelete] = useState(null); const [expandedJob, setExpandedJob] = useState(null); + const [settings, setSettings] = useState(null); + const [togglingCatchUp, setTogglingCatchUp] = useState(false); // Form state const [formName, setFormName] = useState(''); @@ -159,8 +169,28 @@ export default function Cron() { .finally(() => setLoading(false)); }; + const fetchSettings = () => { + getCronSettings().then(setSettings).catch(() => {}); + }; + + const toggleCatchUp = async () => { + if (!settings) return; + setTogglingCatchUp(true); + try { + const updated = await patchCronSettings({ + catch_up_on_startup: !settings.catch_up_on_startup, + }); + setSettings(updated); + } catch { + // silently fail — user can retry + } finally { + setTogglingCatchUp(false); + } + }; + useEffect(() => { fetchJobs(); + fetchSettings(); }, []); const handleAdd = async () => { @@ -250,6 +280,37 @@ export default function Cron() { + {/* Catch-up toggle */} + {settings && ( +
+
+ + Catch up missed jobs on startup + +

+ Run all overdue jobs when ZeroClaw starts after downtime +

+
+ +
+ )} + {/* Add Job Form Modal */} {showForm && (
From 030f5fe2881b48e31273ab179d0d236cf7bd6c79 Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 19 Mar 2026 11:10:48 -0700 Subject: [PATCH 33/42] fix(install): fix guided installer in LXC/container environments (#3947) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace subshell-based /dev/stdin probing in guided_input_stream with a file-descriptor approach (guided_open_input) that works reliably in LXC containers accessed over SSH. The previous implementation probed /dev/stdin and /proc/self/fd/0 via subshells before falling back to /dev/tty. In LXC containers these probes fail even when FD 0 is perfectly usable, causing the guided installer to exit with "requires an interactive terminal". The fix: - When stdin is a terminal (-t 0), assign GUIDED_FD=0 directly without any subshell probing — trusting the kernel's own tty check - Otherwise, open /dev/tty as an explicit fd (exec {GUIDED_FD} --- install.sh | 40 +++++++++++++--------------------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/install.sh b/install.sh index c32a3bf11..f222ed572 100755 --- a/install.sh +++ b/install.sh @@ -448,46 +448,32 @@ bool_to_word() { fi } -guided_input_stream() { - # Some constrained containers report interactive stdin (-t 0) but deny - # opening /dev/stdin directly. Probe readability before selecting it. - if [[ -t 0 ]] && (: /dev/null; then - echo "/dev/stdin" +guided_open_input() { + # Use stdin directly when it is an interactive terminal (e.g. SSH into LXC). + # Subshell probing of /dev/stdin fails in some constrained containers even + # when FD 0 is perfectly usable, so skip the probe and trust -t 0. + if [[ -t 0 ]]; then + GUIDED_FD=0 return 0 fi - if [[ -t 0 ]] && (: /dev/null; then - echo "/proc/self/fd/0" - return 0 - fi - - if (: /dev/null; then - echo "/dev/tty" - return 0 - fi - - return 1 + # Non-interactive stdin: try to open /dev/tty as an explicit fd. + exec {GUIDED_FD}/dev/null || return 1 } guided_read() { local __target_var="$1" local __prompt="$2" local __silent="${3:-false}" - local __input_source="" local __value="" - if ! __input_source="$(guided_input_stream)"; then - return 1 - fi + [[ -n "${GUIDED_FD:-}" ]] || guided_open_input || return 1 if [[ "$__silent" == true ]]; then - if ! read -r -s -p "$__prompt" __value <"$__input_source"; then - return 1 - fi + read -r -s -u "$GUIDED_FD" -p "$__prompt" __value || return 1 + echo else - if ! read -r -p "$__prompt" __value <"$__input_source"; then - return 1 - fi + read -r -u "$GUIDED_FD" -p "$__prompt" __value || return 1 fi printf -v "$__target_var" '%s' "$__value" @@ -708,7 +694,7 @@ prompt_model() { run_guided_installer() { local os_name="$1" - if ! guided_input_stream >/dev/null; then + if ! guided_open_input >/dev/null; then error "guided installer requires an interactive terminal." error "Run from a terminal, or pass --no-guided with explicit flags." exit 1 From cc91f22e9bc8083842a4df55db36683ed8d898a0 Mon Sep 17 00:00:00 2001 From: Alix-007 Date: Fri, 20 Mar 2026 02:10:51 +0800 Subject: [PATCH 34/42] fix(skills): narrow shell shebang detection (#3944) Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com> --- src/skills/audit.rs | 68 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 7 deletions(-) diff --git a/src/skills/audit.rs b/src/skills/audit.rs index 64fd9b2b0..15464fd65 100644 --- a/src/skills/audit.rs +++ b/src/skills/audit.rs @@ -409,13 +409,43 @@ fn has_shell_shebang(path: &Path) -> bool { return false; }; let prefix = &content[..content.len().min(128)]; - let shebang = String::from_utf8_lossy(prefix).to_ascii_lowercase(); - shebang.starts_with("#!") - && (shebang.contains("sh") - || shebang.contains("bash") - || shebang.contains("zsh") - || shebang.contains("pwsh") - || shebang.contains("powershell")) + let shebang_line = String::from_utf8_lossy(prefix) + .lines() + .next() + .unwrap_or_default() + .trim() + .to_ascii_lowercase(); + let Some(interpreter) = shebang_interpreter(&shebang_line) else { + return false; + }; + + matches!( + interpreter, + "sh" | "bash" | "zsh" | "ksh" | "fish" | "pwsh" | "powershell" + ) +} + +fn shebang_interpreter(line: &str) -> Option<&str> { + let shebang = line.strip_prefix("#!")?.trim(); + if shebang.is_empty() { + return None; + } + + let mut parts = shebang.split_whitespace(); + let first = parts.next()?; + let first_basename = Path::new(first).file_name()?.to_str()?; + + if first_basename == "env" { + for part in parts { + if part.starts_with('-') { + continue; + } + return Path::new(part).file_name()?.to_str(); + } + return None; + } + + Some(first_basename) } fn extract_markdown_links(content: &str) -> Vec { @@ -586,6 +616,30 @@ mod tests { ); } + #[test] + fn audit_allows_python_shebang_file_when_early_text_contains_sh() { + let dir = tempfile::tempdir().unwrap(); + let skill_dir = dir.path().join("python-helper"); + let scripts_dir = skill_dir.join("scripts"); + std::fs::create_dir_all(&scripts_dir).unwrap(); + std::fs::write(skill_dir.join("SKILL.md"), "# Skill\n").unwrap(); + std::fs::write( + scripts_dir.join("helper.py"), + "#!/usr/bin/env python3\n\"\"\"Refresh report cache.\"\"\"\n\nprint(\"ok\")\n", + ) + .unwrap(); + + let report = audit_skill_directory(&skill_dir).unwrap(); + assert!( + !report + .findings + .iter() + .any(|finding| finding.contains("script-like files are blocked")), + "{:#?}", + report.findings + ); + } + #[test] fn audit_rejects_markdown_escape_links() { let dir = tempfile::tempdir().unwrap(); From 133dc46b411b532fe47820386af0a683c415a497 Mon Sep 17 00:00:00 2001 From: Argenis Date: Thu, 19 Mar 2026 14:21:15 -0400 Subject: [PATCH 35/42] fix(web): restore accidentally deleted logo file (#3988) * fix: restore accidentally deleted logo file The logo.png was removed in commit 48bdbde2 but is still referenced by the web UI components. Restore it from git history. Fixes #3984 * fix: copy logo to web/dist for rust-embed The Rust binary embeds files from web/dist/ via rust-embed, so the logo must also be present there to be served without a rebuild. Fixes #3984 --- web/dist/logo.png | Bin 0 -> 2156411 bytes web/public/logo.png | Bin 0 -> 2156411 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 web/dist/logo.png create mode 100644 web/public/logo.png diff --git a/web/dist/logo.png b/web/dist/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a76068f234edf705f67563e60884ab42d7f72798 GIT binary patch literal 2156411 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

B4Y)F&Lb88@q$mV%iX)^) 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�m*0nZtjR=*1$iE4r&tQ5 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

pl+n#OpGg!L>u%1d#uyoi=u6to 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∇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