use serde::Serialize;
use super::records::{AgentHarness, AgentRecord};
use crate::console::records::{Station, StationActivity, StationKind, StationState};
#[derive(Clone, Serialize)]
pub struct AgentStation {
#[serde(flatten)]
pub station: Station,
pub harness: AgentHarness,
pub purpose: String,
pub stops: Vec<String>,
}
impl AgentStation {
#[must_use]
pub fn new(
record: &AgentRecord,
device: &str,
state: StationState,
stops: Vec<String>,
) -> Self {
let inbox = format!("agents.{}.inbox", record.name);
Self { station: Station { id: inbox.clone(), name: record.name.clone(), device: device.into(),
kind: StationKind::Agent, state, subjects: Some(vec![inbox]), activities: Some(vec![StationActivity {
name: "inbox".into(),
input_schema_json: r#"{"additionalProperties":false,"properties":{"text":{"type":"string"}},"required":["text"],"type":"object"}"#.into(),
output_schema_json: "{}".into(),
}]) }, harness: record.harness, purpose: record.purpose.clone(), stops }
}
}
impl std::fmt::Debug for AgentStation {
fn fmt(&self, out: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
out.debug_struct("AgentStation")
.field("harness", &self.harness)
.finish_non_exhaustive()
}
}