Mecha10 Node Resolver
Lightweight runtime resolver for downloading and spawning mecha10 framework nodes. This crate is designed to be embedded in robot binaries to enable runtime download of pre-compiled framework nodes, avoiding slow cross-compilation during build.
Architecture
Robot Binary (thin)
│
├── Custom nodes (compiled in)
│
└── NodeResolver
│
├── resolve("speaker") → downloads if needed
│
└── spawn("speaker", env) → runs as subprocess
│
└── ~/.mecha10/bin/speaker-0.1.44-aarch64-linux-musl
Usage
use mecha10_node_resolver::NodeResolver;
use std::collections::HashMap;
# async fn example() -> anyhow::Result<()> {
let resolver = NodeResolver::new()?;
// Check if it's a framework node
if NodeResolver::is_framework_node("@mecha10/speaker") {
// Resolve (downloads if needed)
let binary_path = resolver.resolve("speaker").await?;
// Spawn as subprocess
let mut env = HashMap::new();
env.insert("REDIS_URL".to_string(), "redis://localhost:6379".to_string());
let child = resolver.spawn("speaker", env).await?;
}
# Ok(())
# }