liminal_server/agents/
state.rs1use super::error::AgentError;
4use super::runtime::Agents;
5
6pub fn write_waiting(
14 agents: &Agents,
15 name: &str,
16 draft: &str,
17 words: &str,
18) -> Result<(), AgentError> {
19 let record = agents.registry().record(name)?;
20 if !record.active() {
21 return Err(AgentError::Transition("agent is retired"));
22 }
23 agents.bounds().field(draft, "waiting draft")?;
24 if words.is_empty() {
25 return Err(AgentError::Invalid("waiting words"));
26 }
27 if words.len() > agents.bounds().max_event_bytes {
28 return Err(AgentError::Bound {
29 bound: "max_event_bytes",
30 limit: agents.bounds().max_event_bytes,
31 count: words.len(),
32 });
33 }
34 agents.retained().publish(&[(
35 format!("agents.{name}.state"),
36 serde_json::json!({"state":"waiting", "draft":draft, "words":words}),
37 )])
38}