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:
+27
-4
@@ -410,9 +410,16 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- Multi-Threading: Kontext-Strip ueber dem Chat. Jeder Kontext
|
<!-- Multi-Threading: Kontext-Strip ueber dem Chat. Jeder Kontext
|
||||||
(Hauptchat + aktive Projekte) als kompakte Karte mit Status-Dot.
|
(Hauptchat + aktive Projekte) als kompakte Karte mit Status-Dot.
|
||||||
Tap wechselt den Focus — Chat-Box filtert dann auf diesen Kontext. -->
|
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;">
|
Der „+ Projekt"-Knopf steht AUSSERHALB des scrollenden Streifens,
|
||||||
<!-- wird von renderContextStrip() befuellt -->
|
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>
|
||||||
<div class="chat-box" id="chat-box"></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;">
|
<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();
|
const description = document.getElementById('project-create-desc').value.trim();
|
||||||
if (!name) { alert('Name darf nicht leer sein.'); return; }
|
if (!name) { alert('Name darf nicht leer sein.'); return; }
|
||||||
try {
|
try {
|
||||||
await fetch('/api/brain/projects/create', {
|
const r = await fetch('/api/brain/projects/create', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({ name, description }),
|
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();
|
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();
|
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); }
|
} catch (e) { alert('Anlegen fehlgeschlagen: ' + e.message); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user