Tăng Cường Cron Add & Đồng Bộ Schema

Bối cảnh

Log của Gateway gần đây cho thấy lỗi cron.add lặp đi lặp lại với các tham số không hợp lệ (thiếu sessionTarget, wakeMode, payload, và schedule bị sai định dạng). Điều này cho thấy có ít nhất một client (có thể là đường dẫn tool call của Agent) đang gửi các job payload bị wrap hoặc chỉ định một phần. Ngoài ra, còn có sự khác biệt giữa các enum provider của cron trong TypeScript, schema Gateway, flag CLI, và kiểu form UI, cộng thêm sự không khớp trong UI cho cron.status (mong đợi jobCount trong khi Gateway trả về jobs).

Mục tiêu

  • Ngăn chặn spam lỗi INVALID_REQUEST từ cron.add bằng cách chuẩn hóa các wrapper payload phổ biến và suy luận các trường kind còn thiếu.
  • Đồng bộ danh sách cron provider trên Gateway schema, cron types, tài liệu CLI, và form UI.
  • Làm rõ schema công cụ cron của Agent để LLM tạo ra các job payload đúng.
  • Sửa hiển thị số lượng job trong cron status của Control UI.
  • Thêm test để cover việc chuẩn hóa và hành vi của công cụ.

Không phải mục tiêu

  • Thay đổi ngữ nghĩa lập lịch cron hoặc hành vi thực thi job.
  • Thêm các loại schedule mới hoặc phân tích cú pháp biểu thức cron.
  • Đại tu UI/UX cho cron ngoài các sửa chữa trường cần thiết.

Phát hiện (các khoảng trống hiện tại)

  • CronPayloadSchema trong Gateway loại trừ signal + imessage, trong khi các kiểu TS có chứa chúng.
  • Control UI CronStatus mong đợi jobCount, nhưng Gateway trả về jobs.
  • Schema công cụ cron của Agent cho phép các object job tùy ý, dẫn đến input sai định dạng.
  • Gateway validate cron.add một cách nghiêm ngặt mà không chuẩn hóa, nên các payload bị wrap sẽ thất bại.

Những gì đã thay đổi

  • cron.addcron.update giờ đây chuẩn hóa các dạng wrapper phổ biến và suy luận các trường kind còn thiếu.
  • Schema công cụ cron của Agent khớp với schema Gateway, giúp giảm các payload không hợp lệ.
  • Các enum Provider được đồng bộ trên Gateway, CLI, UI, và macOS picker.
  • Control UI sử dụng trường đếm jobs của Gateway cho status.

Hành vi hiện tại

  • Chuẩn hóa: các payload data/job bị wrap được unwrap; schedule.kindpayload.kind được suy luận khi an toàn.
  • Giá trị mặc định: các giá trị mặc định an toàn được áp dụng cho wakeModesessionTarget khi thiếu.
  • Provider: Discord/Slack/Signal/iMessage giờ được hiển thị nhất quán trên CLI/UI.

Xem Cron jobs để biết dạng đã chuẩn hóa và các ví dụ.

Xác minh

  • Theo dõi log Gateway để thấy lỗi cron.add INVALID_REQUEST giảm đi.
  • Xác nhận Control UI cron status hiển thị số lượng job sau khi refresh.

Các bước tiếp theo tùy chọn

  • Smoke test thủ công Control UI: thêm một cron job cho mỗi provider + xác minh số lượng job trong status.

Câu hỏi mở

  • cron.add có nên chấp nhận state rõ ràng từ client không (hiện tại bị schema không cho phép)?
  • Chúng ta có nên cho phép webchat làm delivery provider rõ ràng không (hiện tại bị lọc trong delivery resolution)?