use super::{CargoDependency, Component, ComponentCatalog, ComponentType, CustomNodeConfig, Mecha10Config};
pub fn add_packages(catalog: &mut ComponentCatalog) {
catalog.insert(Component {
id: "behavior-executor".to_string(),
name: "behavior-executor".to_string(),
description: "Behavior tree executor node for autonomous robot behaviors".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec!["behavior".to_string(), "ai".to_string(), "autonomous".to_string()],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-behavior-executor".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "behavior-executor".to_string(),
path: "mecha10-nodes-behavior-executor".to_string(),
config: None,
description: "Behavior tree executor node for autonomous robot behaviors".to_string(),
run_target: "robot".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "camera".to_string(),
name: "camera".to_string(),
description: "Camera node for Mecha10 - unified camera streaming with dual-path WebRTC and Redis publishing"
.to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec!["camera".to_string(), "video".to_string(), "streaming".to_string()],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-camera".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "camera".to_string(),
path: "mecha10-nodes-camera".to_string(),
config: None,
description:
"Camera node for Mecha10 - unified camera streaming with dual-path WebRTC and Redis publishing"
.to_string(),
run_target: "robot".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "diagnostics".to_string(),
name: "diagnostics".to_string(),
description: "Diagnostics node that publishes Docker and system resource metrics".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec![
"diagnostics".to_string(),
"monitoring".to_string(),
"metrics".to_string(),
],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-diagnostics".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "diagnostics".to_string(),
path: "mecha10-nodes-diagnostics".to_string(),
config: None,
description: "Diagnostics node that publishes Docker and system resource metrics".to_string(),
run_target: "robot".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "image-classifier".to_string(),
name: "image-classifier".to_string(),
description: "Image classification node using ONNX models from catalog".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec![
"ai".to_string(),
"ml".to_string(),
"vision".to_string(),
"classification".to_string(),
],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-image-classifier".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "image-classifier".to_string(),
path: "mecha10-nodes-image-classifier".to_string(),
config: None,
description: "Image classification node using ONNX models from catalog".to_string(),
run_target: "remote".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "imu".to_string(),
name: "imu".to_string(),
description: "IMU node for Mecha10 - manages IMU driver and provides orientation/acceleration data".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec!["imu".to_string(), "sensor".to_string(), "orientation".to_string()],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-imu".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "imu".to_string(),
path: "mecha10-nodes-imu".to_string(),
config: None,
description: "IMU node for Mecha10 - manages IMU driver and provides orientation/acceleration data"
.to_string(),
run_target: "robot".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "listener".to_string(),
name: "listener".to_string(),
description: "Example listener node for the Mecha10 robotics framework".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec!["pubsub".to_string(), "example".to_string()],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-listener".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "listener".to_string(),
path: "mecha10-nodes-listener".to_string(),
config: None,
description: "Example listener node for the Mecha10 robotics framework".to_string(),
run_target: "robot".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "llm-command".to_string(),
name: "llm-command".to_string(),
description: "Natural language command parsing via LLM APIs (OpenAI, Claude, Ollama)".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec![
"ai".to_string(),
"llm".to_string(),
"nlp".to_string(),
"command".to_string(),
],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-llm-command".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "llm-command".to_string(),
path: "mecha10-nodes-llm-command".to_string(),
config: None,
description: "Natural language command parsing via LLM APIs (OpenAI, Claude, Ollama)".to_string(),
run_target: "remote".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "motor".to_string(),
name: "motor".to_string(),
description: "Motor node for Mecha10 - manages motor driver and provides velocity control interface"
.to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec!["motor".to_string(), "actuator".to_string(), "odometry".to_string()],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-motor".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "motor".to_string(),
path: "mecha10-nodes-motor".to_string(),
config: None,
description: "Motor node for Mecha10 - manages motor driver and provides velocity control interface"
.to_string(),
run_target: "robot".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "object-detector".to_string(),
name: "object-detector".to_string(),
description: "Real-time object detection node using YOLO and ONNX".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec![
"ai".to_string(),
"ml".to_string(),
"vision".to_string(),
"detection".to_string(),
"yolo".to_string(),
],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-object-detector".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "object-detector".to_string(),
path: "mecha10-nodes-object-detector".to_string(),
config: None,
description: "Real-time object detection node using YOLO and ONNX".to_string(),
run_target: "remote".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "simulator".to_string(),
name: "simulator".to_string(),
description: "MuJoCo simulation node - supervises the Python mecha10_rl MuJoCo backend as a subprocess, bridging /motor/cmd_vel, /camera/rgb, and /imu/data over Redis".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec!["simulation".to_string(), "mujoco".to_string(), "rl".to_string()],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-simulator".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "simulator".to_string(),
path: "mecha10-nodes-simulator".to_string(),
config: None,
description: "MuJoCo simulation node - supervises the Python mecha10_rl MuJoCo backend as a subprocess, bridging /motor/cmd_vel, /camera/rgb, and /imu/data over Redis".to_string(),
run_target: "dev".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "speaker".to_string(),
name: "speaker".to_string(),
description: "Example speaker node for the Mecha10 robotics framework".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec!["pubsub".to_string(), "example".to_string()],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-speaker".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "speaker".to_string(),
path: "mecha10-nodes-speaker".to_string(),
config: None,
description: "Example speaker node for the Mecha10 robotics framework".to_string(),
run_target: "robot".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "teleop".to_string(),
name: "teleop".to_string(),
description: "Teleoperation node for keyboard-based robot control".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec!["teleop".to_string(), "control".to_string(), "development".to_string()],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-teleop".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "teleop".to_string(),
path: "mecha10-nodes-teleop".to_string(),
config: None,
description: "Teleoperation node for keyboard-based robot control".to_string(),
run_target: "dev".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "video-streamer".to_string(),
name: "video-streamer".to_string(),
description: "Video streamer node for WebRTC streaming to dashboard".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec!["video".to_string(), "webrtc".to_string(), "streaming".to_string()],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-video-streamer".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "video-streamer".to_string(),
path: "mecha10-nodes-video-streamer".to_string(),
config: None,
description: "Video streamer node for WebRTC streaming to dashboard".to_string(),
run_target: "remote".to_string(),
enabled: true,
}),
behavior: None,
},
});
catalog.insert(Component {
id: "websocket-bridge".to_string(),
name: "websocket-bridge".to_string(),
description: "WebSocket bridge node that forwards Redis pub/sub to WebSocket clients".to_string(),
component_type: ComponentType::Package,
version: "0.1.0".to_string(),
category: "nodes".to_string(),
tags: vec!["websocket".to_string(), "bridge".to_string(), "streaming".to_string()],
cargo_dependencies: vec![CargoDependency {
name: "mecha10-nodes-websocket-bridge".to_string(),
version: Some("0.1".to_string()),
path: None,
features: vec![],
optional: false,
}],
files: vec![],
mecha10_config: Mecha10Config {
driver: None,
custom_node: Some(CustomNodeConfig {
name: "websocket-bridge".to_string(),
path: "mecha10-nodes-websocket-bridge".to_string(),
config: None,
description: "WebSocket bridge node that forwards Redis pub/sub to WebSocket clients".to_string(),
run_target: "remote".to_string(),
enabled: true,
}),
behavior: None,
},
});
}