Implement comprehensive admin UI with job management and API key display

Admin UI Features:
- Complete job lifecycle: create, run, view status, view output, delete
- Job table with sorting, filtering, and real-time status updates
- Status polling with countdown timers for running jobs
- Job output modal with result/error display
- API keys management: create keys, list keys with secrets visible
- Sidebar toggle between runners and keys views
- Toast notifications for errors
- Modern dark theme UI with responsive design

Supervisor Improvements:
- Fixed job status persistence using client methods
- Refactored get_job_result to use client.get_status, get_result, get_error
- Changed runner_rust dependency from git to local path
- Authentication system with API key scopes (admin, user, register)
- Job listing with status fetching from Redis
- Services module for job and auth operations

OpenRPC Client:
- Added auth_list_keys method for fetching API keys
- WASM bindings for browser usage
- Proper error handling and type conversions

Build Status:  All components build successfully
This commit is contained in:
Timur Gordon
2025-10-28 03:32:25 +01:00
parent 5f5dd35dbc
commit f249c8b49b
36 changed files with 4811 additions and 6421 deletions

168
Cargo.lock generated
View File

@@ -1377,12 +1377,14 @@ dependencies = [
"env_logger 0.10.2",
"escargot",
"hero-supervisor-openrpc-client",
"hyper 1.7.0",
"hyper-util",
"jsonrpsee",
"log",
"rand 0.8.5",
"redis 0.25.4",
"reqwest 0.12.24",
"runner_rust 0.1.0 (git+https://git.ourworld.tf/herocode/runner_rust.git)",
"runner_rust 0.1.0",
"serde",
"serde_json",
"thiserror 1.0.69",
@@ -1403,13 +1405,17 @@ dependencies = [
"env_logger 0.11.8",
"getrandom 0.2.16",
"hero-supervisor",
"hex",
"indexmap",
"js-sys",
"jsonrpsee",
"log",
"runner_rust 0.1.0 (git+https://git.ourworld.tf/herocode/runner_rust.git?branch=main)",
"secp256k1 0.29.1",
"serde",
"serde-wasm-bindgen",
"serde_json",
"sha2",
"thiserror 1.0.69",
"tokio",
"uuid",
@@ -2639,6 +2645,26 @@ dependencies = [
"num-traits",
]
[[package]]
name = "osiris"
version = "0.1.0"
dependencies = [
"anyhow",
"clap",
"env_logger 0.10.2",
"osiris_derive 0.1.0",
"redis 0.24.0",
"rhai",
"serde",
"serde_json",
"time",
"tokio",
"toml",
"tracing",
"tracing-subscriber",
"uuid",
]
[[package]]
name = "osiris"
version = "0.1.0"
@@ -2647,7 +2673,7 @@ dependencies = [
"anyhow",
"clap",
"env_logger 0.10.2",
"osiris_derive",
"osiris_derive 0.1.0 (git+https://git.ourworld.tf/herocode/osiris.git)",
"redis 0.24.0",
"serde",
"serde_json",
@@ -2659,6 +2685,15 @@ dependencies = [
"uuid",
]
[[package]]
name = "osiris_derive"
version = "0.1.0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.108",
]
[[package]]
name = "osiris_derive"
version = "0.1.0"
@@ -3531,6 +3566,52 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746"
[[package]]
name = "runner_rust"
version = "0.1.0"
dependencies = [
"anyhow",
"async-trait",
"chrono",
"clap",
"crossterm",
"env_logger 0.10.2",
"hero_logger",
"heromodels",
"heromodels-derive",
"heromodels_core",
"hex",
"log",
"osiris 0.1.0",
"rand 0.8.5",
"ratatui",
"redis 0.25.4",
"rhai",
"rhailib_dsl",
"sal-git",
"sal-hetzner",
"sal-kubernetes",
"sal-mycelium",
"sal-net",
"sal-os",
"sal-postgresclient",
"sal-process",
"sal-redisclient",
"sal-text",
"sal-vault",
"sal-virt",
"sal-zinit-client",
"secp256k1 0.28.2",
"serde",
"serde_json",
"sha2",
"thiserror 1.0.69",
"tokio",
"toml",
"tracing",
"uuid",
]
[[package]]
name = "runner_rust"
version = "0.1.0"
@@ -3548,7 +3629,7 @@ dependencies = [
"heromodels_core",
"hex",
"log",
"osiris",
"osiris 0.1.0 (git+https://git.ourworld.tf/herocode/osiris.git)",
"rand 0.8.5",
"ratatui",
"redis 0.25.4",
@@ -3567,54 +3648,7 @@ dependencies = [
"sal-vault",
"sal-virt",
"sal-zinit-client",
"secp256k1",
"serde",
"serde_json",
"sha2",
"thiserror 1.0.69",
"tokio",
"toml",
"tracing",
"uuid",
]
[[package]]
name = "runner_rust"
version = "0.1.0"
source = "git+https://git.ourworld.tf/herocode/runner_rust.git#268128f7fd53e9586288efd95f9288595c4a74e9"
dependencies = [
"anyhow",
"async-trait",
"chrono",
"clap",
"crossterm",
"env_logger 0.10.2",
"hero_logger",
"heromodels",
"heromodels-derive",
"heromodels_core",
"hex",
"log",
"osiris",
"rand 0.8.5",
"ratatui",
"redis 0.25.4",
"rhai",
"rhailib_dsl",
"sal-git",
"sal-hetzner",
"sal-kubernetes",
"sal-mycelium",
"sal-net",
"sal-os",
"sal-postgresclient",
"sal-process",
"sal-redisclient",
"sal-text",
"sal-vault",
"sal-virt",
"sal-zinit-client",
"secp256k1",
"secp256k1 0.28.2",
"serde",
"serde_json",
"sha2",
@@ -4063,7 +4097,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10"
dependencies = [
"rand 0.8.5",
"secp256k1-sys",
"secp256k1-sys 0.9.2",
]
[[package]]
name = "secp256k1"
version = "0.29.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113"
dependencies = [
"rand 0.8.5",
"secp256k1-sys 0.10.1",
]
[[package]]
@@ -4075,6 +4119,15 @@ dependencies = [
"cc",
]
[[package]]
name = "secp256k1-sys"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9"
dependencies = [
"cc",
]
[[package]]
name = "secrecy"
version = "0.8.0"
@@ -4141,6 +4194,17 @@ dependencies = [
"serde",
]
[[package]]
name = "serde-wasm-bindgen"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b"
dependencies = [
"js-sys",
"serde",
"wasm-bindgen",
]
[[package]]
name = "serde_core"
version = "1.0.228"