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

+2 -1
View File
@@ -77,7 +77,8 @@ public static class ChatEndpoint
res.Headers["Cache-Control"] = "no-cache";
res.Headers["Connection"] = "keep-alive";
var systemPromptText = SystemPromptBuilder.Build(agent, session);
var markedMessages = await db.GetMarkedMessages(sessionId);
var systemPromptText = SystemPromptBuilder.Build(agent, session, markedMessages);
var chainId = Guid.NewGuid().ToString("N");
+14
View File
@@ -19,6 +19,7 @@ public static class HistoryEndpoint
app.MapGet("/api/archives", HandleListArchives);
app.MapGet("/api/archive/{archiveId}", HandleGetArchive);
app.MapGet("/api/attachments/{messageId}", HandleGetAttachments);
app.MapPut("/api/messages/{messageId}/mark", HandleToggleMark);
app.MapGet("/api/chains/{chainId}", HandleGetChain);
}
@@ -119,6 +120,19 @@ public static class HistoryEndpoint
await ctx.Response.WriteAsJsonAsync(result);
}
private static async Task HandleToggleMark(HttpContext ctx, DatabaseService db)
{
var messageIdStr = ctx.Request.RouteValues["messageId"]?.ToString();
if (!long.TryParse(messageIdStr, out var messageId))
{
ctx.Response.StatusCode = 400;
return;
}
var isMarked = await db.ToggleMessageMark(messageId);
await ctx.Response.WriteAsJsonAsync(new { messageId, isMarked });
}
private static async Task HandleGetChain(HttpContext ctx, DatabaseService db)
{
var chainId = ctx.Request.RouteValues["chainId"]?.ToString();
+2 -1
View File
@@ -122,7 +122,8 @@ public static class SessionEndpoint
return;
}
var systemPrompt = SystemPromptBuilder.Build(agent, session);
var markedMessages = await db.GetMarkedMessages(sessionId);
var systemPrompt = SystemPromptBuilder.Build(agent, session, markedMessages);
ctx.Response.ContentType = "text/plain; charset=utf-8";
await ctx.Response.WriteAsync(systemPrompt);