From 919f78a5179cc73ec908571bdde66f3395afe74d Mon Sep 17 00:00:00 2001 From: team 1 Date: Mon, 11 May 2026 11:18:36 +0200 Subject: [PATCH] add chat as own route --- DELETE_PUBLIC_INDEX_HTML.txt | 7 + ...ATCH_87_CHAT_FRONTEND_CONTROLLER_README.md | 82 ++++++ ...87-chat-frontend-controller-patch-only.zip | Bin 0 -> 9634 bytes ...progress-p87-chat-frontend-controller.diff | 249 ++++++++++++++++++ src/Controller/Admin/DashboardController.php | 3 +- src/Controller/Chat/ChatController.php | 26 ++ templates/chat/index.html.twig | 55 ++++ 7 files changed, 420 insertions(+), 2 deletions(-) create mode 100644 DELETE_PUBLIC_INDEX_HTML.txt create mode 100644 patch_history/RETRIEX_PATCH_87_CHAT_FRONTEND_CONTROLLER_README.md create mode 100644 rag-inprogress-p87-chat-frontend-controller-patch-only.zip create mode 100644 rag-inprogress-p87-chat-frontend-controller.diff create mode 100644 src/Controller/Chat/ChatController.php create mode 100644 templates/chat/index.html.twig diff --git a/DELETE_PUBLIC_INDEX_HTML.txt b/DELETE_PUBLIC_INDEX_HTML.txt new file mode 100644 index 0000000..672c030 --- /dev/null +++ b/DELETE_PUBLIC_INDEX_HTML.txt @@ -0,0 +1,7 @@ +This patch intentionally removes public/index.html. + +Reason: +If public/index.html remains in the document root, many web servers serve it before public/index.php and the Symfony route / will not reach App\Controller\Chat\ChatController. + +When applying this patch manually, delete: +public/index.html diff --git a/patch_history/RETRIEX_PATCH_87_CHAT_FRONTEND_CONTROLLER_README.md b/patch_history/RETRIEX_PATCH_87_CHAT_FRONTEND_CONTROLLER_README.md new file mode 100644 index 0000000..b8dd40b --- /dev/null +++ b/patch_history/RETRIEX_PATCH_87_CHAT_FRONTEND_CONTROLLER_README.md @@ -0,0 +1,82 @@ +# RetrieX Patch p87 - Chat Frontend Symfony Controller + +## Zweck + +Der Chat lief bisher als statische `public/index.html`. Dadurch konnte die Startseite den Symfony-Kernel umgehen und war fuer spaetere PHP-seitige Erweiterungen wie Rollen-/Rechtepruefung, Mandantenlogik oder dynamische Chat-Optionen ungeeignet. + +p87 hebt nur den Chat-Frontend-Einstieg in einen eigenen Symfony-Controller und trennt ihn architektonisch vom Adminbereich. Es gibt keine Aenderungen an Agent, Retrieval, Scoring, Ranking, Shop-Matching, SSE, History oder Frontend-JavaScript-Logik. + +## Aenderungen + +- Neuer Controller: `src/Controller/Chat/ChatController.php` + - Namespace bewusst getrennt von `App\Controller\Admin` + - Route `/` als Chat-Startseite + - Route `/chat` als expliziter Chat-Alias + - rendert `templates/chat/index.html.twig` +- Neues Twig-Template: `templates/chat/index.html.twig` + - Inhalt aus der bisherigen `public/index.html` uebernommen + - Asset-Pfade ueber `asset()` gerendert + - Chat-UI bleibt optisch und funktional gleich +- `public/index.html` entfernt + - wichtig, damit der Webserver die Root-Anfrage nicht weiter statisch vor Symfony abfaengt +- `src/Controller/Admin/DashboardController.php` angepasst + - Root-Routen `''` und `/` entfernt + - Admin-Redirect bleibt nur unter `/admin` und `/admin/` + +## Architekturentscheidung + +Chat und Admin bleiben getrennt: + +- Chat: `App\Controller\Chat\...`, `templates/chat/...`, oeffentliche Route `/` bzw. `/chat` +- Admin: `App\Controller\Admin\...`, `templates/admin/...`, geschuetzte Route `/admin...` + +Damit kann Schritt 2 spaeter sauber aufsetzen, z. B. mit einem eigenen Chat-Firewall-/Access-Control-Bereich oder Controller-Attributen wie `#[IsGranted(...)]`, ohne Admin-Templates, Admin-Routen oder Admin-Navigation mit dem Chat zu vermischen. + +## Bewusst nicht geaendert + +- Keine Rollen-/Rechtepflicht fuer den Chat in diesem Patch +- Keine Aenderung an `security.yaml`, ausser dass die bestehende Trennung weiterhin moeglich bleibt +- Keine Aenderung an `/ask-jobs`, `/ask-sse`, `/history`, `/chat-messages/frontend` +- Keine Aenderung an `public/assets/js/base.js` +- Keine Aenderung an RAG-/Commerce-/Prompt-/YAML-Logik + +## Lokale Checks + +Ausgefuehrt: + +```bash +php -l src/Controller/Chat/ChatController.php +php -l src/Controller/Admin/DashboardController.php +python3 - <<'PY' +from pathlib import Path +assert Path('templates/chat/index.html.twig').exists() +assert not Path('public/index.html').exists() +assert "#[Route('/', name: 'chat_index'" in Path('src/Controller/Chat/ChatController.php').read_text() +print('p87 structural checks OK') +PY +``` + +Ergebnis: + +- PHP lint OK +- Chat-Template vorhanden +- statische `public/index.html` entfernt +- Root-Route liegt jetzt beim ChatController + +## Noch in Zielumgebung ausfuehren + +```bash +php bin/console cache:clear +php bin/console debug:router | grep -E 'chat_index|admin_dashboard' +php bin/console mto:agent:config:validate +php bin/console mto:agent:regression:test +php bin/console mto:agent:config:audit-source --details +php bin/console mto:agent:config:audit-patterns --details +``` + +Manuelle Smoke-Tests: + +1. `/` oeffnet den Chat. +2. `/chat` oeffnet denselben Chat. +3. `/admin` leitet weiterhin zum Admin-Dashboard/Login. +4. `/ask-jobs`, `/ask-sse/{jobId}`, `/history`, `/history/delete`, `/chat-messages/frontend` funktionieren unveraendert. diff --git a/rag-inprogress-p87-chat-frontend-controller-patch-only.zip b/rag-inprogress-p87-chat-frontend-controller-patch-only.zip new file mode 100644 index 0000000000000000000000000000000000000000..23c93750c7fee7638fc353c41237f32cf508eea4 GIT binary patch literal 9634 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 +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-
+-
+- +-
+- +-
+- +-
+-
+-
+- +-
+- +- +-
+-
+-
+- +-
+- +-
+- +-
+- +- +- +-
+-
+-
+- +- +- +diff -ruN '--exclude=var/cache' rag_work_chat_orig/src/Controller/Admin/DashboardController.php rag_work_chat_patch/src/Controller/Admin/DashboardController.php +--- rag_work_chat_orig/src/Controller/Admin/DashboardController.php 2026-04-24 07:36:06.000000000 +0000 ++++ rag_work_chat_patch/src/Controller/Admin/DashboardController.php 2026-05-11 09:12:22.931937348 +0000 +@@ -15,9 +15,8 @@ + + final class DashboardController extends AbstractController + { +- #[Route('', name: 'admin_dashboard_null')] +- #[Route('/', name: 'admin_dashboard_trail')] + #[Route('/admin', name: 'admin_dashboard_alias')] ++ #[Route('/admin/', name: 'admin_dashboard_trail')] + public function redirectToDashboard(): RedirectResponse + { + return $this->redirectToRoute('admin_dashboard'); +diff -ruN '--exclude=var/cache' rag_work_chat_orig/src/Controller/Chat/ChatController.php rag_work_chat_patch/src/Controller/Chat/ChatController.php +--- rag_work_chat_orig/src/Controller/Chat/ChatController.php 1970-01-01 00:00:00.000000000 +0000 ++++ rag_work_chat_patch/src/Controller/Chat/ChatController.php 2026-05-11 09:12:20.808732910 +0000 +@@ -0,0 +1,26 @@ ++render('chat/index.html.twig'); ++ } ++} +diff -ruN '--exclude=var/cache' rag_work_chat_orig/templates/chat/index.html.twig rag_work_chat_patch/templates/chat/index.html.twig +--- rag_work_chat_orig/templates/chat/index.html.twig 1970-01-01 00:00:00.000000000 +0000 ++++ rag_work_chat_patch/templates/chat/index.html.twig 2026-05-11 09:12:20.822443841 +0000 +@@ -0,0 +1,55 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
++
++ ++
++ ++
++ ++
++
++
++ ++
++ ++ ++
++
++
++ ++
++ ++
++ ++
++ ++ ++ ++
++
++
++ ++ ++ diff --git a/src/Controller/Admin/DashboardController.php b/src/Controller/Admin/DashboardController.php index 7a18355..188e7b2 100644 --- a/src/Controller/Admin/DashboardController.php +++ b/src/Controller/Admin/DashboardController.php @@ -15,9 +15,8 @@ use Symfony\Component\Routing\Attribute\Route; final class DashboardController extends AbstractController { - #[Route('', name: 'admin_dashboard_null')] - #[Route('/', name: 'admin_dashboard_trail')] #[Route('/admin', name: 'admin_dashboard_alias')] + #[Route('/admin/', name: 'admin_dashboard_trail')] public function redirectToDashboard(): RedirectResponse { return $this->redirectToRoute('admin_dashboard'); diff --git a/src/Controller/Chat/ChatController.php b/src/Controller/Chat/ChatController.php new file mode 100644 index 0000000..678c1b7 --- /dev/null +++ b/src/Controller/Chat/ChatController.php @@ -0,0 +1,26 @@ +render('chat/index.html.twig'); + } +} diff --git a/templates/chat/index.html.twig b/templates/chat/index.html.twig new file mode 100644 index 0000000..289d780 --- /dev/null +++ b/templates/chat/index.html.twig @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+ +
+ + + +
+
+
+ + +