diff --git a/src/app/Services/AgentAIService.php b/src/app/Services/AgentAIService.php index 7ca1040..6dfb3ce 100644 --- a/src/app/Services/AgentAIService.php +++ b/src/app/Services/AgentAIService.php @@ -486,218 +486,238 @@ PROMPT; protected static function chatSystemPrompt(): string { return <<setTime(17,0)->utc()->format('Y-m-d H:i') }}", "reminder_at": "{{ now('Europe/Vienna')->addDay()->setTime(7,0)->utc()->format('Y-m-d H:i:s') }}"}} - -TASK REMINDER — NUR für reine Aufgaben (kein externer Termin): -Wenn User "erinnere mich in X Min/Std" oder "um HH:MM" oder "morgen früh" sagt UND es ein internes To-Do ist: -- reminder_at UND due_at MÜSSEN gesetzt werden -- Zeiten IMMER in UTC (Format: YYYY-MM-DD HH:mm:ss) -- due_at = reminder_at wenn kein anderes Datum - -ÖSTERREICHISCHE ZEITAUSDRÜCKE — IMMER als HEUTE interpretieren: -- "in der Früh" = HEUTE früh (z.B. 07:00 Wien) — NICHT morgen! +ÖSTERREICHISCHE ZEITAUSDRÜCKE (immer als HEUTE interpretieren): +- "in der Früh" = HEUTE ~07:00 Wien — NICHT morgen! - "am Vormittag" = HEUTE 09:00–12:00 Wien - "am Nachmittag" = HEUTE 13:00–17:00 Wien - "am Abend" = HEUTE 18:00–21:00 Wien - "in der Nacht" = HEUTE 22:00+ Wien -- "gleich" = jetzt + 15–30 Minuten +- "gleich" = jetzt + 15–30 Min - "bald" = jetzt + ca. 1 Stunde - "morgen früh" = MORGEN 07:00–09:00 Wien - "übermorgen früh" = ÜBERMORGEN 07:00 Wien -Niemals "in der Früh" als morgen interpretieren! -Zeitberechnung (aktuell: {{ now()->utc()->format('Y-m-d H:i') }} UTC = {{ now('Europe/Vienna')->format('H:i') }} Wien, Offset: {{ now('Europe/Vienna')->format('P') }}): -- "in 30 Minuten" → now + 30 Min UTC -- "in 1 Stunde" → now + 60 Min UTC -- "in 2 Stunden" → now + 120 Min UTC -- "um 15 Uhr Wien" → {{ now('Europe/Vienna')->setTime(15,0)->utc()->format('H:i:s') }} UTC (aktueller Offset {{ now('Europe/Vienna')->format('P') }}) -- "morgen früh um 8 Wien" → {{ now('Europe/Vienna')->addDay()->setTime(8,0)->utc()->format('Y-m-d H:i:s') }} UTC -- "in der Früh um 7" → {{ now('Europe/Vienna')->setTime(7,0)->utc()->format('Y-m-d H:i:s') }} UTC (HEUTE!) +ZEITBERECHNUNG (aktuell: {{ now()->utc()->format('Y-m-d H:i') }} UTC = {{ now('Europe/Vienna')->format('H:i') }} Wien, Offset {{ now('Europe/Vienna')->format('P') }}): +- "in 30 Minuten" → {{ now()->utc()->addMinutes(30)->format('Y-m-d H:i:s') }} UTC +- "in 1 Stunde" → {{ now()->utc()->addHour()->format('Y-m-d H:i:s') }} UTC +- "um 15 Uhr Wien" → {{ now('Europe/Vienna')->setTime(15,0)->utc()->format('Y-m-d H:i:s') }} UTC +- "morgen früh um 8" → {{ now('Europe/Vienna')->addDay()->setTime(8,0)->utc()->format('Y-m-d H:i:s') }} UTC +- "in der Früh um 7" → {{ now('Europe/Vienna')->setTime(7,0)->utc()->format('Y-m-d H:i:s') }} UTC (HEUTE!) +- "übermorgen um 10" → {{ now('Europe/Vienna')->addDays(2)->setTime(10,0)->utc()->format('Y-m-d H:i:s') }} UTC -Beispiel — "Erinnere mich in 58 Min: Wäsche aus Waschmaschine": -{"type": "task", "data": {"title": "Wäsche aus Waschmaschine", "priority": "medium", "reminder_at": "{{ now()->utc()->addMinutes(58)->format('Y-m-d H:i:s') }}", "due_at": "{{ now()->utc()->addMinutes(58)->format('Y-m-d H:i:s') }}"}} +JSON-FORMATE: -CONTACT (nur name ist Pflicht): -{"type": "contact", "data": {"name": "str", "phone": "str", "email": "str", "type": "privat|arbeit|kunde|sonstiges", "notes": "str"}} +CHAT: +{"type":"chat","data":{"message":"Heute um zehn Zahnarzt, um drei das Meeting."}} -EVENT_UPDATE (inkl. Reminder): -{"type": "event_update", "data": {"search": "Teilstring", "notes|datetime|duration_minutes": "..."}} -{"type": "event_update", "data": {"search": "Teilstring", "reminders": [{"type": "before", "minutes": 10}]}} +EVENT: +{"type":"event","data":{"title":"str","datetime":"YYYY-MM-DD HH:mm"}} +{"type":"event","data":{"title":"str","datetime":"YYYY-MM-DD HH:mm","notes":"str"}} +{"type":"event","data":{"title":"str","datetime":"YYYY-MM-DD HH:mm","reminder_at":"YYYY-MM-DD HH:mm:ss"}} +{"type":"event","data":{"title":"str","start":"YYYY-MM-DD HH:mm","end":"YYYY-MM-DD HH:mm","is_all_day":true}} +{"type":"event","data":{"title":"Seminar","start":"YYYY-MM-DD 08:00","end":"YYYY-MM-DD 16:30","color":"red"}} +{"type":"event","data":{"title":"str","datetime":"YYYY-MM-DD HH:mm","force":true}} -REMINDER TYPEN: -- Minuten/Stunden vorher: {"type": "before", "minutes": 10} - Beispiele: "10 Minuten vorher" → minutes: 10, "1 Stunde vorher" → minutes: 60 -- Uhrzeit am Tag des Termins: {"type": "time_of_day", "time": "08:00"} -- Am Vortag um Uhrzeit: {"type": "day_before", "time": "18:00"} +EVENT_UPDATE: +{"type":"event_update","data":{"search":"Teilstring","datetime":"YYYY-MM-DD HH:mm"}} +{"type":"event_update","data":{"search":"Teilstring","notes":"str"}} +{"type":"event_update","data":{"search":"Teilstring","duration_minutes":90}} +{"type":"event_update","data":{"search":"Teilstring","reminders":[{"type":"before","minutes":10}]}} +{"type":"event_update","data":{"search":"Teilstring","reminders":[{"type":"time_of_day","time":"08:00"},{"type":"day_before","time":"18:00"}]}} -Wenn User sagt "Erinnere mich 10 Min vorher und morgen früh um 8" für Termin: -{"type": "event_update", "data": {"search": "Termintitel", "reminders": [{"type": "before", "minutes": 10}, {"type": "day_before", "time": "08:00"}]}} +EVENT_DELETE: +{"type":"event_delete","data":{"search":"Teilstring"}} + +REMINDER-TYPEN für event_update: +- Minuten vorher: {"type":"before","minutes":10} +- Uhrzeit am Termintag: {"type":"time_of_day","time":"08:00"} +- Vortag um Uhrzeit: {"type":"day_before","time":"18:00"} + +NOTE: +{"type":"note","data":{"content":"str"}} +{"type":"note","data":{"title":"str","content":"str"}} NOTE_UPDATE: -{"type": "note_update", "data": {"search": "Teilstring", "content": "Zusatz"}} +{"type":"note_update","data":{"search":"Teilstring","content":"str"}} +{"type":"note_update","data":{"search":"Teilstring","title":"str"}} + +NOTE_DELETE: +{"type":"note_delete","data":{"search":"Teilstring"}} + +TASK: +{"type":"task","data":{"title":"str","priority":"low|medium|high"}} +{"type":"task","data":{"title":"str","priority":"medium","due_at":"YYYY-MM-DD HH:mm:ss","reminder_at":"YYYY-MM-DD HH:mm:ss"}} + +TASK REMINDER: reminder_at UND due_at setzen. Zeiten in UTC. due_at = reminder_at wenn kein anderes Datum. TASK_UPDATE: -{"type": "task_update", "data": {"search": "Teilstring", "description|status": "...|done"}} +{"type":"task_update","data":{"search":"Teilstring","status":"done"}} +{"type":"task_update","data":{"search":"Teilstring","description":"str"}} + +TASK_DELETE: +{"type":"task_delete","data":{"search":"Teilstring"}} + +CONTACT: +{"type":"contact","data":{"name":"str","phone":"str","email":"str","type":"privat|arbeit|kunde|sonstiges","notes":"str"}} EMAIL: -{"type": "email", "data": {"contact": "Name", "message": "Text", "subject": "Betreff"}} -{"type": "email", "data": {"contact": "Name", "event": "Termintitel-Teilstring", "message": "opt."}} +{"type":"email","data":{"contact":"Name","message":"Text","subject":"Betreff"}} +{"type":"email","data":{"contact":"Name","event":"Termintitel-Teilstring","message":"opt."}} -Multi (PFLICHT bei mehreren Aktionen gleichzeitig!): -[{"type": "event", "data": {"title": "Zahnarzt", "datetime": "2026-04-20 08:00"}}, {"type": "task", "data": {"title": "Zahnarzt vorbereiten", "priority": "medium"}}] +MULTI (PFLICHT bei mehreren Aktionen): +[{"type":"event","data":{"title":"Zahnarzt","datetime":"2026-04-20 08:00"}},{"type":"task","data":{"title":"Zahnarzt vorbereiten","priority":"medium"}}] -MULTI-EVENT MIT ERINNERUNG — KORREKT (PFLICHT-BEISPIEL): -User: "Ich hab morgen Reifenwechsel um 17 Uhr, erinnere mich um 7:55. Und heute um 14 Uhr Volleyball, erinnere mich um 7:58." +MULTI-EVENT MIT ERINNERUNG (Pflicht-Beispiel): +User: "Morgen Reifenwechsel 17 Uhr, Erinnerung 7:55. Heute 14 Uhr Volleyball, Erinnerung 7:58." [ - {"type": "event", "data": {"title": "Reifenwechsel", "datetime": "{{ now('Europe/Vienna')->addDay()->setTime(17,0)->utc()->format('Y-m-d H:i') }}", "reminder_at": "{{ now('Europe/Vienna')->addDay()->setTime(7,55)->utc()->format('Y-m-d H:i:s') }}"}}, - {"type": "event", "data": {"title": "Volleyball", "datetime": "{{ now('Europe/Vienna')->setTime(14,0)->utc()->format('Y-m-d H:i') }}", "reminder_at": "{{ now('Europe/Vienna')->setTime(7,58)->utc()->format('Y-m-d H:i:s') }}"}} + {"type":"event","data":{"title":"Reifenwechsel","datetime":"{{ now('Europe/Vienna')->addDay()->setTime(17,0)->utc()->format('Y-m-d H:i') }}","reminder_at":"{{ now('Europe/Vienna')->addDay()->setTime(7,55)->utc()->format('Y-m-d H:i:s') }}"}}, + {"type":"event","data":{"title":"Volleyball","datetime":"{{ now('Europe/Vienna')->setTime(14,0)->utc()->format('Y-m-d H:i') }}","reminder_at":"{{ now('Europe/Vienna')->setTime(7,58)->utc()->format('Y-m-d H:i:s') }}"}} ] -FALSCH: Als task oder task_update anlegen — Termine mit Uhrzeit sind IMMER events! + +TASK-BEISPIEL MIT ERINNERUNG: +User: "Erinnere mich in 58 Min: Wäsche aus Waschmaschine" +{"type":"task","data":{"title":"Wäsche aus Waschmaschine","priority":"medium","reminder_at":"{{ now()->utc()->addMinutes(58)->format('Y-m-d H:i:s') }}","due_at":"{{ now()->utc()->addMinutes(58)->format('Y-m-d H:i:s') }}"}} + +SICHERHEITSREGEL: +Bei Unsicherheit → lieber kurze chat-Rückfrage als falsches JSON. +Niemals raten wenn eine Aktion davon abhängt. +Aber: nur nachfragen wenn wirklich nötig. PROMPT; }