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

View File

@@ -1833,10 +1833,12 @@ dependencies = [
"chrono",
"clap",
"env_logger 0.10.2",
"hyper 1.7.0",
"hyper-util",
"jsonrpsee",
"log",
"redis 0.25.4",
"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",
@@ -1856,13 +1858,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 0.6.5",
"serde_json",
"sha2",
"thiserror 1.0.69",
"tokio",
"uuid",
@@ -3149,6 +3155,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"
@@ -3157,7 +3183,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",
@@ -3169,6 +3195,15 @@ dependencies = [
"uuid",
]
[[package]]
name = "osiris_derive"
version = "0.1.0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.106",
]
[[package]]
name = "osiris_derive"
version = "0.1.0"
@@ -4095,6 +4130,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"
@@ -4112,7 +4193,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",
@@ -4131,54 +4212,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",
@@ -4633,7 +4667,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]]
@@ -4645,6 +4689,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"
@@ -5065,11 +5118,13 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
name = "supervisor-admin-ui"
version = "0.1.0"
dependencies = [
"chrono",
"gloo 0.11.0",
"hero-supervisor-openrpc-client",
"js-sys",
"log",
"serde",
"serde-wasm-bindgen 0.6.5",
"serde_json",
"uuid",
"wasm-bindgen",