feat: Nachrichten als wichtig markieren (Stern-Button)

- MessageRecord: neues Property IsMarked
- DatabaseService: Migration is_marked, ToggleMessageMark(), GetMarkedMessages()
- HistoryEndpoint: PUT /api/messages/{id}/mark (Toggle)
- SystemPromptBuilder: markierte Nachrichten als Referenz im System-Prompt
- ChatEndpoint + SessionEndpoint: markierte Nachrichten laden und an Builder übergeben
- Frontend: Stern-Button (☆/★) auf jeder Nachricht, Toggle per API
- CSS: .marked-Klasse mit gelbem Seitenrand, Button-Styling
This commit is contained in:
Meleki committed 2026-03-01 01:30:21 +01:00
1 parent 21ca3a451b
commit 19f32442b1
11 files changed
+124 -13

No files matched your search

+14 -1
View File
@@ -1,11 +1,12 @@
using System.Collections.Generic;
using System.Linq;
using Gott.Models;
namespace Gott.Services;
public static class SystemPromptBuilder
{
public static string Build(AgentRecord agent, SessionRecord session)
public static string Build(AgentRecord agent, SessionRecord session, IEnumerable<MessageRecord> markedMessages = null)
{
var parts = new List<string>();
parts.Add($"Du bist {agent.Name}.");
@@ -50,6 +51,18 @@ Wenn der User auf eine bestimmte Zeile in einer Datei verweist (z.B. `[Datei: fo
Diese Regel hat höchste Priorität und gilt für JEDE Antwort: Wenn eine Datei gelesen, geschrieben, bearbeitet, erstellt oder gelöscht werden soll, oder ein Befehl ausgeführt werden soll, MUSS der entsprechende Tool-Aufruf erfolgen. Ohne Tool-Aufruf ist NICHTS passiert. Beschreibe keine Änderungen - führe sie durch.");
}
var marked = markedMessages?.Where(m => !string.IsNullOrWhiteSpace(m.Content)).ToList();
if (marked != null && marked.Count > 0)
{
var lines = new List<string> { "## Markierte Nachrichten\nDer User hat folgende Nachrichten als wichtig markiert:" };
foreach (var m in marked)
{
var role = m.Role == "user" ? "User" : "Assistant";
lines.Add($"- [{role}]: {m.Content.Trim()}");
}
parts.Add(string.Join("\n", lines));
}
return string.Join("\n\n", parts);
}
}