Перейти к основному содержанию

Усиление Cron Add и выравнивание схем

Контекст

Недавние логи шлюза показывают повторяющиеся сбои cron.add с недопустимыми параметрами (отсутствуют sessionTarget, wakeMode, payload, а также некорректный schedule). Это указывает на то, что как минимум один клиент (вероятно, путь вызова инструмента агента) отправляет обёрнутые или частично заданные полезные нагрузки заданий. Отдельно наблюдается расхождение между перечислениями провайдеров cron в TypeScript, схемой шлюза, флагами CLI и типами форм UI, а также несоответствие UI для cron.status (ожидает jobCount, тогда как шлюз возвращает jobs).

Цели

  • Остановить спам cron.add INVALID_REQUEST за счёт нормализации распространённых обёрток полезных нагрузок и вывода недостающих полей kind.
  • Выровнять списки провайдеров cron между схемой шлюза, типами cron, документацией CLI и формами UI.
  • Сделать схему инструмента cron для агента явной, чтобы LLM формировала корректные полезные нагрузки заданий.
  • Исправить отображение количества заданий статуса cron в Control UI.
  • Добавить тесты для покрытия нормализации и поведения инструмента.

Не цели

  • Изменять семантику планирования cron или поведение выполнения заданий.
  • Добавлять новые типы расписаний или разбор cron-выражений.
  • Перерабатывать UI/UX для cron сверх необходимых исправлений полей.

Выводы (текущие пробелы)

  • CronPayloadSchema в шлюзе исключает signal + imessage, тогда как типы TS их включают.
  • CronStatus в Control UI ожидает jobCount, но шлюз возвращает jobs.
  • Схема инструмента cron для агента допускает произвольные объекты job, что позволяет формировать некорректные входные данные.
  • Шлюз строго валидирует cron.add без нормализации, из‑за чего обёрнутые полезные нагрузки не проходят.

Что изменилось

  • cron.add и cron.update теперь нормализуют распространённые формы обёрток и выводят недостающие поля kind.
  • Схема инструмента cron для агента соответствует схеме шлюза, что снижает количество недопустимых полезных нагрузок.
  • Перечисления провайдеров выровнены между шлюзом, CLI, UI и выборщиком macOS.
  • Control UI использует поле счётчика jobs шлюза для статуса.

Текущее поведение

  • Нормализация: обёрнутые полезные нагрузки data/job разворачиваются; schedule.kind и payload.kind выводятся, когда это безопасно.
  • Значения по умолчанию: безопасные значения по умолчанию применяются для wakeMode и sessionTarget при отсутствии.
  • Провайдеры: Discord/Slack/Signal/iMessage теперь последовательно представлены в CLI/UI.
См. Cron jobs для нормализованной формы и примеров.

Проверка

  • Отслеживайте логи шлюза на предмет снижения количества ошибок cron.add INVALID_REQUEST.
  • Убедитесь, что в Control UI после обновления отображается количество заданий статуса cron.

Необязательные последующие меры

  • Ручной smoke‑тест Control UI: добавить по одному заданию cron для каждого провайдера и проверить количество заданий статуса.

Открытые вопросы

  • Должен ли cron.add принимать явный state от клиентов (в настоящее время запрещено схемой)?
  • Следует ли разрешить webchat как явного провайдера доставки (в настоящее время отфильтровывается при разрешении доставки)?