feat(memory): protect Dream cron and polish migration UX

This commit is contained in:
Xubin Ren
2026-04-04 09:01:42 +00:00
parent 6e896249c8
commit 408a61b0e1
4 changed files with 86 additions and 8 deletions
+12 -4
View File
@@ -6,7 +6,7 @@ import time
import uuid
from datetime import datetime
from pathlib import Path
from typing import Any, Callable, Coroutine
from typing import Any, Callable, Coroutine, Literal
from loguru import logger
@@ -365,9 +365,16 @@ class CronService:
logger.info("Cron: registered system job '{}' ({})", job.name, job.id)
return job
def remove_job(self, job_id: str) -> bool:
"""Remove a job by ID."""
def remove_job(self, job_id: str) -> Literal["removed", "protected", "not_found"]:
"""Remove a job by ID, unless it is a protected system job."""
store = self._load_store()
job = next((j for j in store.jobs if j.id == job_id), None)
if job is None:
return "not_found"
if job.payload.kind == "system_event":
logger.info("Cron: refused to remove protected system job {}", job_id)
return "protected"
before = len(store.jobs)
store.jobs = [j for j in store.jobs if j.id != job_id]
removed = len(store.jobs) < before
@@ -376,8 +383,9 @@ class CronService:
self._save_store()
self._arm_timer()
logger.info("Cron: removed job {}", job_id)
return "removed"
return removed
return "not_found"
def enable_job(self, job_id: str, enabled: bool = True) -> CronJob | None:
"""Enable or disable a job."""