No description
  • Rust 88.4%
  • Shell 5.9%
  • JavaScript 2.5%
  • CSS 1.6%
  • HTML 1.4%
  • Other 0.2%
Find a file
despiegk 51d0a106e0
Some checks failed
Lint / lint-linux (push) Failing after 4s
Tests / test-linux (push) Failing after 40s
feat(runner): fix service dependency and enhance session tracking
- Remove hero_proc from service dependencies (it's the supervisor, not a peer)
- Add script source tracking to SessionInfo for better observability
- Enhance UI with syntax highlighting, documentation, and asset improvements
- Add SSE streaming tests and smoke test scripts

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-04-28 12:00:26 +02:00
.forgejo/workflows feat: add Forgejo CI/CD workflows with hero_do build support 2026-03-20 19:03:40 +01:00
crates feat(runner): fix service dependency and enhance session tracking 2026-04-28 12:00:26 +02:00
docs feat(runner): fix service dependency and enhance session tracking 2026-04-28 12:00:26 +02: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
build_runner.sh feat(runner): migrate hero_runner_rhai into workspace as 3 crates 2026-04-28 07:13:37 +02:00
buildenv.sh feat: migrate to build_lib, add buildenv.sh, bump version to 0.5.0 2026-04-14 09:00:23 +02:00
Cargo.toml feat(runner): migrate hero_runner_rhai into workspace as 3 crates 2026-04-28 07:13:37 +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 feat(runner): migrate hero_runner_rhai into workspace as 3 crates 2026-04-28 07:13:37 +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_ui/       — 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.