agentmux_srv\backend\reactive/
types.rs1use std::sync::Arc;
6
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct InjectionRequest {
12 pub target_agent: String,
13 pub message: String,
14 #[serde(default, skip_serializing_if = "Option::is_none")]
15 pub source_agent: Option<String>,
16 #[serde(default, skip_serializing_if = "Option::is_none")]
17 pub request_id: Option<String>,
18 #[serde(default, skip_serializing_if = "Option::is_none")]
19 pub priority: Option<String>,
20 #[serde(default)]
21 pub wait_for_idle: bool,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct InjectionResponse {
27 pub success: bool,
28 pub request_id: String,
29 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub block_id: Option<String>,
31 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub error: Option<String>,
33 pub timestamp: u64,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct AgentRegistration {
39 pub agent_id: String,
40 pub block_id: String,
41 #[serde(default, skip_serializing_if = "Option::is_none")]
42 pub tab_id: Option<String>,
43 pub registered_at: u64,
44 pub last_seen: u64,
45}
46
47#[allow(dead_code)]
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct AgentListResponse {
51 pub agents: Vec<AgentRegistration>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct AuditLogEntry {
57 pub timestamp: u64,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
59 pub source_agent: Option<String>,
60 pub target_agent: String,
61 pub block_id: String,
62 pub message_hash: String,
63 pub message_length: usize,
64 pub success: bool,
65 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub error_message: Option<String>,
67 pub request_id: String,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct PollerConfig {
73 #[serde(default, skip_serializing_if = "Option::is_none")]
74 pub agentmux_url: Option<String>,
75 #[serde(default, skip_serializing_if = "Option::is_none")]
76 pub agentmux_token: Option<String>,
77 #[serde(default)]
78 pub poll_interval_secs: u64,
79}
80
81#[allow(dead_code)]
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct AgentMuxConfigFile {
85 #[serde(default, skip_serializing_if = "Option::is_none")]
86 pub url: Option<String>,
87 #[serde(default, skip_serializing_if = "Option::is_none")]
88 pub token: Option<String>,
89}
90
91#[allow(dead_code)]
93#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct PendingInjection {
95 pub id: String,
96 pub message: String,
97 #[serde(default, skip_serializing_if = "Option::is_none")]
98 pub source_agent: Option<String>,
99 #[serde(default, skip_serializing_if = "Option::is_none")]
100 pub priority: Option<String>,
101 #[serde(default)]
102 pub created_at: u64,
103}
104
105#[allow(dead_code)]
107#[derive(Debug, Clone, Serialize, Deserialize)]
108pub struct PendingResponse {
109 pub injections: Vec<PendingInjection>,
110}
111
112#[allow(dead_code)]
114#[derive(Debug, Clone, Serialize, Deserialize)]
115pub struct AckRequest {
116 pub injection_ids: Vec<String>,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize)]
121pub struct PollerStatus {
122 pub configured: bool,
123 pub running: bool,
124 #[serde(default, skip_serializing_if = "Option::is_none")]
125 pub url: Option<String>,
126 pub has_token: bool,
127 pub poll_count: u64,
128 pub injections_count: u64,
129 #[serde(default, skip_serializing_if = "Option::is_none")]
130 pub last_poll: Option<u64>,
131}
132
133pub type InputSender = Arc<dyn Fn(&str, &[u8]) -> Result<(), String> + Send + Sync>;