Feature: Claude Assistent Chat in TaskMate

Neuer Tab "Assistent" mit interaktiver Claude Code Session:
- Chat-UI mit Session-Verwaltung (History, neue/alte Sessions)
- Claude CLI als Child-Process auf dem Host (interaktiv, mit Rueckfragen)
- Streaming-Output per Socket.io
- Nur fuer autorisierte User (Hendrik, Monami)
- 30 Min Inaktivitaets-Timeout
- Task-Uebergabe: Button im Task-Modal sendet Aufgabe an Assistenten
- Chat-Verlauf wird in DB gespeichert

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
Server Deploy
2026-03-19 22:04:49 +01:00
Ursprung 71f59b276b
Commit c4304a4f88
11 geänderte Dateien mit 1574 neuen und 5 gelöschten Zeilen

Datei anzeigen

@@ -48,6 +48,7 @@ const giteaRoutes = require('./routes/gitea');
const knowledgeRoutes = require('./routes/knowledge');
const codingRoutes = require('./routes/coding');
const reminderRoutes = require('./routes/reminders');
const assistantRoutes = require('./routes/assistant');
// Express App erstellen
const app = express();
@@ -178,6 +179,9 @@ app.use('/api/reminders', authenticateToken, csrfProtection, reminderRoutes);
// Contacts-Routes (Kontakte)
app.use('/api/contacts', authenticateToken, csrfProtection, require('./routes/contacts'));
// Assistant-Routes (Claude-Assistent)
app.use('/api/assistant', authenticateToken, csrfProtection, assistantRoutes);
// =============================================================================
// SOCKET.IO
// =============================================================================
@@ -241,6 +245,9 @@ io.on('connection', (socket) => {
}))
});
});
// Assistant Socket-Events registrieren
assistantRoutes.registerSocketEvents(socket);
});
// Socket.io Instance global verfügbar machen für Routes
@@ -328,11 +335,16 @@ database.initialize()
// Graceful Shutdown
process.on('SIGTERM', () => {
logger.info('SIGTERM empfangen, fahre herunter...');
// Reminder Service stoppen
const reminderServiceInstance = reminderService.getInstance();
reminderServiceInstance.stop();
// Aktive Assistant-Sessions beenden
for (const [userId] of connectedClients) {
assistantRoutes.stopSession(userId);
}
server.close(() => {
database.close();
logger.info('Server beendet');
@@ -342,11 +354,16 @@ process.on('SIGTERM', () => {
process.on('SIGINT', () => {
logger.info('SIGINT empfangen, fahre herunter...');
// Reminder Service stoppen
const reminderServiceInstance = reminderService.getInstance();
reminderServiceInstance.stop();
// Aktive Assistant-Sessions beenden
for (const [userId] of connectedClients) {
assistantRoutes.stopSession(userId);
}
server.close(() => {
database.close();
logger.info('Server beendet');