diff --git a/requirements.txt b/requirements.txt index 0e49a54..6e32cdb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ websockets>=13.0 python-multipart>=0.0.17 psutil>=6.0.0 aiofiles>=24.0.0 -apscheduler>=3.10.0 +apscheduler>=3.10.0,<4.0.0 pywinpty>=2.0.0; sys_platform == "win32" # Dev dependencies diff --git a/server/services/scheduler_service.py b/server/services/scheduler_service.py index bb4fdfa..239f6cd 100644 --- a/server/services/scheduler_service.py +++ b/server/services/scheduler_service.py @@ -285,6 +285,20 @@ class SchedulerService: ).delete() db.commit() + # Check for active manual-start overrides that prevent auto-stop + active_start_override = db.query(ScheduleOverride).filter( + ScheduleOverride.schedule_id == schedule_id, + ScheduleOverride.override_type == "start", + ScheduleOverride.expires_at > now, + ).first() + + if active_start_override: + logger.info( + f"Skipping scheduled stop for {project_name}: " + f"active manual-start override (expires {active_start_override.expires_at})" + ) + return + # Stop agent await self._stop_agent(project_name, project_dir)