feat (ui): exec fase 2

This commit is contained in:
kodi
2026-03-06 17:25:11 +01:00
parent 92e0e04905
commit 39a33e5711
4 changed files with 529 additions and 21 deletions
+143
View File
@@ -0,0 +1,143 @@
Chat export (zichtbare user-assistant conversatie)
Datum: 2026-03-04
User:
Onderzoek de mogelikhein om in het container overzicht in het three-dot menu naast elke container(dus niet pod) De podman exec -it functionaliteit toe te voegen. Je hebt mijn toestemming om zelf curls op http://host.containers.internal:8081 uit te voeren met escalated execution
Assistant:
Ik ga eerst de huidige backend- en WebUI-implementatie van het container-overzicht en het three-dot menu in kaart brengen, daarna test ik met curl welke API-capaciteiten al beschikbaar zijn voor exec zodat ik een minimale, backward-compatible aanpak kan voorstellen.
Assistant (samenvatting):
- Relevante code gevonden in control/app_containers.py en webui/html/assets/js/tabs/containers.js.
- OpenAPI en live endpoints gecontroleerd via curl.
- Bevestigd dat er nog geen exec-endpoint bestond.
User:
Ik wil eerst backend-sessie + curl-werkend, doen nog helemaal niets aan de ui. Maak een kort implementatie plan en toen welke bestande je gaat aanpassen. Nog geen apply, nog niet doorvoeren
Assistant:
Korte plan + bestanden:
1. Scope backend-only.
2. Nieuwe endpoints voor exec start/stream/input/resize/stop.
3. In-memory sessiemanager.
4. Foutafhandeling/guardrails.
5. Curl-validatie.
Bestanden: control/app_containers.py (primair), control/common.py (alleen indien nodig), control/app.py (liefst niet).
User:
Doe nog een keer goed odnerzoek of het wel haalbaar is want "podman auto-update --dry-run" werkt bijvoorbeeld niet in de api container
Assistant (samenvatting onderzoek):
- podman CLI ontbreekt in backend image/runtime (command not found).
- Backend kan wel met Podman REST via socket praten (health/test-hybrid/containers endpoints).
- Conclusie: CLI-route niet haalbaar zonder imagewijziging; REST-gebaseerde exec-sessie wel haalbaar.
User:
Nog geen akkoord, vertel eerst wat je gaat doen met de REST-gebaseerde exec-sessie (backend + curl)
Assistant:
Plan REST-gebaseerd:
1. In-memory sessies.
2. POST /containers/{name}/exec/start.
3. GET /containers/exec/{session_id}/stream (SSE), POST input, POST resize.
4. POST stop.
5. Strikte validatie + backward compatibility.
6. Curl tests.
User:
Doe eerst de validatie nog geen implementatie akkoord
Assistant (samenvatting validatie):
- Socketpad en runtime bevestigd via inspect.
- Directe host-socket test vanuit agent-namespace beperkt.
- Conclusie bleef: REST-route haalbaar, maar laatste 100%-check via host-curl gewenst.
User:
"Als je wilt, doe ik nu alleen die laatste read-only socket-validatie (nog steeds zonder implementatie)." Ja
Assistant:
Read-only socket-curl set gegeven voor host:
- _ping/version/info
- containers list
- exec create
- exec inspect
- exec resize
(optioneel exec start)
User (host outputs):
- Exec create gaf Id.
- Exec inspect werkte.
- Resize vóór start gaf expected 500 state improper.
- Exec start gaf 200 raw-stream.
Assistant:
Conclusie: haalbaarheid bevestigd. Start->resize volgorde belangrijk. Klaar voor implementatie.
User:
akkoord
Assistant (implementatie):
- Backend-only exec sessie toegevoegd in control/app_containers.py.
- Nieuwe endpoints:
- POST /containers/{name}/exec/start
- GET /containers/exec/{session_id}
- GET /containers/exec/{session_id}/stream
- POST /containers/exec/{session_id}/input
- POST /containers/exec/{session_id}/resize
- POST /containers/exec/{session_id}/stop
- Compile checks OK.
- Op actieve runtime eerst 404 tot backend redeploy (verwacht).
User:
ja
Assistant:
Deploy/run stappen gegeven (build image, restart backend container, curl tests).
User (testresultaten):
- OpenAPI toont nieuwe exec routes.
- start/stream/input/resize/stop werken.
- Ping bleef doorlopen in terminal 1.
Assistant:
Uitleg: twee verschillende session_ids gebruikt; stop de juiste sessie vanuit andere terminal.
User:
Kan niet in terminal 1 want ik kan niets invoeren, ping zit in soort loop
Assistant:
Gebruik andere terminal of Ctrl+C in stream-terminal.
User:
Ja curl .../stop werkt in een andere terminal :)
Assistant:
Bevestigd. Volgende stap: UI (1 menu-item, 2 modal terminal, 3 resize).
User:
Als 1, 2 en drie klaar zijn kan ik dan in een terminal windows vanuit de webui? (nog niets implementeren)
Assistant:
Ja, met 1/2/3 heb je functionele interactieve web-terminal (basis), met optionele latere polish.
User:
Aplly 1, 2 en 3
Assistant (UI implementatie):
- Exec shell toegevoegd aan container three-dot menu (niet pod).
- Terminal modal toegevoegd in index.html.
- Frontend logic toegevoegd in containers.js:
- session start
- SSE stream
- input verzenden
- stop bij modal sluiten
- resize via ResizeObserver
- CSS styling toegevoegd in app.css.
- JS syntax check OK.
User:
Kun je deze gehel chat in en text bestand zetten, zodat ik deze kan bewaren?
Assistant:
Ik zet een export in een tekstbestand.