Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions crates/zeroclaw-channels/src/orchestrator/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11810,6 +11810,7 @@ This is an example JSON object for profile settings."#;
ack_reactions: None,
proxy_url: None,
approval_timeout_secs: 120,
reply_min_interval_secs: 0,
});
match build_channel_by_id(&config, "telegram") {
Ok(channel) => assert_eq!(channel.name(), "telegram"),
Expand Down
14 changes: 14 additions & 0 deletions crates/zeroclaw-config/src/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7065,6 +7065,17 @@ pub struct TelegramConfig {
/// button on a tool approval prompt before auto-denying. Default: 120.
#[serde(default = "default_telegram_approval_timeout_secs")]
pub approval_timeout_secs: u64,
/// Minimum wall-clock interval (seconds) between consecutive outbound
/// agent replies on this channel. `0` (default) preserves the current
/// behaviour where replies fire as soon as the LLM completes. The
/// intended range is `0..=3600`.
///
/// On paired-identity channels under personal accounts, sub-second
/// replies are a strong AI-tell and a platform-side anomaly signal;
/// raising this value paces the agent so its cadence resembles a
/// human operator's.
#[serde(default)]
pub reply_min_interval_secs: u64,
}

impl ChannelConfig for TelegramConfig {
Expand Down Expand Up @@ -12327,6 +12338,7 @@ auto_save = true
ack_reactions: None,
proxy_url: None,
approval_timeout_secs: default_telegram_approval_timeout_secs(),
reply_min_interval_secs: 0,
}),
discord: None,
discord_history: None,
Expand Down Expand Up @@ -13232,6 +13244,7 @@ default_temperature = 0.7
ack_reactions: None,
proxy_url: None,
approval_timeout_secs: 120,
reply_min_interval_secs: 0,
};
let json = serde_json::to_string(&tc).unwrap();
let parsed: TelegramConfig = serde_json::from_str(&json).unwrap();
Expand Down Expand Up @@ -16654,6 +16667,7 @@ require_otp_to_resume = true
ack_reactions: None,
proxy_url: None,
approval_timeout_secs: default_telegram_approval_timeout_secs(),
reply_min_interval_secs: 0,
});

// Save (triggers encryption)
Expand Down
3 changes: 3 additions & 0 deletions crates/zeroclaw-runtime/src/daemon/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1115,6 +1115,7 @@ mod tests {
ack_reactions: None,
proxy_url: None,
approval_timeout_secs: 120,
reply_min_interval_secs: 0,
});
assert!(has_supervised_channels(&config));
}
Expand Down Expand Up @@ -1261,6 +1262,7 @@ mod tests {
ack_reactions: None,
proxy_url: None,
approval_timeout_secs: 120,
reply_min_interval_secs: 0,
});

let target = resolve_heartbeat_delivery(&config).unwrap();
Expand All @@ -1281,6 +1283,7 @@ mod tests {
ack_reactions: None,
proxy_url: None,
approval_timeout_secs: 120,
reply_min_interval_secs: 0,
});

let target = resolve_heartbeat_delivery(&config).unwrap();
Expand Down
1 change: 1 addition & 0 deletions crates/zeroclaw-runtime/src/integrations/registry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -880,6 +880,7 @@ mod tests {
ack_reactions: None,
proxy_url: None,
approval_timeout_secs: 120,
reply_min_interval_secs: 0,
});
let entries = all_integrations();
let tg = entries.iter().find(|e| e.name == "Telegram").unwrap();
Expand Down
1 change: 1 addition & 0 deletions src/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ mod tests {
ack_reactions: None,
proxy_url: None,
approval_timeout_secs: 120,
reply_min_interval_secs: 0,
};

let discord = DiscordConfig {
Expand Down
Loading