mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-07-30 18:22:54 +00:00
* feat(cron): configurable default timezone for cron expressions Cron expressions (e.g. "0 8 * * *") are evaluated relative to a timezone. Without an explicit per-job timezone, they default to the server's system timezone, which may not match the user's local time — especially in Docker containers (default UTC) or multi-region deployments. This adds a `default_timezone` setting to `CronConfig` (IANA format, e.g. "Asia/Ho_Chi_Minh") that is applied as fallback when a cron job has no explicit `schedule.tz`. The setting is configurable via the UI config page (Integrations → Cron Scheduler) and hot-reloads on config changes. Backend: - Add `DefaultTimezone` field to `CronConfig` - Add `SetDefaultTimezone()` to `CronStore` interface + PG implementation - Apply default TZ in `AddJob()` when `schedule.TZ` is empty - Wire at startup + subscribe to config change events for hot reload - Update cron tool description so LLM knows about gateway default Frontend: - Add timezone dropdown (20 common IANA timezones) to Cron config section - Add i18n keys for en, vi, zh * fix(cron): apply default timezone to existing jobs via computeNextRun Pass defaultTZ as fallback to computeNextRun so existing cron jobs (with timezone = NULL in DB) also use the gateway's configured default timezone when computing next_run_at. This ensures old jobs benefit from the timezone setting without needing a DB migration or backfill. --------- Co-authored-by: Luvu182 <208665161+Luvu182@users.noreply.github.com>