Edytor Lua#
vCLU zawiera wbudowany edytor kodu dostępny przez przeglądarkę. Edytor pozwala przeglądać i modyfikować moduły Lua, zarządzać draftami stworzonymi przez agentów AI, promować je do produkcji i śledzić historię zmian.
Dostęp#
Edytor jest dostępny pod adresem:
http://<adres-vclu>:8080/editorWymaga zalogowania (hasło ustawione w kreatorze konfiguracji).
Interfejs#
┌─────────────────────────────────────────────────────────────────────┐
│ Lua Editor │
├──────────┬──────────────────────────────────────────────────────────┤
│ │ tabs: init.lua │ biuro_auto.lua │ History │
│ FILES ├──────────────────────────────────────────────────────────┤
│ │ modules > init.lua [Save] [Save All] [Reload] │
│ ▼ modules├──────────────────────────────────────────────────────────┤
│ init │ │
│ biuro │ Monaco Editor │
│ salon │ (podświetlanie składni Lua) │
│ ▼ drafts │ │
│ gate │ │
│ ▼ backups│ │
│ ▶ init 3├──────────────────────────────────────────────────────────┤
│ │ ▼ Output │ Lua Logs [x] [🗑] │
│ [+File] │ > Reload triggered... │
│ [+Folder]│ > [OK] Lua runtime reloaded │
│ [Search] │ │
├──────────┴──────────────────────────────────────────────────────────┤
│ Ready Lua │
└─────────────────────────────────────────────────────────────────────┘Panel plików (lewa strona)#
- Modules - pliki produkcyjne z katalogu
modules/ - Drafts - drafty z workspace (stworzone przez MCP lub ręcznie)
- Backups - kopie zapasowe plików produkcyjnych, pogrupowane po plikach
- Klik na plik otwiera go w edytorze
- Ikona kosza przy draftach - usunięcie draftu
- Ikona ołówka - zmiana nazwy pliku
- Przycisk Search - wyszukiwanie w treści plików (Ctrl+Shift+F)
Edytor (prawa strona)#
- Monaco Editor - ten sam silnik co VS Code, z podświetlaniem składni Lua
- Tabs - otwarte pliki jako zakładki, z oznaczeniem niezapisanych zmian
- Breadcrumbs - ścieżka do aktualnego pliku
- Save (Ctrl+S) - zapis bieżącego pliku
- Save All - zapis wszystkich zmodyfikowanych plików
- Reload - przeładowanie runtime Lua (bez restartu serwera)
Panel wyjścia (dolna belka)#
Panel wyjścia działa jak terminal w IDE - zawsze widoczny jako cienki pasek na dole. Kliknięcie rozwija go, pokazując dwie zakładki:
- Output - wyniki operacji (save, reload, promote)
- Lua Logs - logi runtime w czasie rzeczywistym
Panel można rozciągać w pionie (drag) i zwijać do paska.
Zarządzanie draftami#
Gdy agent AI stworzy draft przez MCP (vclu_draft_write), pojawia się on w sekcji Drafts w panelu plików. Edytor pozwala:
Podgląd draftu#
Kliknij draft w drzewie plików. Jeśli istnieje wersja produkcyjna tego pliku, edytor automatycznie otwiera widok diff - porównanie draftu z produkcją.
Promote (wdrożenie)#
Przycisk Promote pojawia się w toolbarze gdy otwarty jest draft. Promowanie:
- Tworzy backup istniejącego pliku produkcyjnego
- Zastępuje plik produkcyjny draftem
- Usuwa draft z workspace
- Automatycznie przeładowuje runtime Lua
Jest to ta sama operacja co vclu_draft_promote w MCP, ale wykonywana przez człowieka z poziomu przeglądarki.
Delete Draft#
Przycisk Delete Draft usuwa draft bez wdrażania - przydatne gdy AI napisał coś niepotrzebnego lub błędnego.
Historia (History)#
Tab History pokazuje chronologiczną historię operacji na draftach - kto co napisał, kiedy przetestował, kiedy wdrożył.
Otwieranie#
Kliknij przycisk History w toolbarze edytora. Otworzy się dedykowana zakładka z pełną historią.
Tryb Timeline#
Domyślny widok - chronologiczna lista zdarzeń, zgrupowana po datach:
── 4 mar 2026 ────────────────────────────
14:40 ✓ Promoted modules/init.lua human
14:36 ▶ Test OK modules/gate_lights.lua Claude
14:35 ✏ Draft modules/gate_lights.lua Claude
14:30 ✏ Draft modules/init.lua Claude
── 3 mar 2026 ────────────────────────────
18:00 ✓ Promoted modules/biuro_auto.lua human
17:55 ▶ Test OK modules/biuro_auto.lua CodexKażde zdarzenie pokazuje:
- Czas wykonania operacji
- Typ z ikoną (Draft, Test OK/fail, Valid/Invalid, Promoted, Deleted)
- Plik którego dotyczy operacja
- Aktor - nazwa bota AI lub “human” dla operacji z przeglądarki
- [View diff] przy promowaniu - otwiera porównanie backupu z aktualną wersją
Tryb Files#
Alternatywny widok - pipeline per plik, pokazujący etapy od draftu do produkcji:
modules/gate_lights.lua
✏ Draft (Claude, 14:35) → ▶ Test OK (14:36) → ✓ Promoted (human, 14:40)
modules/biuro_auto.lua
✏ Draft (Codex, 17:50) → ▶ Test fail (17:52) → ✏ Draft (Codex, 17:55) → ▶ Test OK (17:56)Pliki z aktywnymi draftami (jeszcze nie promowane) wyświetlane są na górze.
Filtry#
- Filtr plików - pokaż zdarzenia tylko dla wybranego pliku
- Filtr aktorów - pokaż zdarzenia tylko od wybranego bota/człowieka
Filtry działają po stronie klienta (bez dodatkowych zapytań do serwera).
View diff#
Przy zdarzeniach typu “Promoted” z backupem dostępny jest link [View diff]. Kliknięcie otwiera nową zakładkę diff w edytorze, pokazującą co dokładnie się zmieniło między backupem (poprzednia wersja) a aktualnym plikiem produkcyjnym.
Kopie zapasowe (Backups)#
Każda promocja draftu automatycznie tworzy kopię zapasową pliku produkcyjnego, który jest nadpisywany. Kopie zapasowe są widoczne i zarządzane bezpośrednio w edytorze.
Kiedy powstaje backup?#
Backup jest tworzony automatycznie w dwóch sytuacjach:
- Promocja przez MCP - agent AI wywołuje
vclu_draft_promote - Promocja z edytora - człowiek klika przycisk Promote
W obu przypadkach, zanim draft nadpisze plik produkcyjny, istniejąca wersja jest kopiowana do workspace/backups/.
Jeśli plik produkcyjny nie istnieje (pierwszy deployment), backup nie jest tworzony - nie ma czego kopiować.
Przeglądanie backupów#
W panelu plików (lewa strona edytora) na dole pojawia się sekcja Backups z liczbą dostępnych kopii. Backupy są pogrupowane po plikach:
▼ Backups (10)
▶ init.lua 3
▶ scenes/salon/movie.lua 1
▶ tasmota/biurko.lua 2Rozwinięcie grupy pokazuje poszczególne kopie z datą i rozmiarem:
▼ init.lua 3
04.03, 10:44:44 97 B
03.03, 09:15:05 67 B
02.03, 21:17:34 93 BPorównanie z produkcją (diff)#
Kliknięcie backupu otwiera widok diff w edytorze:
- Lewa strona (original) - treść backupu (poprzednia wersja)
- Prawa strona (modified) - aktualna wersja produkcyjna
Dzięki temu widać dokładnie co się zmieniło od momentu utworzenia backupu.
Przywracanie backupu#
Gdy backup jest otwarty w widoku diff, w toolbarze pojawia się przycisk Restore. Przywracanie:
- Nadpisuje plik produkcyjny zawartością backupu
- Automatycznie przeładowuje runtime Lua
- Zamyka zakładkę backupu
- Odświeża drzewo plików
Przywracanie nie tworzy dodatkowego backupu aktualnej wersji. Jeśli chcesz zachować obecny stan przed przywróceniem, najpierw skopiuj jego treść.
Automatyczny rollback (Watchdog)#
Po każdej promocji przez MCP uruchamiany jest watchdog - monitor, który przez 15 sekund obserwuje logi Lua. Jeśli wykryje więcej niż 3 nowe błędy w tym czasie, automatycznie:
- Przywraca wszystkie promowane pliki z backupów
- Przeładowuje runtime Lua
- Rejestruje incydent w dashboardzie
Watchdog chroni przed sytuacją, gdy AI wdroży kod z błędem runtime, który przeszedł testy sandbox.
Przechowywanie#
Backupy są przechowywane w katalogu workspace/backups/ z nazwą w formacie:
RRRRMMDD_HHMMSS_ścieżka_z_podkreśleniami.luaPrzykłady:
20260304_104444_modules_init.lua- backupmodules/init.luaz 4 marca, 10:4420260302_193000_modules_tasmota_biurko.lua- backupmodules/tasmota/biurko.lua
Backupy nie są automatycznie usuwane - gromadzą się z każdą promocją. Na Raspberry Pi z kartą SD warto od czasu do czasu usunąć stare kopie ręcznie (przez SSH lub system plików).
Persystencja historii#
Historia operacji jest zapisywana na dysku w formacie JSONL (JSON Lines):
workspace/audit.jsonl ← aktywny plik (append-only)
workspace/audit.1.jsonl ← poprzednia rotacja
workspace/audit.2.jsonl ← najstarsza rotacja- Każdy plik zawiera do 1000 wpisów (~200 KB)
- Łącznie do 3000 wpisów historii
- Rotacja automatyczna - gdy aktywny plik przekroczy limit, starsze pliki przesuwają się
- Historia przeżywa restart serwera
Starsze operacje sprzed włączenia persystencji mogą nie mieć pola “aktor”. Edytor traktuje je jako operacje bez przypisanego aktora.
Skróty klawiszowe#
| Skrót | Akcja |
|---|---|
| Ctrl+S | Zapisz bieżący plik |
| Ctrl+Shift+F | Szukaj w plikach |
Następny krok#
Zdalny system plików - alternatywna metoda edycji przez SSH/SFTP