Усиление Cron Add и выравнивание схем
Контекст
Недавние логи шлюза показывают повторяющиеся сбоиcron.add с недопустимыми параметрами (отсутствуют sessionTarget, wakeMode, payload, а также некорректный schedule). Это указывает на то, что как минимум один клиент (вероятно, путь вызова инструмента агента) отправляет обёрнутые или частично заданные полезные нагрузки заданий. Отдельно наблюдается расхождение между перечислениями провайдеров cron в TypeScript, схемой шлюза, флагами CLI и типами форм UI, а также несоответствие UI для cron.status (ожидает jobCount, тогда как шлюз возвращает jobs).
Цели
- Остановить спам
cron.addINVALID_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.addINVALID_REQUEST. - Убедитесь, что в Control UI после обновления отображается количество заданий статуса cron.
Необязательные последующие меры
- Ручной smoke‑тест Control UI: добавить по одному заданию cron для каждого провайдера и проверить количество заданий статуса.
Открытые вопросы
- Должен ли
cron.addпринимать явныйstateот клиентов (в настоящее время запрещено схемой)? - Следует ли разрешить
webchatкак явного провайдера доставки (в настоящее время отфильтровывается при разрешении доставки)?