* feat: add ZeroClaw firmware for ESP32 and Nucleo * Introduced new firmware for ZeroClaw on ESP32 and Nucleo-F401RE, enabling JSON-over-serial communication for GPIO control. * Added `zeroclaw-esp32` with support for commands like `gpio_read` and `gpio_write`, along with capabilities reporting. * Implemented `zeroclaw-nucleo` firmware with similar functionality for STM32, ensuring compatibility with existing ZeroClaw protocols. * Updated `.gitignore` to include new firmware targets and added necessary dependencies in `Cargo.toml` for both platforms. * Created README files for both firmware projects detailing setup, build, and usage instructions. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * feat: enhance hardware peripheral support and documentation - Added `Peripheral` trait implementation in `src/peripherals/` to manage hardware boards (STM32, RPi GPIO). - Updated `AGENTS.md` to include new extension points for peripherals and their configuration. - Introduced comprehensive documentation for adding boards and tools, including a quick start guide and supported boards. - Enhanced `Cargo.toml` to include optional dependencies for PDF extraction and peripheral support. - Created new datasheets for Arduino Uno, ESP32, and Nucleo-F401RE, detailing pin aliases and GPIO usage. - Implemented new tools for hardware memory reading and board information retrieval in the agent loop. This update significantly improves the integration and usability of hardware peripherals within the ZeroClaw framework. * feat: add ZeroClaw firmware for ESP32 and Nucleo * Introduced new firmware for ZeroClaw on ESP32 and Nucleo-F401RE, enabling JSON-over-serial communication for GPIO control. * Added `zeroclaw-esp32` with support for commands like `gpio_read` and `gpio_write`, along with capabilities reporting. * Implemented `zeroclaw-nucleo` firmware with similar functionality for STM32, ensuring compatibility with existing ZeroClaw protocols. * Updated `.gitignore` to include new firmware targets and added necessary dependencies in `Cargo.toml` for both platforms. * Created README files for both firmware projects detailing setup, build, and usage instructions. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * feat: enhance hardware peripheral support and documentation - Added `Peripheral` trait implementation in `src/peripherals/` to manage hardware boards (STM32, RPi GPIO). - Updated `AGENTS.md` to include new extension points for peripherals and their configuration. - Introduced comprehensive documentation for adding boards and tools, including a quick start guide and supported boards. - Enhanced `Cargo.toml` to include optional dependencies for PDF extraction and peripheral support. - Created new datasheets for Arduino Uno, ESP32, and Nucleo-F401RE, detailing pin aliases and GPIO usage. - Implemented new tools for hardware memory reading and board information retrieval in the agent loop. This update significantly improves the integration and usability of hardware peripherals within the ZeroClaw framework. * feat: Introduce hardware auto-discovery and expanded configuration options for agents, hardware, and security. * chore: update dependencies and improve probe-rs integration - Updated `Cargo.lock` to remove specific version constraints for several dependencies, including `zerocopy`, `syn`, and `strsim`, allowing for more flexibility in version resolution. - Upgraded `bincode` and `bitfield` to their latest versions, enhancing serialization and memory management capabilities. - Updated `Cargo.toml` to reflect the new version of `probe-rs` from `0.24` to `0.30`, improving hardware probing functionality. - Refactored code in `src/hardware` and `src/tools` to utilize the new `SessionConfig` for session management in `probe-rs`, ensuring better compatibility and performance. - Cleaned up documentation in `docs/datasheets/nucleo-f401re.md` by removing unnecessary lines. * fix: apply cargo fmt * docs: add hardware architecture diagram. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
231 lines
6.3 KiB
Rust
231 lines
6.3 KiB
Rust
#![warn(clippy::all, clippy::pedantic)]
|
|
#![allow(
|
|
clippy::assigning_clones,
|
|
clippy::bool_to_int_with_if,
|
|
clippy::case_sensitive_file_extension_comparisons,
|
|
clippy::cast_possible_wrap,
|
|
clippy::doc_markdown,
|
|
clippy::field_reassign_with_default,
|
|
clippy::float_cmp,
|
|
clippy::implicit_clone,
|
|
clippy::items_after_statements,
|
|
clippy::map_unwrap_or,
|
|
clippy::manual_let_else,
|
|
clippy::missing_errors_doc,
|
|
clippy::missing_panics_doc,
|
|
clippy::module_name_repetitions,
|
|
clippy::must_use_candidate,
|
|
clippy::new_without_default,
|
|
clippy::needless_pass_by_value,
|
|
clippy::needless_raw_string_hashes,
|
|
clippy::redundant_closure_for_method_calls,
|
|
clippy::return_self_not_must_use,
|
|
clippy::similar_names,
|
|
clippy::single_match_else,
|
|
clippy::struct_field_names,
|
|
clippy::too_many_lines,
|
|
clippy::uninlined_format_args,
|
|
clippy::unnecessary_cast,
|
|
clippy::unnecessary_lazy_evaluations,
|
|
clippy::unnecessary_literal_bound,
|
|
clippy::unnecessary_map_or,
|
|
clippy::unused_self,
|
|
clippy::cast_precision_loss,
|
|
clippy::unnecessary_wraps,
|
|
dead_code
|
|
)]
|
|
|
|
use clap::Subcommand;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
pub mod agent;
|
|
pub mod channels;
|
|
pub mod config;
|
|
pub mod cost;
|
|
pub mod cron;
|
|
pub mod daemon;
|
|
pub mod doctor;
|
|
pub mod gateway;
|
|
pub mod hardware;
|
|
pub mod health;
|
|
pub mod heartbeat;
|
|
pub mod identity;
|
|
pub mod integrations;
|
|
pub mod memory;
|
|
pub mod migration;
|
|
pub mod observability;
|
|
pub mod onboard;
|
|
pub mod peripherals;
|
|
pub mod providers;
|
|
pub mod rag;
|
|
pub mod runtime;
|
|
pub mod security;
|
|
pub mod service;
|
|
pub mod skills;
|
|
pub mod tools;
|
|
pub mod tunnel;
|
|
pub mod util;
|
|
|
|
pub use config::Config;
|
|
|
|
/// Service management subcommands
|
|
#[derive(Subcommand, Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub enum ServiceCommands {
|
|
/// Install daemon service unit for auto-start and restart
|
|
Install,
|
|
/// Start daemon service
|
|
Start,
|
|
/// Stop daemon service
|
|
Stop,
|
|
/// Check daemon service status
|
|
Status,
|
|
/// Uninstall daemon service unit
|
|
Uninstall,
|
|
}
|
|
|
|
/// Channel management subcommands
|
|
#[derive(Subcommand, Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub enum ChannelCommands {
|
|
/// List all configured channels
|
|
List,
|
|
/// Start all configured channels (handled in main.rs for async)
|
|
Start,
|
|
/// Run health checks for configured channels (handled in main.rs for async)
|
|
Doctor,
|
|
/// Add a new channel configuration
|
|
Add {
|
|
/// Channel type (telegram, discord, slack, whatsapp, matrix, imessage, email)
|
|
channel_type: String,
|
|
/// Optional configuration as JSON
|
|
config: String,
|
|
},
|
|
/// Remove a channel configuration
|
|
Remove {
|
|
/// Channel name to remove
|
|
name: String,
|
|
},
|
|
}
|
|
|
|
/// Skills management subcommands
|
|
#[derive(Subcommand, Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub enum SkillCommands {
|
|
/// List all installed skills
|
|
List,
|
|
/// Install a new skill from a URL or local path
|
|
Install {
|
|
/// Source URL or local path
|
|
source: String,
|
|
},
|
|
/// Remove an installed skill
|
|
Remove {
|
|
/// Skill name to remove
|
|
name: String,
|
|
},
|
|
}
|
|
|
|
/// Migration subcommands
|
|
#[derive(Subcommand, Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub enum MigrateCommands {
|
|
/// Import memory from an `OpenClaw` workspace into this `ZeroClaw` workspace
|
|
Openclaw {
|
|
/// Optional path to `OpenClaw` workspace (defaults to ~/.openclaw/workspace)
|
|
#[arg(long)]
|
|
source: Option<std::path::PathBuf>,
|
|
|
|
/// Validate and preview migration without writing any data
|
|
#[arg(long)]
|
|
dry_run: bool,
|
|
},
|
|
}
|
|
|
|
/// Cron subcommands
|
|
#[derive(Subcommand, Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub enum CronCommands {
|
|
/// List all scheduled tasks
|
|
List,
|
|
/// Add a new scheduled task
|
|
Add {
|
|
/// Cron expression
|
|
expression: String,
|
|
/// Command to run
|
|
command: String,
|
|
},
|
|
/// Add a one-shot delayed task (e.g. "30m", "2h", "1d")
|
|
Once {
|
|
/// Delay duration
|
|
delay: String,
|
|
/// Command to run
|
|
command: String,
|
|
},
|
|
/// Remove a scheduled task
|
|
Remove {
|
|
/// Task ID
|
|
id: String,
|
|
},
|
|
/// Pause a scheduled task
|
|
Pause {
|
|
/// Task ID
|
|
id: String,
|
|
},
|
|
/// Resume a paused task
|
|
Resume {
|
|
/// Task ID
|
|
id: String,
|
|
},
|
|
}
|
|
|
|
/// Integration subcommands
|
|
#[derive(Subcommand, Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub enum IntegrationCommands {
|
|
/// Show details about a specific integration
|
|
Info {
|
|
/// Integration name
|
|
name: String,
|
|
},
|
|
}
|
|
|
|
/// Hardware discovery subcommands
|
|
#[derive(Subcommand, Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub enum HardwareCommands {
|
|
/// Enumerate USB devices (VID/PID) and show known boards
|
|
Discover,
|
|
/// Introspect a device by path (e.g. /dev/ttyACM0)
|
|
Introspect {
|
|
/// Serial or device path
|
|
path: String,
|
|
},
|
|
/// Get chip info via USB (probe-rs over ST-Link). No firmware needed on target.
|
|
Info {
|
|
/// Chip name (e.g. STM32F401RETx). Default: STM32F401RETx for Nucleo-F401RE
|
|
#[arg(long, default_value = "STM32F401RETx")]
|
|
chip: String,
|
|
},
|
|
}
|
|
|
|
/// Peripheral (hardware) management subcommands
|
|
#[derive(Subcommand, Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub enum PeripheralCommands {
|
|
/// List configured peripherals
|
|
List,
|
|
/// Add a peripheral (board path, e.g. nucleo-f401re /dev/ttyACM0)
|
|
Add {
|
|
/// Board type (nucleo-f401re, rpi-gpio, esp32)
|
|
board: String,
|
|
/// Path for serial transport (/dev/ttyACM0) or "native" for local GPIO
|
|
path: String,
|
|
},
|
|
/// Flash ZeroClaw firmware to Arduino (creates .ino, installs arduino-cli if needed, uploads)
|
|
Flash {
|
|
/// Serial port (e.g. /dev/cu.usbmodem12345). If omitted, uses first arduino-uno from config.
|
|
#[arg(short, long)]
|
|
port: Option<String>,
|
|
},
|
|
/// Setup Arduino Uno Q Bridge app (deploy GPIO bridge for agent control)
|
|
SetupUnoQ {
|
|
/// Uno Q IP (e.g. 192.168.0.48). If omitted, assumes running ON the Uno Q.
|
|
#[arg(long)]
|
|
host: Option<String>,
|
|
},
|
|
/// Flash ZeroClaw firmware to Nucleo-F401RE (builds + probe-rs run)
|
|
FlashNucleo,
|
|
}
|