Read-only kokpit operatora. Konsumuje Chaos WebMCP przez proxy (server/api/webmcp/*), nie ma własnego serwera MCP.
| Proces | Status | Uptime | Restarty |
|---|---|---|---|
| aion-admin | online | 1d | 0 |
inspiracja
nuxt.config.ts deklaruje zakres: 'Aion Admin Cockpit — centralny pulpit operatorski... Czyta dane z Directus + chaos API. Nie wykonuje operacji — warstwa WIDOK.' Autoryzacja OIDC skopiowana i dostosowana z create.aionflow.pl.
źródło: nuxt.config.ts, server/utils/oidc.ts
cel
Endpointy: overview.get.ts (liczniki projektów/klientów/ofert), business/pulse.get.ts (MRR, pipeline), system/health.get.ts (Directus+Chaos+/proc/meminfo), system/config.get.ts (skanuje .env we wszystkich projektach, maskuje sekrety), system/llm-costs.get.ts.
źródło: server/api/{overview,business/pulse,system/health,system/config,system/llm-costs}.get.ts
zależności
directus.ts jest jawnie oznaczony jako 'read-only, service token'. Panel czyta /var/www/shared/resource-governor.json oraz pliki .env z ok. 15+ sąsiednich projektów w celu wyświetlenia konfiguracji (z maskowaniem).
źródło: server/utils/directus.ts, server/api/system/config.get.ts
znaczenie
Jedyne miejsce dające pełny przegląd wszystkich projektów, jednocześnie agreguje odczyt sekretów (zamaskowanych, ale odsłanialnych przez ?reveal=1) ze wszystkich aplikacji — przejęcie sesji operatora tu oznacza ekspozycję poświadczeń całego /var/www.
źródło: server/api/system/config.get.ts
co działa
PM2 potwierdza status online (port 3026, restarts=21, unstable_restarts=0). server/middleware/auth.ts woła requireOperator(event) dla każdej trasy /api/* i strony poza /api/auth/*.
źródło: pm2 jlist (aion-admin), server/middleware/auth.ts
co nie działa
Log błędów pokazuje powtarzające się ENOENT dla plików .woff2 spod .builds/20260707-212154/server/chunks/public/_fonts/ — prawdopodobnie problem z krokiem kopiowania w deploy.sh.
źródło: aion-admin-error.log (live-verified)
Jedyny endpoint zapisu (server/api/system/governor.patch.ts) polega wyłącznie na globalnym middleware, bez własnego wywołania requireOperator() — sprzeczne z deklaracją 'Nie wykonuje operacji', choć obecnie middleware poprawnie to zabezpiecza.
źródło: server/api/system/governor.patch.ts
co do przetestowania
Nie ustalono czy 21 restartów wynika z deployów czy z limitu pamięci. .env.example podaje port :3022 dla CHAOS_API_URL, podczas gdy trzy pliki kodu domyślnie używają :3032.
źródło: ecosystem.config.cjs, .env.example
rekomendacja
Dodać requireOperator(event) bezpośrednio wewnątrz governor.patch.ts jako obronę w głębi. Naprawić błędy ENOENT dla fontów, prawdopodobnie w kroku kopiowania w deploy.sh.
źródło: analiza deploy.sh + logi błędów