Skip to main content

feagi_services/types/
registration.rs

1// Copyright 2025 Neuraville Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4//! Registration DTOs - Shared between feagi-services and feagi-io
5
6use serde::{Deserialize, Serialize};
7use std::collections::HashMap;
8
9/// Registration request from agent
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct RegistrationRequest {
12    pub agent_id: String,
13    pub agent_type: String,
14    pub capabilities: serde_json::Value, // Flexible JSON for different formats
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub chosen_transport: Option<String>, // Agent reports which transport it chose: "zmq", "websocket", "shm", etc.
17}
18
19/// Transport configuration for an agent
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct TransportConfig {
22    pub transport_type: String, // "zmq" or "websocket"
23    pub enabled: bool,
24    pub ports: HashMap<String, u16>,
25    pub host: String,
26}
27
28/// Status of a cortical area during registration
29#[derive(Debug, Clone, Serialize, Deserialize)]
30#[serde(rename_all = "lowercase")]
31pub enum AreaStatus {
32    /// Area already existed in genome
33    Existing,
34    /// Area was auto-created during registration
35    Created,
36    /// Area missing and auto-create disabled
37    Missing,
38    /// Error during creation/check
39    Error,
40}
41
42/// Status information for a cortical area
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct CorticalAreaStatus {
45    pub area_name: String,
46    pub cortical_id: String, // base64 encoded
47    pub status: AreaStatus,
48    pub dimensions: Option<(usize, usize, usize)>,
49    pub message: Option<String>, // Error message or creation confirmation
50}
51
52/// Cortical area availability information for agent registration
53#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct CorticalAreaAvailability {
55    /// Required IPU areas (from vision/sensory capabilities)
56    pub required_ipu_areas: Vec<CorticalAreaStatus>,
57    /// Required OPU areas (from motor capabilities)
58    pub required_opu_areas: Vec<CorticalAreaStatus>,
59}
60
61/// Registration response to agent
62#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct RegistrationResponse {
64    pub status: String,
65    pub message: Option<String>,
66    pub shm_paths: Option<HashMap<String, String>>, // capability_type -> shm_path
67    pub transports: Option<Vec<TransportConfig>>,   // Available transports with their configs
68    pub recommended_transport: Option<String>,      // "zmq" or "websocket"
69    /// Cortical area availability status for agent operations
70    pub cortical_areas: CorticalAreaAvailability,
71}