No description
  • Rust 57.5%
  • Shell 21.6%
  • JavaScript 8.4%
  • HTML 4.2%
  • CSS 2.9%
  • Other 5.4%
Find a file
kristof1 c7ffa02e6f
Some checks failed
Build & Test / check (push) Failing after 2s
style: apply rustfmt --edition 2024 to livekit crate
Apply formatter with 2024 edition settings to generated client code
and test module for consistency across the workspace.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-04-28 10:44:31 +02:00
.cargo ci(workflows): rewrite build/release around build_lib.sh + ARM64 matrix 2026-04-27 13:16:59 +00:00
.forgejo/workflows ci(workflows): rewrite build/release around build_lib.sh + ARM64 matrix 2026-04-27 13:16:59 +00:00
crates style: apply rustfmt --edition 2024 to livekit crate 2026-04-28 10:44:31 +02:00
docs refactor(workspace): align layout with hero_compute 2026-04-28 07:29:18 +00:00
schemas/livekit refactor(oschema): align layout with canonical hero_osis/hero_voice pattern 2026-04-23 10:13:41 +02:00
scripts chore(build): replace build_lib.sh + standardize Makefile + add CI scripts 2026-04-23 16:37:14 +02:00
sdk/js refactor(oschema): align layout with canonical hero_osis/hero_voice pattern 2026-04-23 10:13:41 +02:00
.gitignore refactor(workspace): align layout with hero_compute 2026-04-28 07:29:18 +00:00
buildenv.sh chore(build): replace build_lib.sh + standardize Makefile + add CI scripts 2026-04-23 16:37:14 +02:00
Cargo.lock refactor(workspace): align layout with hero_compute 2026-04-28 07:29:18 +00:00
Cargo.toml refactor(workspace): align layout with hero_compute 2026-04-28 07:29:18 +00:00
Makefile feat(cli): enable hero_livekit single-binary with hero_proc lifecycle 2026-04-27 12:03:51 +03:00
README.md feat(scripting): add nu_service.nu + hero_do_hero_livekit Rhai binary 2026-04-22 14:35:11 +00:00
rustfmt.toml build: default cargo fmt to edition 2024 2026-04-28 07:29:18 +00:00

hero_livekit

LiveKit SFU orchestrator for the Hero OS Suite. Downloads, configures, and supervises the upstream livekit-server and lk-backend binaries, and exposes a typed OpenRPC surface plus an admin + meeting UI.

HERO_SOCKET_DIR defaults to ~/hero/var/sockets when unset. All socket paths below resolve to $HERO_SOCKET_DIR/hero_livekit/<sock>.

                 ┌───────────────────────────────────────────────────┐
                 │   hero_livekit_ui  (Askama/Bootstrap dashboard)   │
                 │   - Server lifecycle tab                          │
                 │   - Rooms / Tokens / Join                         │
                 │   - /join/{room}  (livekit-client meeting page)   │
                 └───────────────┬────────────────┬──────────────────┘
                                 │ JSON-RPC       │ ws://host:7880
                                 ▼                │
            ┌────────────────────────────────┐    │
            │    hero_livekit_server         │    │
            │    (OServer, OSchema-based)    │    │
            │    rpc.sock + ui.sock          │    │
            │    spawns & supervises:        │    │
            │      livekit-server            │────┘
            │      lk-backend                │
            └────────────────────────────────┘
                    │              │
                    ▼              ▼
             ~/hero/bin/      Redis (127.0.0.1:6379)
             livekit-server
             lk-backend

Crates

Crate Purpose
hero_livekit_server OServer-backed supervisor. Generates types + CRUD + OpenRPC spec from schemas/livekit/livekit.oschema.
hero_livekit_ui Axum-based admin dashboard + meeting page (embeds livekit-client).
hero_livekit_examples Tiny CLI programs that call the generated OpenRPC client.

Quickstart

Prerequisites on the host: Redis running at 127.0.0.1:6379.

# Build and install both binaries to ~/hero/bin/
make install

# Start the supervisor (foreground — hero_proc can also manage it via --start)
~/hero/bin/hero_livekit_server &

# Start the admin UI (binds to $HERO_SOCKET_DIR/hero_livekit/ui.sock)
~/hero/bin/hero_livekit_ui &

Then open the hero_router dashboard (usually http://127.0.0.1:9988/) and click Hero LiveKit Admin, or go directly to http://127.0.0.1:9988/hero_livekit/ui/.

In the UI, run the Server tab flow once:

  1. Install — downloads livekit-server + lk-backend to ~/hero/bin/
  2. Configure — generates livekit.yaml + backend.env with a random API secret, persists to runtime.json
  3. Start — spawns both processes

Then go to Join and click Start a new meeting to open a browser meeting page backed by livekit-client.

Documentation

Service lifecycle via hero_proc

scripts/nu_service.nu is a Nushell module that registers and supervises hero_livekit_server and hero_livekit_ui under hero_proc. It provides four subcommands: install, start, stop, status.

use scripts/nu_service.nu
nu_service install         # cargo-install the binaries into ~/hero/bin
nu_service start           # register + start actions and service in hero_proc
nu_service status          # show current state
nu_service stop            # tear down the registrations

Add --root to any subcommand when hero_proc is running as root. Prerequisite: the hero_skills tools/modules/ directory must be reachable via NU_LIB_DIRS, and hero_proc must be running.

Scripting (Rhai)

crates/hero_livekit_rhai ships a hero_do_hero_livekit binary that exposes the full LiveKitService OpenRPC surface to Rhai scripts. Build and install it with:

make install-rhai

then run one of the bundled examples:

hero_do_hero_livekit crates/hero_livekit_rhai/examples/rhai/01_status.rhai
hero_do_hero_livekit crates/hero_livekit_rhai/examples/rhai/02_list_rooms.rhai

The binary auto-injects SCRIPT_DIR, SCRIPT_FILE, and ARGS into the Rhai scope. See the files under crates/hero_livekit_rhai/examples/rhai/ for patterns:

  • 01_status.rhai — connect + print the current service state
  • 02_list_rooms.rhai — enumerate active rooms
  • 03_create_delete_room.rhai — room CRUD round-trip
  • 04_issue_token.rhai — mint a JWT with grants
  • 05_full_lifecycle.rhai — install → configure → start → create → token → stop

Scripts default to $HERO_SOCKET_DIR/hero_livekit/rpc.sock (falling back to ~/hero/var/sockets/hero_livekit/rpc.sock); pass an explicit path to livekit_client("/custom/path/rpc.sock") to override.

License

See individual crates.