- Rust 92.8%
- Shell 7%
- Makefile 0.2%
- Remove non-existent "rhai" feature from herolib_crypt dependency - Enable httpsig feature for herolib_crypt (was disabled by default-features=false) - Fix GitTree::new_flat -> GitTree::new (API removed upstream) - Wrap HttpSigner/HttpVerifier in Arc<Mutex> for Rhai Clone requirement - Rewrite tools_rhai bindings for upstream API changes: - forge.rs: ForgeClient::connect(), RepoQuery, new find/list API - secrets.rs: async SecretsClient replacing file-based sync - services.rs: ServiceDefinition model replacing runtime functions - init.rs: async init_main() with tokio runtime wrapper - Remove legacy.rs (module removed upstream) - Regenerate Cargo.lock for resolved dependency tree Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .forgejo/workflows | ||
| crates | ||
| docs/rhai | ||
| examples | ||
| installers | ||
| scripts | ||
| .gitignore | ||
| build_herodo.sh | ||
| Cargo.lock | ||
| Cargo.toml | ||
| ci_rhai.sh | ||
| CLAUDE.md | ||
| Makefile | ||
| README.md | ||
hero_lib_rhai
Rhai scripting bindings for the herolib libraries. Each crate in crates/*_rhai exposes a corresponding herolib module as a Rhai namespace. The hero_do binary embeds the Rhai engine and loads all modules, giving you a scriptable CLI for the entire herolib ecosystem.
hero_do
Build
Always use the provided script — do not use cargo build directly:
./build_herodo.sh
Run a script
hero_do my_script.rhai
hero_do examples/scheduler/01_basic.rhai
Shebang support
Make any .rhai file directly executable:
#!/usr/bin/env hero_do
print("Hello from hero_do!");
chmod +x my_script.rhai
./my_script.rhai
Available modules
| Module | Description |
|---|---|
herolib-core |
Text processing, networking, HeroScript |
herolib-os |
OS operations, process management, git, virtualisation |
herolib-crypt |
Encryption and key management |
herolib-clients |
Redis, PostgreSQL, MQTT, Mycelium, Hetzner |
herolib-ai |
AI client (Groq, OpenRouter, SambaNova) |
herolib-vault |
Secret vault management |
herolib-code |
Rust builder utilities |
herolib-mos |
MOS module |
herolib-virt |
Virtualisation |
herolib-proc |
Process supervisor (hero_proc): services, jobs, logs |
Import system
hero_do extends Rhai's import statement to support local files, directories, HTTP URLs, and a GitHub shorthand.
import "lib/math" as m; // local file (no extension needed)
import "lib" as l; // whole directory — all .rhai files merged
import "https://example.com/utils" as u; // HTTPS URL
import "github:user/repo/scripts/helpers" as h; // GitHub raw shorthand
Relative paths resolve relative to the calling script's location. HTTP and GitHub results are cached for the engine session.
Directory imports
When you import a directory, all .rhai files inside are sorted alphabetically, merged, and exposed as a single namespace.
run()
run() executes another script in full (with its own scope), unlike import which loads a namespace.
run("other.rhai"); // relative to calling script
run("https://example.com/setup.rhai"); // from HTTP
run("github:myorg/repo/scripts/setup"); // from GitHub
Built-in scheduler
Register tasks at any interval; the scheduler checks every 50 ms.
every(30, "sec", || { print("every 30 seconds"); });
every(5, "min", || { print("every 5 minutes"); });
every(1, "hour", || { print("every hour"); });
every(500,"ms", || { print("every 500 ms"); });
scheduler_run(); // block forever (Ctrl+C to stop)
scheduler_run_for(60); // block for 60 seconds then return
scheduler_stop(); // stop from inside a task
Time units accepted: ms / millisecond / milliseconds, s / sec / second / seconds, m / min / minute / minutes, h / hour / hours.
Tasks run immediately on the first tick, then repeat at the given interval. Closures capture variables by reference, so state persists across ticks.
Workspace crate layout
crates/
core_rhai/ — Rhai bindings for herolib_core
os_rhai/ — Rhai bindings for herolib_os
crypt_rhai/ — Rhai bindings for herolib_crypt
vault_rhai/ — Rhai bindings for herolib_vault
ai_rhai/ — Rhai bindings for herolib_ai
clients_rhai/ — Rhai bindings for herolib_clients
code_rhai/ — Rhai bindings for herolib_code
mos_rhai/ — Rhai bindings for herolib_mos
virt_rhai/ — Rhai bindings for herolib_virt
proc_rhai/ — Rhai bindings for hero_proc (process supervisor)
hero_do/ — CLI binary embedding the Rhai engine
Examples
See examples/ for runnable scripts covering imports, scheduling, and process supervision.