Skip to content

Commit dec53d7

Browse files
docs(readme): convert README.adoc -> Markdown README.md (#54)
README must be real Markdown to render in GitHub community-health, the GitHub profile, and external MCP directories (Glama) — AsciiDoc shows as raw markup there. pandoc asciidoc->GFM, badges fixed to clickable, SPDX header kept as an HTML comment, duplicate README.adoc removed. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 6ec459b commit dec53d7

2 files changed

Lines changed: 200 additions & 179 deletions

File tree

README.adoc

Lines changed: 0 additions & 179 deletions
This file was deleted.

README.md

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
<!--
2+
SPDX-License-Identifier: CC-BY-SA-4.0
3+
SPDX-FileCopyrightText: 2025-2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
-->
5+
6+
Jonathan D.A. Jewell \<[j.d.a.jewell@open.ac](j.d.a.jewell@open.ac).uk\>
7+
8+
> [!TIP]
9+
> **AI-Assisted Install:** Just tell any AI assistant:\
10+
> `Set` `up` `game-server-admin` `from`
11+
> [`https://github.com/hyperpolymath/game-server-admin`](https://github.com/hyperpolymath/game-server-admin)\
12+
> The AI reads the manifest, asks you a few questions, and handles
13+
> everything.
14+
15+
# Overview
16+
17+
**Universal game server probe, configuration management, and
18+
administration** — built on Gossamer (linearly-typed webview shell) with
19+
VeriSimDB (8-modality database) underpinning.
20+
21+
GSA can attach to *any* game server, fingerprint it via protocol
22+
probing, extract its configuration into A2ML format, and provide a rich
23+
GUI for viewing, editing, and tracking config changes with full
24+
provenance.
25+
26+
**New in this version:** User-configurable server connections with
27+
support for default servers and favorites list. See
28+
<a href="#Configuration" class="cross-reference">Configuration</a> for
29+
details.
30+
31+
## Architecture
32+
33+
┌─────────────────────────────────────────────────┐
34+
│ Gossamer GUI (Ephapax + HTML/JS) │
35+
│ 8 panels, each a Clade citizen with inheritance │
36+
└────────────────────┬────────────────────────────┘
37+
│ IPC (gossamer:// bridge)
38+
┌────────────────────┴────────────────────────────┐
39+
│ Probe Engine (Ephapax + Zig FFI) │
40+
│ Protocol fingerprint → game profile → config │
41+
└────────────────────┬────────────────────────────┘
42+
│ REST (localhost:8090)
43+
┌────────────────────┴────────────────────────────┐
44+
│ VeriSimDB Instance (gsa-verisimdb) │
45+
│ 8 modalities per server, drift detection │
46+
└─────────────────────────────────────────────────┘
47+
48+
## Panels
49+
50+
| Panel | Kind | Description |
51+
|----|----|----|
52+
| Server Browser | inspector | Discover/fingerprint servers, add to management |
53+
| Config Editor | editor | A2ML-aware form generation with type validation |
54+
| Server Actions | terminal | Start/stop/restart with confirmation |
55+
| Live Logs | terminal | Real-time log streaming with ANSI color |
56+
| Health Dashboard | scanner | VeriSimDB drift detection and health gauges |
57+
| Config History | database | Temporal version timeline with diff viewer |
58+
| Cross-Server Search | database | VQL full-text + vector search across configs |
59+
60+
All panels are registered in the PanLL Clade system with full
61+
inheritance. The cladogram grows automatically as new game profiles are
62+
added.
63+
64+
## Supported Games (Initial)
65+
66+
Valheim, Barotrauma, Don’t Starve Together, Minecraft Java/Bedrock,
67+
Factorio, Terraria, ARK, Rust (game), CS2, Garry’s Mod, Project Zomboid,
68+
Starbound, DayZ, Void Expanse — plus IDApTIK and Burble.
69+
70+
# Quick Start
71+
72+
```bash
73+
# Start the VeriSimDB instance
74+
just verisimdb-up
75+
76+
# Build and run the CLI
77+
just run status # system status, VeriSimDB health, loaded profiles
78+
just run probe <host> [port] # fingerprint a game server (default port 27015)
79+
just run profiles # list all 18 supported game profiles
80+
81+
# Or build and launch the GUI
82+
just build && just gui
83+
```
84+
85+
## CLI Reference
86+
87+
The `gsa` binary is built automatically by `zig` `build` and lives at
88+
`src/interface/ffi/zig-out/bin/gsa`.
89+
90+
| Command | Description |
91+
|----|----|
92+
| `gsa` `status` | VeriSimDB health, build info, loaded game profiles |
93+
| `gsa` `probe` `<host>` `[port]` | Fingerprint a game server (Steam, Minecraft, RCON, HTTP, TCP banner) |
94+
| `gsa` `profiles` | JSON listing of all supported games with engine/port/config details |
95+
| `gsa` `version` | Print version string |
96+
| `gsa` `help` | Usage information |
97+
98+
Environment variables: `GSA_VERISIMDB_URL` (default
99+
[`http://localhost:8090`](http://localhost:8090)), `GSA_PROFILES_DIR`
100+
(default `./profiles`).
101+
102+
# Adding a Game Profile
103+
104+
Create a new `.a2ml` file in `profiles/`:
105+
106+
@game-profile(id="my-game", name="My Game", engine="custom"):
107+
@ports(query=27015, game=27016):@end
108+
@protocol(type="steam-query", version="a2s"):@end
109+
@config(format="json", path="/config/server.json"):
110+
@field(key="name", type="string", label="Server Name"):@end
111+
@end
112+
@clade(inherits="gsa-game", kind="game-profile"):@end
113+
@end
114+
115+
Then run `just` `generate-clades` — the cladogram updates automatically.
116+
117+
# ABI/FFI Standard
118+
119+
- **ABI (Idris2):** `src/interface/abi/` — formal type specs with
120+
dependent type proofs
121+
122+
- **FFI (Zig):** `src/interface/ffi/` — C-compatible implementation
123+
124+
- **Core (Ephapax):** `src/core/` — linear type enforcement for resource
125+
safety
126+
127+
# VeriSimDB Integration
128+
129+
Each managed server is a VeriSimDB octad with all 8 modalities:
130+
131+
- **Graph:** server→game-profile, server→cluster edges
132+
133+
- **Vector:** config embedding for similarity search
134+
135+
- **Tensor:** performance metrics over time
136+
137+
- **Semantic:** game type, version, mods, status
138+
139+
- **Document:** full config text (A2ML, full-text indexed)
140+
141+
- **Temporal:** every config version with timestamp
142+
143+
- **Provenance:** who changed what, when, why (hash-chain)
144+
145+
- **Spatial:** datacenter geolocation
146+
147+
Dedicated instance on port 8090 with persistent storage and 15s drift
148+
detection.
149+
150+
# Configuration
151+
152+
GSA now supports user-specific configuration through a Nickel (`.ncl`)
153+
configuration file. This allows you to:
154+
155+
- Set a default server IP and port
156+
157+
- Maintain a list of favorite servers
158+
159+
- Customize UI preferences
160+
161+
- Configure connection settings
162+
163+
## Initial Setup
164+
165+
To create a default configuration file:
166+
167+
```bash
168+
./gsa config init
169+
```
170+
171+
This creates `user-config.ncl` from the template.
172+
173+
## Configuration Commands
174+
175+
```bash
176+
# Show current configuration
177+
./gsa config show
178+
179+
# Set default server
180+
./gsa config set-default mc.example.com 25565
181+
182+
# Add a favorite server
183+
./gsa config add-favorite "My Minecraft" mc.example.com 25565
184+
185+
# List favorite servers
186+
./gsa config list-favorites
187+
```
188+
189+
## Configuration File
190+
191+
The configuration file (`user-config.ncl`) is **gitignored** to ensure
192+
your server credentials remain private. See `USER-CONFIG.md` for
193+
complete documentation.
194+
195+
# License
196+
197+
SPDX-License-Identifier: CC-BY-SA-4.0
198+
199+
Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
200+
\<[j.d.a.jewell@open.ac](j.d.a.jewell@open.ac).uk\>

0 commit comments

Comments
 (0)