fischer-agentkit/tests/unit/calendar
chiguyong 26efbb51db feat(calendar): U5 reminder subsystem with scheduler and multi-channel dispatch
ReminderScheduler scans upcoming events every 60s, matches reminder
rules, and dispatches via client (WS), email (SMTP), or webhook
channels. Idempotent delivery (no duplicates on re-scan), retry with
exponential backoff (up to 3 attempts). Follows task_store.py
start/stop asyncio loop pattern (KTD-2 — conscious deviation from
APScheduler).

- src/agentkit/calendar/scheduler.py — ReminderScheduler (start/stop/scan_once)
- src/agentkit/calendar/reminders.py — ReminderDispatcher (strategy per channel)
- src/agentkit/calendar/db.py — added list_all_events_in_time_range() for scheduler
- tests/unit/calendar/test_scheduler.py — 8 tests
- tests/unit/calendar/test_reminders.py — 9 tests
2026-06-23 22:19:57 +08:00
..
__init__.py feat(calendar): U1 backend data model, storage & RRULE expansion 2026-06-23 21:30:39 +08:00
test_db.py feat(calendar): U1 backend data model, storage & RRULE expansion 2026-06-23 21:30:39 +08:00
test_extraction.py feat(calendar): U4 post-processing extractor with keyword gating 2026-06-23 21:56:20 +08:00
test_recurrence.py feat(calendar): U1 backend data model, storage & RRULE expansion 2026-06-23 21:30:39 +08:00
test_reminders.py feat(calendar): U5 reminder subsystem with scheduler and multi-channel dispatch 2026-06-23 22:19:57 +08:00
test_routes.py feat(calendar): U2 backend service & REST API 2026-06-23 21:43:39 +08:00
test_scheduler.py feat(calendar): U5 reminder subsystem with scheduler and multi-channel dispatch 2026-06-23 22:19:57 +08:00
test_service.py feat(calendar): U2 backend service & REST API 2026-06-23 21:43:39 +08:00