Skip to content

Commit 9eff294

Browse files
hyperpolymathclaude
andcommitted
feat: Game Hub UI overhaul, FLI clade system, and Groove integration
Complete rewrite of the server browser into a Game Hub with: - Game discovery (Steam API + local profiles + manual add) - Setup wizard (configure → install → ready) - Server lifecycle cards (start/stop/restart/config/uninstall) - Managed server cards with glowing status dots and quick actions Enhanced config editor with: - Category tabs (General/Network/Gameplay/Admin-Cheats/Advanced) - Auto-categorisation via 90+ keywords for cheats, network, gameplay - Config-not-found path prompt with browse dialog - Range sliders for numeric fields, ON/OFF labels for bools - Save & Restart workflow FLI (Frontend-user Library Interface) clade system: - 5 FLI modules: gauge (SVG arcs/sparklines), editable (inline editing), terminal (ANSI parsing), tooltip (rich tooltips), undo (Ctrl+Z stack) - 6 FLI clade A2ML files + root clade - Provisioner follows Groove pattern: panels start bare, FLI modules layer on capabilities based on clade trait inheritance - All panels updated with FLI fallbacks (graceful degradation) Groove voice alerting integration: - GrooveClient.eph for Burble/Vext discovery and connection - Bridge handlers for groove discovery, alerts, TTS, drift alerts - Shell.eph bindings for new IPC commands Design system additions to host.html: - Game cards, server cards, context bar, wizard steps - Toast notifications, section dividers, path prompts - Animations (fadeIn, slideUp, pulse-glow) - Server context bar with quick navigation Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent b725d69 commit 9eff294

29 files changed

Lines changed: 5533 additions & 387 deletions

File tree

Justfile

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -972,7 +972,3 @@ maint-assault:
972972
assail:
973973
@command -v panic-attack >/dev/null 2>&1 && panic-attack assail . || echo "WARN: panic-attack not found — install from https://github.com/hyperpolymath/panic-attacker"
974974
975-
# [AUTO-GENERATED] Multi-arch / RISC-V target
976-
build-riscv:
977-
@echo "Building for RISC-V..."
978-
cross build --target riscv64gc-unknown-linux-gnu
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
4+
[clade-metadata]
5+
id = "fli-editable"
6+
name = "FLI Editable"
7+
short-name = "Editable"
8+
version = "1.0.0"
9+
kind = "fli-module"
10+
icon = "edit-3"
11+
description = "Inline editing capabilities with double-click-to-edit activation, keyboard navigation (Tab to next field, Enter to confirm, Escape to cancel), and dirty-state tracking. Emits change events for persistence layers."
12+
13+
[clade-traits]
14+
has-backend = false
15+
has-scanning = false
16+
has-persistence = false
17+
has-work-items = false
18+
has-real-time = false
19+
has-keyboard-nav = true
20+
has-inline-edit = true
21+
is-directive = false
22+
is-readonly = false
23+
is-ambient = false
24+
25+
[clade-capabilities]
26+
capabilities = []
27+
28+
[clade-protocols]
29+
protocols = []
30+
31+
[clade-taxonomy]
32+
inherits-from = "fli"
33+
sibling-clades = ["fli-gauge", "fli-terminal", "fli-tooltip", "fli-undo"]
34+
supersedes = ""
35+
36+
[fli-module]
37+
js-path = "src/gui/fli/fli-editable.js"
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
4+
[clade-metadata]
5+
id = "fli-gauge"
6+
name = "FLI Gauge"
7+
short-name = "Gauge"
8+
version = "1.0.0"
9+
kind = "fli-module"
10+
icon = "gauge"
11+
description = "SVG arc gauges, ring meters, and sparkline charts for real-time numeric visualisation. Provides configurable min/max ranges, colour thresholds, animation easing, and responsive scaling for dashboard panels."
12+
13+
[clade-traits]
14+
has-backend = false
15+
has-scanning = false
16+
has-persistence = false
17+
has-work-items = false
18+
has-real-time = true
19+
has-svg = true
20+
is-directive = false
21+
is-readonly = true
22+
is-ambient = false
23+
24+
[clade-capabilities]
25+
capabilities = []
26+
27+
[clade-protocols]
28+
protocols = []
29+
30+
[clade-taxonomy]
31+
inherits-from = "fli"
32+
sibling-clades = ["fli-editable", "fli-terminal", "fli-tooltip", "fli-undo"]
33+
supersedes = ""
34+
35+
[fli-module]
36+
js-path = "src/gui/fli/fli-gauge.js"
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
4+
[clade-metadata]
5+
id = "fli-terminal"
6+
name = "FLI Terminal"
7+
short-name = "Terminal"
8+
version = "1.0.0"
9+
kind = "fli-module"
10+
icon = "terminal"
11+
description = "ANSI escape sequence parsing and VTE-style rendering for terminal output display. Handles SGR colour codes, cursor movement, line clearing, and clickable URL detection with configurable link handlers."
12+
13+
[clade-traits]
14+
has-backend = false
15+
has-scanning = false
16+
has-persistence = false
17+
has-work-items = false
18+
has-real-time = false
19+
has-ansi-parse = true
20+
has-link-detect = true
21+
is-directive = false
22+
is-readonly = true
23+
is-ambient = false
24+
25+
[clade-capabilities]
26+
capabilities = []
27+
28+
[clade-protocols]
29+
protocols = []
30+
31+
[clade-taxonomy]
32+
inherits-from = "fli"
33+
sibling-clades = ["fli-gauge", "fli-editable", "fli-tooltip", "fli-undo"]
34+
supersedes = ""
35+
36+
[fli-module]
37+
js-path = "src/gui/fli/fli-terminal.js"
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
4+
[clade-metadata]
5+
id = "fli-tooltip"
6+
name = "FLI Tooltip"
7+
short-name = "Tooltip"
8+
version = "1.0.0"
9+
kind = "fli-module"
10+
icon = "message-square"
11+
description = "Rich contextual tooltips with automatic positioning (top/bottom/left/right), configurable show/hide delays, HTML content support, and viewport boundary detection. Supports both hover and focus triggers for accessibility."
12+
13+
[clade-traits]
14+
has-backend = false
15+
has-scanning = false
16+
has-persistence = false
17+
has-work-items = false
18+
has-real-time = false
19+
has-tooltip = true
20+
is-directive = false
21+
is-readonly = true
22+
is-ambient = false
23+
24+
[clade-capabilities]
25+
capabilities = []
26+
27+
[clade-protocols]
28+
protocols = []
29+
30+
[clade-taxonomy]
31+
inherits-from = "fli"
32+
sibling-clades = ["fli-gauge", "fli-editable", "fli-terminal", "fli-undo"]
33+
supersedes = ""
34+
35+
[fli-module]
36+
js-path = "src/gui/fli/fli-tooltip.js"

panel-clades/fli-undo/FliUndo.a2ml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
4+
[clade-metadata]
5+
id = "fli-undo"
6+
name = "FLI Undo"
7+
short-name = "Undo"
8+
version = "1.0.0"
9+
kind = "fli-module"
10+
icon = "rotate-ccw"
11+
description = "Undo/redo command stack with Ctrl+Z (undo) and Ctrl+Shift+Z (redo) keyboard bindings. Implements the command pattern with configurable stack depth, command coalescing for rapid edits, and serialisable history for persistence."
12+
13+
[clade-traits]
14+
has-backend = false
15+
has-scanning = false
16+
has-persistence = false
17+
has-work-items = false
18+
has-real-time = false
19+
has-undo = true
20+
has-keyboard-shortcut = true
21+
is-directive = false
22+
is-readonly = false
23+
is-ambient = false
24+
25+
[clade-capabilities]
26+
capabilities = []
27+
28+
[clade-protocols]
29+
protocols = []
30+
31+
[clade-taxonomy]
32+
inherits-from = "fli"
33+
sibling-clades = ["fli-gauge", "fli-editable", "fli-terminal", "fli-tooltip"]
34+
supersedes = ""
35+
36+
[fli-module]
37+
js-path = "src/gui/fli/fli-undo.js"

panel-clades/fli/Fli.a2ml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
4+
[clade-metadata]
5+
id = "fli"
6+
name = "FLI Root"
7+
short-name = "FLI"
8+
version = "1.0.0"
9+
kind = "fli-root"
10+
icon = "layers"
11+
description = "Frontend-user Library Interface (FLI) root clade. FLI is the capability inheritance system for GSA panels — each FLI module declares a reusable frontend feature (gauges, editing, terminal rendering, tooltips, undo) that panels can inherit to gain standardised UI behaviours without reimplementation."
12+
13+
[clade-traits]
14+
has-backend = false
15+
has-scanning = false
16+
has-persistence = false
17+
has-work-items = false
18+
has-real-time = false
19+
is-directive = false
20+
is-readonly = true
21+
is-ambient = true
22+
23+
[clade-capabilities]
24+
capabilities = []
25+
26+
[clade-protocols]
27+
protocols = []
28+
29+
[clade-taxonomy]
30+
inherits-from = ""
31+
sibling-clades = []
32+
supersedes = ""
33+
child-clades = ["fli-gauge", "fli-editable", "fli-terminal", "fli-tooltip", "fli-undo"]
34+
35+
[fli-module]
36+
js-path = "src/gui/fli/fli.js"

panel-clades/gsa-actions/GsaActions.a2ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ inherits-from = "gsa"
3131
sibling-clades = ["gsa-browser", "gsa-logs"]
3232
supersedes = ""
3333

34+
[clade-fli]
35+
fli-inherits = ["fli-terminal"]
36+
3437
[clade-panel-integration]
3538
panel-id = "PanelGsaServerActions"
3639
model-module = "GsaActionsModel"

panel-clades/gsa-browser/GsaBrowser.a2ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ inherits-from = "gsa"
3131
sibling-clades = ["gsa-config", "gsa-actions"]
3232
supersedes = ""
3333

34+
[clade-fli]
35+
fli-inherits = ["fli-tooltip"]
36+
3437
[clade-panel-integration]
3538
panel-id = "PanelGsaServerBrowser"
3639
model-module = "GsaBrowserModel"

panel-clades/gsa-config/GsaConfig.a2ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ inherits-from = "gsa"
3131
sibling-clades = ["gsa-browser", "gsa-history"]
3232
supersedes = ""
3333

34+
[clade-fli]
35+
fli-inherits = ["fli-editable", "fli-tooltip", "fli-undo"]
36+
3437
[clade-panel-integration]
3538
panel-id = "PanelGsaConfigEditor"
3639
model-module = "GsaConfigModel"

0 commit comments

Comments
 (0)