diff --git a/agent/context_compressor.py b/agent/context_compressor.py index 34ec5091b1c6f..0873ad90c56dd 100644 --- a/agent/context_compressor.py +++ b/agent/context_compressor.py @@ -208,6 +208,7 @@ def on_session_reset(self) -> None: self._previous_summary = None self._last_compression_savings_pct = 100.0 self._ineffective_compression_count = 0 + self._summary_failure_cooldown_until = 0.0 def update_model( self, diff --git a/cron/jobs.py b/cron/jobs.py index 06d782888f7ef..71391feba99af 100644 --- a/cron/jobs.py +++ b/cron/jobs.py @@ -492,6 +492,17 @@ def update_job(job_id: str, updates: Dict[str, Any]) -> Optional[Dict[str, Any]] continue updated = _apply_skill_fields({**job, **updates}) + + # Normalize repeat field if present in updates + if "repeat" in updates: + raw_repeat = updated["repeat"] + if isinstance(raw_repeat, (int, float)): + val = int(raw_repeat) if raw_repeat > 0 else None + updated["repeat"] = {"times": val, "completed": 0} + elif isinstance(raw_repeat, dict): + raw_repeat.setdefault("times", None) + raw_repeat.setdefault("completed", 0) + schedule_changed = "schedule" in updates if "skills" in updates or "skill" in updates: diff --git a/hermes_cli/web_server.py b/hermes_cli/web_server.py index 0a7657f337568..b0d0ee4d9e08b 100644 --- a/hermes_cli/web_server.py +++ b/hermes_cli/web_server.py @@ -1900,7 +1900,10 @@ async def get_skills(): from hermes_cli.skills_config import get_disabled_skills config = load_config() disabled = get_disabled_skills(config) - skills = _find_all_skills(skip_disabled=True) + try: + skills = _find_all_skills(skip_disabled=True) + except Exception: + skills = [] for s in skills: s["enabled"] = s["name"] not in disabled return skills