feat(diagnostic): "+ Projekt" direkt ueber dem Chat

Im Kontext-Streifen gab es keinen Weg, ein Projekt anzulegen — das ging nur
unten in den Einstellungen. Der Knopf steht bewusst AUSSERHALB des scrollenden
Streifens: bei mehreren Projekten waere er dort nach rechts rausgerutscht.

Anlegen zieht jetzt beide Projekt-Oberflaechen nach (Einstellungs-Liste UND
Streifen) und setzt den Fokus aufs neue Projekt. Vorher aktualisierte nur die
Liste, das neue Projekt blieb im Streifen bis zum 15s-Poll unsichtbar — und der
Fokus blieb im Hauptchat, obwohl create_project() serverseitig umschaltet. Man
legte also ein Projekt an und schrieb weiter in den Hauptchat.

Dazu ein Fehlerpfad: ein fehlgeschlagenes Anlegen (z.B. leerer Name, 400 vom
Brain) wurde stillschweigend verschluckt — das Modal schloss, als waere alles
gut. Jetzt kommt die Begruendung des Brains als Meldung.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 10:16:01 +02:00
co-authored by Claude Opus 5
parent 58d60adbaf
commit d53dd83df4
+27 -4
View File
@@ -410,9 +410,16 @@
</div>
<!-- Multi-Threading: Kontext-Strip ueber dem Chat. Jeder Kontext
(Hauptchat + aktive Projekte) als kompakte Karte mit Status-Dot.
Tap wechselt den Focus — Chat-Box filtert dann auf diesen Kontext. -->
<div id="chat-context-strip" style="display:flex;gap:6px;overflow-x:auto;padding:6px 4px;margin-bottom:6px;border-bottom:1px solid #1E1E2E;">
<!-- wird von renderContextStrip() befuellt -->
Tap wechselt den Focus — Chat-Box filtert dann auf diesen Kontext.
Der „+ Projekt"-Knopf steht AUSSERHALB des scrollenden Streifens,
damit er bei vielen Projekten nicht nach rechts rausrutscht. -->
<div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;border-bottom:1px solid #1E1E2E;">
<div id="chat-context-strip" style="display:flex;gap:6px;overflow-x:auto;padding:6px 4px;flex:1;min-width:0;">
<!-- wird von renderContextStrip() befuellt -->
</div>
<button class="btn secondary" onclick="openCreateProjectModal()"
title="Neues Projekt anlegen — wird direkt angelegt, aktiviert und hier fokussiert"
style="flex:0 0 auto;padding:4px 10px;font-size:11px;margin-right:4px;">+ Projekt</button>
</div>
<div class="chat-box" id="chat-box"></div>
<div id="thinking-indicator" style="display:none;padding:6px 10px;font-size:12px;color:#FFD60A;background:#1E1E2E;border-radius:0 0 6px 6px;margin-top:-8px;margin-bottom:8px;align-items:center;justify-content:space-between;">
@@ -3997,13 +4004,29 @@
const description = document.getElementById('project-create-desc').value.trim();
if (!name) { alert('Name darf nicht leer sein.'); return; }
try {
await fetch('/api/brain/projects/create', {
const r = await fetch('/api/brain/projects/create', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name, description }),
});
if (!r.ok) {
let why = 'HTTP ' + r.status;
try { const e = await r.json(); if (e && e.detail) why = e.detail; } catch {}
throw new Error(why);
}
const d = await r.json().catch(() => null);
closeCreateProjectModal();
// Beide Projekt-Oberflaechen nachziehen: die Liste in den Einstellungen
// UND den Kontext-Streifen ueber dem Chat. Vorher wurde nur die Liste
// aktualisiert — vom Chat aus angelegt blieb das neue Projekt bis zum
// naechsten 15s-Poll unsichtbar.
loadProjects();
await refreshDiagProjectsCache();
// create_project() setzt das Projekt serverseitig aktiv — der Focus im
// Diagnostic ist davon getrennt, also hier mitziehen. Sonst legt man
// ein Projekt an und schreibt weiter in den Hauptchat.
const pid = (d && d.id) ? d.id : '';
if (pid) switchDiagFocus(pid);
} catch (e) { alert('Anlegen fehlgeschlagen: ' + e.message); }
}