Cron Add Hardening & Schema-Angleichung

Kontext

Die Gateway-Logs zeigen wiederholt cron.add-Fehler mit ungültigen Parametern (fehlende sessionTarget, wakeMode, payload und fehlerhafte schedule). Das deutet darauf hin, dass mindestens ein Client (wahrscheinlich der Agent Tool Call Path) umschlossene oder unvollständig spezifizierte Job-Payloads sendet. Zusätzlich gibt es Abweichungen zwischen den Cron-Provider-Enums in TypeScript, Gateway-Schema, CLI-Flags und UI-Formulartypen, plus eine UI-Diskrepanz bei cron.status (erwartet jobCount, während Gateway jobs zurückgibt).

Ziele

  • cron.add INVALID_REQUEST-Spam stoppen, indem gängige Wrapper-Payloads normalisiert und fehlende kind-Felder abgeleitet werden.
  • Cron-Provider-Listen über Gateway-Schema, Cron-Typen, CLI-Docs und UI-Formulare hinweg angleichen.
  • Agent-Cron-Tool-Schema explizit machen, damit das LLM korrekte Job-Payloads erzeugt.
  • Die Anzeige der Job-Anzahl im Control UI Cron-Status reparieren.
  • Tests hinzufügen, die Normalisierung und Tool-Verhalten abdecken.

Nicht-Ziele

  • Cron-Scheduling-Semantik oder Job-Ausführungsverhalten ändern.
  • Neue Schedule-Arten oder Cron-Expression-Parsing hinzufügen.
  • UI/UX für Cron über die notwendigen Feld-Fixes hinaus überarbeiten.

Erkenntnisse (aktuelle Lücken)

  • CronPayloadSchema im Gateway schließt signal + imessage aus, während TS-Typen sie enthalten.
  • Control UI CronStatus erwartet jobCount, aber Gateway gibt jobs zurück.
  • Agent-Cron-Tool-Schema erlaubt beliebige job-Objekte, was fehlerhafte Eingaben ermöglicht.
  • Gateway validiert cron.add strikt ohne Normalisierung, sodass umschlossene Payloads fehlschlagen.

Was sich geändert hat

  • cron.add und cron.update normalisieren jetzt gängige Wrapper-Formen und leiten fehlende kind-Felder ab.
  • Agent-Cron-Tool-Schema entspricht dem Gateway-Schema, was ungültige Payloads reduziert.
  • Provider-Enums sind über Gateway, CLI, UI und macOS-Picker hinweg angeglichen.
  • Control UI verwendet das jobs-Count-Feld des Gateways für den Status.

Aktuelles Verhalten

  • Normalisierung: Umschlossene data/job-Payloads werden entpackt; schedule.kind und payload.kind werden abgeleitet, wenn sicher möglich.
  • Defaults: Sichere Standardwerte werden für wakeMode und sessionTarget angewendet, wenn sie fehlen.
  • Provider: Discord/Slack/Signal/iMessage werden jetzt konsistent über CLI/UI hinweg angezeigt.

Siehe Cron-Jobs für die normalisierte Form und Beispiele.

Verifikation

  • Gateway-Logs auf reduzierte cron.add INVALID_REQUEST-Fehler prüfen.
  • Bestätigen, dass Control UI Cron-Status die Job-Anzahl nach Refresh anzeigt.

Optionale Follow-ups

  • Manueller Control UI Smoke-Test: Einen Cron-Job pro Provider hinzufügen + Job-Anzahl im Status verifizieren.

Offene Fragen

  • Sollte cron.add expliziten state von Clients akzeptieren (aktuell durch Schema nicht erlaubt)?
  • Sollten wir webchat als expliziten Delivery-Provider erlauben (aktuell in der Delivery-Resolution gefiltert)?