herolib-do

Crates.ioherolib-do
lib.rsherolib-do
version0.3.12
created_at2025-12-27 20:04:30.335068+00
updated_at2026-01-22 17:16:14.03183+00
descriptionInteractive Rhai shell aggregating herolib packages
homepage
repositoryhttps://github.com/herolib/herolib_rust
max_upload_size
id2007735
size274,042
kristof de spiegeleer (despiegk)

documentation

README

Herodo - Rhai Script Executor for HeroLib

Herodo is a command-line utility that executes Rhai scripts with full access to the HeroLib ecosystem. It provides a powerful scripting environment for automation, AI, system management, and infrastructure tasks.

Features

  • Single Script Execution: Execute individual .rhai script files
  • Directory Execution: Execute all .rhai scripts in a directory (recursively)
  • Sorted Execution: Scripts are executed in alphabetical order for predictable behavior
  • HeroLib Integration: Full access to all HeroLib modules and functions
  • Error Handling: Clear error messages and proper exit codes
  • Logging Support: Built-in logging with env_logger

Installation

Build and Install

git clone https://github.com/herolib/herolib_rust
cd herolib_rust
./build.sh

This script will:

  • Build herodo in debug mode
  • Install it to ~/hero/bin/herodo (non-root) or /usr/local/bin/herodo (root)
  • Make it available in your PATH

Note: If using the non-root installation, make sure ~/hero/bin is in your PATH:

export PATH="$HOME/hero/bin:$PATH"

Usage

Execute a Single Script

herodo path/to/script.rhai

Execute All Scripts in a Directory

herodo path/to/scripts/

When given a directory, herodo will:

  1. Recursively find all .rhai files
  2. Sort them alphabetically
  3. Execute them in order
  4. Stop on the first error

Example Scripts

Basic Script

// hello.rhai
print("Hello from Herodo!");
let result = 42 * 2;
print(`Result: ${result}`);

AI Chat

// ai_chat.rhai
// Requires GROQ_API_KEY, OPENROUTER_API_KEY, or SAMBANOVA_API_KEY

// List available models
let models = ai_models();
print("Available models:");
for model in models {
    print(`  - ${model}`);
}

// Simple chat
let response = ai_chat("What is the capital of France?");
print(response);

// Chat with specific model
let response = ai_chat_with_model("gpt_oss_120b", "Hello!");
print(response);

// Chat with system message
let response = ai_chat_with_system(
    "llama3_3_70b",
    "You are a helpful coding assistant.",
    "Write a hello world in Rust"
);
print(response);

System Operations

// system_info.rhai

// Check if a file exists
let config_exists = exist("/etc/hosts");
print(`Config file exists: ${config_exists}`);

// Download a file
download("https://example.com/data.txt", "/tmp/data.txt");
print("File downloaded successfully");

// Execute a system command
let output = run("ls -la /tmp");
print("Directory listing:");
print(output.stdout);

Redis Operations

// redis_example.rhai

// Set a value
redis_set("app_status", "running");
print("Status set in Redis");

// Get the value
let status = redis_get("app_status");
print(`Current status: ${status}`);

Available Modules

Herodo provides access to all HeroLib modules through Rhai:

AI (herolib-ai)

  • ai_chat(prompt) - Chat with default model
  • ai_chat_with_model(model, prompt) - Chat with specific model
  • ai_chat_with_system(model, system, prompt) - Chat with system message
  • ai_models() - List available chat models
  • ai_embed(text) - Generate text embedding
  • ai_embed_batch(texts) - Batch embeddings
  • ai_transcribe(file_path) - Transcribe audio file

Core (herolib-core)

  • Text processing and manipulation
  • HeroScript parsing and execution
  • Network utilities

Cryptography (herolib-crypt)

  • keypair_new() - Generate Ed25519 keypair
  • keypair_sign(keypair, message) - Sign messages
  • keypair_verify(pubkey, message, signature) - Verify signatures
  • Symmetric encryption with ChaCha20-Poly1305

OS (herolib-os)

  • exist(path) - Check file existence
  • mkdir(path) - Create directories
  • delete(path) - Delete files/directories
  • download(url, dest) - Download files
  • run(cmd) - Execute system commands
  • Git operations, SSH, process management

Clients (herolib-clients)

  • redis_set(key, value) - Redis operations
  • redis_get(key) - Get Redis values
  • PostgreSQL, MQTT, Mycelium clients

Virtualization (herolib-virt)

  • Buildah container building
  • Nerdctl container management
  • QEMU/KVM operations

MOS (herolib-mos)

  • Network namespace management
  • Bridge and veth pair operations
  • System profiling

Environment Variables

Set API keys for AI providers:

export GROQ_API_KEY="your-groq-key"
export OPENROUTER_API_KEY="your-openrouter-key"
export SAMBANOVA_API_KEY="your-sambanova-key"

Enable detailed logging:

RUST_LOG=debug herodo script.rhai

Error Handling

Herodo provides clear error messages and appropriate exit codes:

  • Exit Code 0: All scripts executed successfully
  • Exit Code 1: Error occurred (file not found, script error, etc.)

Testing

Run the test suite:

cd packages/herodo
cargo test

License

Apache-2.0

Commit count: 0

cargo fmt