| 2026-10-04 |
feat: страница «MCP-ключи» — выдача и ревок персональных токенов
...
- /mcp-keys в навигации (ph-key): свои ключи + (для админ-роли) ключи всех
пользователей; plaintext показывается один раз в модальном окне с копированием
- сниппет подключения Claude Code с подстановкой origin панели
- i18n en/ru/uk (mcpKeys.*, nav.mcpKeys); auth-off — инфо-карточка без вызова API
- GnCard растянут на всю ширину (max-width:none — дефолт у кита fit-content)
Eugene Sukhodolskiy
committed
3 hours ago
|
feat: health-чекер сервисов — раздел «Сервисы» + спека health-эндпоинтов
...
Панель опрашивает health-URL внешних gnexus-сервисов (GET, параллельно,
каждые GHARD_HEALTH_INTERVAL=30с, таймаут 5с) и показывает их состояние
отдельным разделом: карточки с состоянием/latency/причиной, история
отклика за 24ч (график), retention точек 7 дней.
Прогрессивный минимум интерпретации: 2xx = up; JSON-тело со строковым
status — ok-набор → up, degraded-набор → деградация, незнакомая строка
→ вниз; не-2xx / таймаут / сеть → вниз. Контракт зафиксирован в
docs/health-endpoint-spec.md (минимум + рекомендуемое расширение checks).
- backend: tables services/service_samples, services_probe.py (волны
проб через asyncio.gather, cap тела 64KB), api/services.py (CRUD +
samples, мгновенный замер на POST/PATCH url), config GHARD_HEALTH_*
- frontend: страница /services, api-методы, nav «Сервисы»,
i18n en/uk/ru
Eugene Sukhodolskiy
committed
9 hours ago
|

feat: settings section + i18n (en/uk/ru) for the whole UI
...
Language comes from the gnexus-auth account profile by default; Settings
now hosts a per-service override that survives logouts and profile-webhook
syncs (users table keeps profile JSON verbatim, override in a separate
column that the upsert never touches). Open mode stores the choice in
localStorage.
- backend: users table (zero-migration, IF NOT EXISTS), app/locales.py
(normalize_locale/effective_locale), users upsert on session create and
user.updated webhook, GET /me returns locale + locale_effective,
new PATCH /api/v1/me (cookie-session only; 'auto'/'""' clears override)
- frontend: hand-rolled i18n mirror of gnexus-creds (locale ref, t() with
Slavic plurals, EN fallback), full dictionaries (~130 strings), <html
lang> + <title> tracked via watch; SettingsPage with language picker
(Auto/en/uk/ru); ServerCard/ServerPage/StoragePage status triple and
table columns unified into reactive computed t() lookups; fmtAgo/
fmtUptime localized; nav/login/shell translated; default html lang en
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
10 hours ago
|
fix: drawer nav highlight froze on the first route
...
GnNavList captures $route as a one-shot snapshot in setup; vue-router 4
replaces the route object on navigation, so the kit's isRouteActive kept
the stale path and Dashboard stayed highlighted everywhere. Compute the
active flag ourselves from a reactive useRoute() and let the kit render
from item.active; links still SPA-navigate via onSelect + router.push.
Dev proxy retargeted to the demo (8022).
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
11 hours ago
|
feat: close the panel behind gnexus-auth (OAuth PKCE)
...
Auth off by default (client_id empty). When GHARD_AUTH_CLIENT_ID is set,
the web UI gets a creds-style sign-in gate: splash -> /me -> login screen
(OAuth starts from the click, not page load). Sessions and OAuth state
live in SQLite (survive restarts); webhook endpoint applies global_logout/
profile updates. Scripts/MCP keep working with the Bearer token, agents
keep X-Server-Key ingest. Includes compose env passthrough, README guide.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
12 hours ago
|
feat: upgrade to gnexus-ui-kit 1.0, adopt Verdant color theme
...
Kit 0.4.0 → 1.0.0 (git dep pinned to master): rounded panels, softer
accents, tabs as segment switcher, page-header scan animation removed
by the kit itself. Custom overrides dropped where the kit now handles
them (48px topbar brand).
Theme: kit-verdant.css import (exports map only whitelists kit.css in
1.0 — theme file resolved through a vite alias until the kit ships
theme exports). Chart palette rebuilt for Verdant and re-validated
(L 0.48–0.67, chroma, CVD, contrast on #1E2522). Logo/favicon
recolored to the Verdant hues. allow-git=git.gnexus.space in .npmrc
for npm 12 git dependencies.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
13 hours ago
|
| 2026-09-11 |
feat: network storage section — panel probes mounted shares itself
...
Backend: shares + share_samples tables, background probe loop
(os.statvfs every GHARD_SHARE_INTERVAL, 7-day retention, ok=0 when
the mount is unreachable), CRUD + samples API, instant first sample
on create/update, shares in MCP panel_overview.
Frontend: /storage page — share cards with status badge/progress/
used-free-total, 24h fill chart, add/delete via modal + confirm.
ChartLine shows a visible point while there are fewer than 3 samples.
README: CIFS/NFS mount + fstab examples, GHARD_SHARE_INTERVAL row.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
23 days ago
|
| 2026-09-10 |
feat: English UI, no-login API, logo/favicon, layout fixes
...
- UI fully translated to English (dashboard, server page, toasts, formatters)
- login removed: GHARD_ADMIN_TOKEN is optional now (unset = open API);
agent key auth untouched; README/.env.example updated
- SVG logo + favicon (monitor with pulse, kit-style)
- reactivity: dashboard poll 5s, server 5s, history 10s
- layout: metric cards full-row flex, metric value nowrap,
info/note 50/50 grid, topbar logo 48x48, server card max-width 420px,
uptime on its own line, delete confirmed via GnConfirmDialog
- docker: ca-certificates for npm git dependency
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
24 days ago
|
feat: stage 3 — Vue web UI (dashboard, server page, charts) + docker build
...
Frontend (Vue 3 + Vite, gnexus-ui-kit, chart.js):
- login by admin token (localStorage, Bearer)
- dashboard: server cards with status, CPU/RAM/disk progress, net MB/s, note
- server page: metric cards, info (hostname/os/kernel/ips), editable note,
history charts (1ч/6ч/24ч/7д), tabs: overview/disks/net/processes/docker
- create-server flow with one-time key display + install command
Backend: serve built SPA from panel/backend/static (assets mount + fallback)
Docker: multi-stage build (node:22 → npm ci/build → static into python image),
build context moved to repo root, .dockerignore added
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
24 days ago
|