use super::error::AgentError;
use super::runtime::Agents;
pub fn write_waiting(
agents: &Agents,
name: &str,
draft: &str,
words: &str,
) -> Result<(), AgentError> {
let record = agents.registry().record(name)?;
if !record.active() {
return Err(AgentError::Transition("agent is retired"));
}
agents.bounds().field(draft, "waiting draft")?;
if words.is_empty() {
return Err(AgentError::Invalid("waiting words"));
}
if words.len() > agents.bounds().max_event_bytes {
return Err(AgentError::Bound {
bound: "max_event_bytes",
limit: agents.bounds().max_event_bytes,
count: words.len(),
});
}
agents.retained().publish(&[(
format!("agents.{name}.state"),
serde_json::json!({"state":"waiting", "draft":draft, "words":words}),
)])
}