- parseJson: plain text (kein { oder [) → type=chat statt type=unknown
Behebt WARNING für normale Chat-Antworten wie "Alles klar! [END]"
- AgentAIService Prompt: Regel 12 — Konflikt-Handling mit force:true erklärt
AI fragt nach Überschneidung und sendet force:true wenn User bestätigt
- AgentActionService: Duplikat-Check bei force=true überspringen
damit erzwungene Events auch bei gleichem Titel+Datum gespeichert werden
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Vorher: preg_match mit Capture-Group schlug fehl wenn ``` am Ende fehlt.
Nachher: zwei preg_replace entfernen öffnendes ```json und schließendes ```
unabhängig voneinander — robuster gegen unvollständige Codeblöcke.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- AgentChatController: _multi hatte kein type-Key → wurde als 'chat' gewertet
→ nur 5 Credits statt Action-Credits. Fix: isset(_multi) erkennt Multi-Actions
- AgentAIService: EVENT vs TASK Entscheidungsregel + reminder_at für Events
Event mit Erinnerung → immer event+reminder_at, niemals als Task anlegen
- EventPlannerService: reminder_at beim Event-Erstellen speichern (UTC)
- Event Model + Migration: reminder_at + reminder_sent Felder ergänzt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>