No description
  • Rust 86.3%
  • Shell 5.7%
  • JavaScript 3.9%
  • HTML 2%
  • CSS 1.9%
  • Other 0.2%
Find a file
despiegk f5267701b6
Some checks failed
Lint / lint-linux (push) Failing after 4s
Tests / test-linux (push) Failing after 25s
chore: migrate to hero_admin_lib shared assets
Replace duplicated Bootstrap, Bootstrap Icons, Unpoly, highlight.js, marked,
ansi_up, Chart.js and connection-status.js with shared versions from
hero_admin_lib. Add /static/shared/{*path} route. Remove ~10-13 MB of
duplicated static files per crate.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 16:19:58 +02:00
.forgejo/workflows refactor: rename hero_lib_rhai_ui -> hero_lib_rhai_admin (ui.sock -> admin.sock) 2026-05-07 16:57:34 -04:00
crates chore: migrate to hero_admin_lib shared assets 2026-05-10 16:19:58 +02:00
docs refactor: rename hero_lib_rhai_ui -> hero_lib_rhai_admin (ui.sock -> admin.sock) 2026-05-07 16:57:34 -04:00
examples auto: sync local changes 2026-04-12 16:41:48 +02:00
installers feat: initial Rhai scripting workspace migrated from hero_lib 2026-03-20 18:38:57 +01:00
scripts feat: add hero_gpu_agent daemon and launch_gpu.rhai launcher 2026-04-19 16:14:50 +02:00
.gitignore cleanup rhai 2026-03-20 19:00:21 +01:00
apikeys.db feat(runner): migrate session IDs from UUID to autoincrement u32 2026-05-01 09:18:10 +02:00
build_runner.sh refactor: rename hero_lib_rhai_ui -> hero_lib_rhai_admin (ui.sock -> admin.sock) 2026-05-07 16:57:34 -04:00
buildenv.sh refactor: rename hero_lib_rhai_ui -> hero_lib_rhai_admin (ui.sock -> admin.sock) 2026-05-07 16:57:34 -04:00
Cargo.toml chore: migrate to hero_admin_lib shared assets 2026-05-10 16:19:58 +02:00
ci_rhai.sh feat: initial Rhai scripting workspace migrated from hero_lib 2026-03-20 18:38:57 +01:00
CLAUDE.md refactor: remove build_herodo.sh, inline build into Makefile via build_lib 2026-04-14 10:18:26 +02:00
list_old_issues.rhai test(rhai): configure maximum engine limits for large scripts 2026-04-05 18:53:48 +02:00
Makefile refactor: remove build_herodo.sh, inline build into Makefile via build_lib 2026-04-14 10:18:26 +02:00
README.md refactor: rename hero_lib_rhai_ui -> hero_lib_rhai_admin (ui.sock -> admin.sock) 2026-05-07 16:57:34 -04:00
request_logs.db feat(runner): migrate session IDs from UUID to autoincrement u32 2026-05-01 09:18:10 +02:00
RHAI_LIMITS_INVESTIGATION.md docs: Rhai operation limit investigation and findings 2026-04-05 19:23:06 +02:00
run_runner.sh feat(runner): migrate hero_runner_rhai into workspace as 3 crates 2026-04-28 07:13:37 +02:00
stop_runner.sh feat(runner): migrate hero_runner_rhai into workspace as 3 crates 2026-04-28 07:13:37 +02:00

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/
  ai_rhai/                   — Rhai bindings for herolib_ai
  clients_rhai/              — Rhai bindings for herolib_clients
  code_rhai/                 — Rhai bindings for herolib_code
  core_rhai/                 — Rhai bindings for herolib_core
  crypt_rhai/                — Rhai bindings for herolib_crypt
  gpu_agent/                 — daemon binary run inside VastAI containers (see docs/gpu_agent.md)
  hero_do/                   — CLI binary embedding the Rhai engine
  hero_runner_rhai/          — CLI lifecycle binary (--start/--stop, hero_proc registration)
  hero_runner_rhai_server/   — Fork-based Rhai script runner with OpenRPC and SSE log streaming
  hero_runner_rhai_admin/       — Web dashboard for the runner (Bootstrap 5, /rpc proxy, SSE)
  mos_rhai/                  — Rhai bindings for herolib_mos
  os_rhai/                   — Rhai bindings for herolib_os
  proc_rhai/                 — Rhai bindings for hero_proc (process supervisor)
  vault_rhai/                — Rhai bindings for herolib_vault
  virt_rhai/                 — Rhai bindings for herolib_virt

Examples

See examples/ for runnable scripts covering imports, scheduling, and process supervision.

For the fork-based Rhai runner service (server + UI + lifecycle CLI), see docs/hero_runner_rhai.md.