feat: Dynamische KI-Modelle, verbessertes Memory-System und Chat-Überarbeitung

🎯 KI-Modellverwaltung
- Dynamisches Laden verfügbarer Modelle via opencode models
- 29 Modelle verfügbar (opencode, anthropic, ollama)
- Gruppierung nach Anbieter in UI
- Cache-Mechanismus (1h TTL) für Performance
- API-Endpoint /api/models für Modellabfrage

🧠 Memory-System komplett überarbeitet
- JSON-basierte strukturierte Erinnerungen statt Markdown-Chaos
- Separate Memory-Typen: tasks.json, notes.json, research.json
- Automatische Memory-Zusammenfassung im Systemprompt
- Limitierung auf letzte 100 Einträge pro Typ
- Vollständige Task-Ergebnisse statt abgeschnittener Texte

📁 Agenten-Ordnerstruktur
- work/ Verzeichnis für Agent-Dateien
- memory/ Verzeichnis für strukturierte Erinnerungen
- Agenten arbeiten nur in eigenem work-Verzeichnis
- Absolute Pfade werden übergeben
- Dateien-UI zeigt Agent-Work-Folders

💬 Chat-System überarbeitet
- Echte Agent-Ausführung statt Mock-Responses
- Server-Sent Events für Live-Streaming
- Session-basierte Chat-History
- Loading-Spinner und Status-Anzeigen
- Automatisches Speichern in Session

🎭 Personality Integration
- personality.md wird jetzt geladen
- Persönlichkeit vor Systemprompt eingefügt
- Gilt für alle: Chat, Tasks, Orchestrator, Email-Poller

 Weitere Verbesserungen
- Alle Agenten nutzen execute_agent_task() zentral
- Memory-Speicherung nach jedem Task
- Work-Files in Datei-Verwaltung sichtbar
- System-Dateien ausgeblendet
- API-Route für Agent-Work-Dateien
This commit is contained in:
pdyde 2026-02-21 11:44:06 +01:00
parent 84b2fe3dd7
commit 93eb8c6d47
83 changed files with 1692 additions and 1517 deletions

View file

@ -42,6 +42,10 @@
<span style="font-size:.85rem;color:var(--text-secondary);">📄 Projektdokumente</span>
<span class="badge bg-secondary">{{ project_files|length }}</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center" style="padding:.7rem 1rem;">
<span style="font-size:.85rem;color:var(--text-secondary);">🤖 Agenten-Dateien</span>
<span class="badge bg-secondary">{{ agent_work_folders|length }}</span>
</li>
</ul>
</div>
</div>
@ -116,7 +120,7 @@
</div>
<!-- Projektdokumente -->
<div class="card">
<div class="card mb-3">
<div class="card-header bg-secondary d-flex justify-content-between align-items-center">
<span>📄 Projektdokumente <small style="font-weight:400;font-size:.72rem;color:var(--text-muted);margin-left:.4rem;">Arbeitsverzeichnis</small></span>
<span class="badge bg-secondary">{{ project_files|length }}</span>
@ -144,6 +148,32 @@
</div>
</div>
<!-- Agent Work Folders -->
{% if agent_work_folders %}
{% for agent_key, files in agent_work_folders.items() %}
<div class="card mb-3">
<div class="card-header bg-success d-flex justify-content-between align-items-center">
<span>🤖 {{ agent_key.replace('_', ' ').title() }} <small style="font-weight:400;font-size:.72rem;color:var(--text-muted);margin-left:.4rem;">agents/{{ agent_key }}/work/</small></span>
<span class="badge bg-secondary">{{ files|length }}</span>
</div>
<div class="card-body">
{% for file in files %}
<div class="file-item">
<span class="file-icon">{{ '📋' if file.name.endswith('.docx') else '📝' if file.name.endswith('.md') else '📊' if file.name.endswith(('.json', '.csv')) else '📄' }}</span>
<div style="flex:1;min-width:0;">
<div class="file-name">{{ file.name }}</div>
<div class="file-meta">{{ (file.size / 1024)|round(1) }} KB · {{ file.modified[:10] }}</div>
</div>
<div class="file-actions">
<a href="/files/agent/{{ agent_key }}/{{ file.name }}" class="btn btn-sm btn-secondary" title="Herunterladen"></a>
</div>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
{% endif %}
</div>
</div>