Die feste Session "web-main" gehoerte dem ersten Nutzer (lokal: anonymous) -> SSO-Nutzer bekam "Session gehoert einem anderen Nutzer" (403). Die Web-UI leitet die Session jetzt aus /api/me ab (web-<user_id>); ensureSession() wartet vor dem ersten Turn auf /api/me. Asset-Version v4. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
36 lines
1.1 KiB
HTML
36 lines
1.1 KiB
HTML
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>Voice Assistant</title>
|
|
<link rel="stylesheet" href="/style.css?v=4" />
|
|
</head>
|
|
<body>
|
|
<div id="layout">
|
|
<aside id="menu">
|
|
<h2>Voice Assistant</h2>
|
|
<div id="identity" class="muted">lade …</div>
|
|
<div id="admin" class="hidden">
|
|
<h3>Admin</h3>
|
|
<button id="reload-users">Nutzer laden</button>
|
|
<ul id="user-list"></ul>
|
|
<a href="/api/metrics" target="_blank" rel="noopener">Metriken</a>
|
|
</div>
|
|
<a id="logout" class="hidden" href="#">Abmelden</a>
|
|
</aside>
|
|
|
|
<main id="chat">
|
|
<div id="messages"></div>
|
|
|
|
<form id="prompt-form">
|
|
<button type="button" id="mic" title="Mikrofon" aria-label="Mikrofon">🎤</button>
|
|
<input id="prompt" type="text" placeholder="Nachricht eingeben …" autocomplete="off" />
|
|
<button type="submit" id="send">Senden</button>
|
|
</form>
|
|
<div id="status" class="muted"></div>
|
|
</main>
|
|
</div>
|
|
<script src="/app.js?v=4"></script>
|
|
</body>
|
|
</html>
|