1use serde::{Deserialize, Serialize};
2
3use crate::message::MessageEnvelope;
4use crate::message::MessageType;
5use crate::message::Part;
6
7#[derive(Debug, Deserialize)]
8pub struct RegisterRequest {
9 pub name: String,
10 #[serde(default)]
11 pub parent_id: Option<String>,
12 pub kind: String,
13}
14
15#[derive(Debug, Deserialize, Serialize)]
16pub struct SendMessageRequest {
17 #[serde(rename = "type")]
18 pub msg_type: MessageType,
19 pub from: String,
20 pub to: String,
21 #[serde(default)]
22 pub task_id: Option<String>,
23 #[serde(default)]
24 pub context_id: Option<String>,
25 pub parts: Vec<Part>,
26}
27
28#[derive(Debug, Deserialize)]
29pub struct PollQuery {
30 pub to: String,
31 #[serde(default)]
32 pub since: Option<i64>,
33 #[serde(default = "default_limit")]
34 pub limit: i64,
35 #[serde(default)]
36 pub include: Option<String>,
37}
38
39fn default_limit() -> i64 {
40 50
41}
42
43#[derive(Debug, Serialize)]
44pub struct PollResponse {
45 pub messages: Vec<MessageEnvelope>,
46 pub latest_sequence: i64,
47}
48
49#[derive(Debug, Serialize)]
50pub struct HealthResponse {
51 pub status: &'static str,
52 pub uptime_seconds: i64,
53 pub agents_online: usize,
54}
55
56#[derive(Debug, Serialize)]
57pub struct StatsResponse {
58 pub messages_total: i64,
59 pub agents_registered: usize,
60}
61
62#[derive(Debug, Deserialize)]
63pub struct CreateDependencyRequest {
64 pub dependent_agent: String,
65 pub blocker_agent: String,
66 pub reason: String,
67}