- 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>
- Ganztägige Konflikt-Prüfung: EventPlannerService hatte bereits
->where('is_all_day', false) in hasConflict() + hasMultiDayConflict()
AgentActionService delegiert dorthin — kein zusätzlicher Fix nötig
- Chat-Credits: immer 5 Credits pauschal (vorher: nur 1. Nachricht einer
Session, Follow-ups = 0 + kein Log)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Credits nur bei status='success': Konflikt/Fehler/Failed → 0 Credits
- Multi-Action: Credits proportional zu erfolgreichen Aktionen
- AgentActionService: Duplikat-Check vor Event/Task/Notiz-Anlage
- Multi-Action-Status: 'success'/'partial'/'failed' statt immer 'success'
- Gilt für Web (Livewire/Agent/Index) und API (AgentChatController)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>