From 2bfc44ea1bff4d29b5af6f6975459373fe0e8864 Mon Sep 17 00:00:00 2001 From: Timmy Time Date: Fri, 20 Mar 2026 17:44:32 -0400 Subject: [PATCH] [loop-cycle-1] refactor: extract _try_prune helper and fix f-string logging (#653) (#657) --- src/dashboard/app.py | 103 ++++++++++++++++--------------- src/infrastructure/events/bus.py | 2 +- 2 files changed, 55 insertions(+), 50 deletions(-) diff --git a/src/dashboard/app.py b/src/dashboard/app.py index 5701ea2..a66098a 100644 --- a/src/dashboard/app.py +++ b/src/dashboard/app.py @@ -377,73 +377,78 @@ def _startup_background_tasks() -> list[asyncio.Task]: ] +def _try_prune(label: str, prune_fn, days: int) -> None: + """Run a prune function, log results, swallow errors.""" + try: + pruned = prune_fn() + if pruned: + logger.info( + "%s auto-prune: removed %d entries older than %d days", + label, + pruned, + days, + ) + except Exception as exc: + logger.debug("%s auto-prune skipped: %s", label, exc) + + +def _check_vault_size() -> None: + """Warn if the memory vault exceeds the configured size limit.""" + try: + vault_path = Path(settings.repo_root) / "memory" / "notes" + if vault_path.exists(): + total_bytes = sum(f.stat().st_size for f in vault_path.rglob("*") if f.is_file()) + total_mb = total_bytes / (1024 * 1024) + if total_mb > settings.memory_vault_max_mb: + logger.warning( + "Memory vault (%.1f MB) exceeds limit (%d MB) — consider archiving old notes", + total_mb, + settings.memory_vault_max_mb, + ) + except Exception as exc: + logger.debug("Vault size check skipped: %s", exc) + + def _startup_pruning() -> None: """Auto-prune old memories, thoughts, and events on startup.""" if settings.memory_prune_days > 0: - try: - from timmy.memory_system import prune_memories + from timmy.memory_system import prune_memories - pruned = prune_memories( + _try_prune( + "Memory", + lambda: prune_memories( older_than_days=settings.memory_prune_days, keep_facts=settings.memory_prune_keep_facts, - ) - if pruned: - logger.info( - "Memory auto-prune: removed %d entries older than %d days", - pruned, - settings.memory_prune_days, - ) - except Exception as exc: - logger.debug("Memory auto-prune skipped: %s", exc) + ), + settings.memory_prune_days, + ) if settings.thoughts_prune_days > 0: - try: - from timmy.thinking import thinking_engine + from timmy.thinking import thinking_engine - pruned = thinking_engine.prune_old_thoughts( + _try_prune( + "Thought", + lambda: thinking_engine.prune_old_thoughts( keep_days=settings.thoughts_prune_days, keep_min=settings.thoughts_prune_keep_min, - ) - if pruned: - logger.info( - "Thought auto-prune: removed %d entries older than %d days", - pruned, - settings.thoughts_prune_days, - ) - except Exception as exc: - logger.debug("Thought auto-prune skipped: %s", exc) + ), + settings.thoughts_prune_days, + ) if settings.events_prune_days > 0: - try: - from swarm.event_log import prune_old_events + from swarm.event_log import prune_old_events - pruned = prune_old_events( + _try_prune( + "Event", + lambda: prune_old_events( keep_days=settings.events_prune_days, keep_min=settings.events_prune_keep_min, - ) - if pruned: - logger.info( - "Event auto-prune: removed %d entries older than %d days", - pruned, - settings.events_prune_days, - ) - except Exception as exc: - logger.debug("Event auto-prune skipped: %s", exc) + ), + settings.events_prune_days, + ) if settings.memory_vault_max_mb > 0: - try: - vault_path = Path(settings.repo_root) / "memory" / "notes" - if vault_path.exists(): - total_bytes = sum(f.stat().st_size for f in vault_path.rglob("*") if f.is_file()) - total_mb = total_bytes / (1024 * 1024) - if total_mb > settings.memory_vault_max_mb: - logger.warning( - "Memory vault (%.1f MB) exceeds limit (%d MB) — consider archiving old notes", - total_mb, - settings.memory_vault_max_mb, - ) - except Exception as exc: - logger.debug("Vault size check skipped: %s", exc) + _check_vault_size() async def _shutdown_cleanup( diff --git a/src/infrastructure/events/bus.py b/src/infrastructure/events/bus.py index f9e81f2..beb0fa3 100644 --- a/src/infrastructure/events/bus.py +++ b/src/infrastructure/events/bus.py @@ -64,7 +64,7 @@ class EventBus: @bus.subscribe("agent.task.*") async def handle_task(event: Event): - logger.debug(f"Task event: {event.data}") + logger.debug("Task event: %s", event.data) await bus.publish(Event( type="agent.task.assigned",