diff --git a/frontend/src/components/ToolCallCard.vue b/frontend/src/components/ToolCallCard.vue index e884e01..940ecad 100644 --- a/frontend/src/components/ToolCallCard.vue +++ b/frontend/src/components/ToolCallCard.vue @@ -262,7 +262,7 @@ async function applyTag(tag: string) { No notes found @@ -205,6 +222,15 @@ defineExpose({ reload: loadAll }); Due {{ activeTask.due_date }} +
@@ -562,6 +588,19 @@ defineExpose({ reload: loadAll }); text-transform: capitalize; } +.milestone-select { + font-size: 0.72rem; + padding: 0.15rem 0.4rem; + border-radius: 10px; + background: var(--color-bg); + border: 1px solid var(--color-border); + color: var(--color-text-muted); + cursor: pointer; + max-width: 140px; +} +.milestone-select:disabled { opacity: 0.5; cursor: default; } +.milestone-select:focus { outline: none; border-color: var(--color-primary); } + .detail-log { flex: 1; overflow-y: auto; diff --git a/frontend/src/views/WorkspaceView.vue b/frontend/src/views/WorkspaceView.vue index a99438d..deef333 100644 --- a/frontend/src/views/WorkspaceView.vue +++ b/frontend/src/views/WorkspaceView.vue @@ -79,7 +79,10 @@ watch( watch( () => chatStore.streaming, (s) => { - if (!s) processedCount.value = 0; + if (!s) { + processedCount.value = 0; + scrollToBottom(); + } } ); diff --git a/src/fabledassistant/app.py b/src/fabledassistant/app.py index 26a71d1..25e5cfa 100644 --- a/src/fabledassistant/app.py +++ b/src/fabledassistant/app.py @@ -74,7 +74,13 @@ def create_app() -> Quart: async def after_request(response): duration = time.monotonic() - getattr(g, "request_start", time.monotonic()) duration_ms = round(duration * 1000, 1) - logger.info( + # Downgrade noisy high-frequency / static paths to DEBUG + _quiet = ( + request.path in {"/api/health", "/api/chat/status"} + or request.path.startswith(("/static/", "/assets/", "/sw.js", "/manifest.json")) + ) + log_fn = logger.debug if _quiet else logger.info + log_fn( "%s %s %s %.1fms", request.method, request.path, diff --git a/src/fabledassistant/services/push.py b/src/fabledassistant/services/push.py index be2619a..c67f3bb 100644 --- a/src/fabledassistant/services/push.py +++ b/src/fabledassistant/services/push.py @@ -23,8 +23,8 @@ _VAPID_KEYS_FILE = Path(Config.IMAGE_CACHE_DIR).parent / "vapid_keys.json" def _get_webpush(): """Lazy import to avoid startup errors if pywebpush is not installed.""" try: - from pywebpush import WebPusher - return WebPusher + from pywebpush import webpush + return webpush except ImportError: return None @@ -156,8 +156,8 @@ async def send_push_notification( logger.debug("VAPID not configured, skipping push notification") return - WebPusher = _get_webpush() - if WebPusher is None: + webpush = _get_webpush() + if webpush is None: logger.warning("pywebpush not installed, cannot send push notifications") return @@ -182,7 +182,8 @@ async def send_push_notification( "endpoint": sub.endpoint, "keys": {"p256dh": sub.p256dh, "auth": sub.auth}, } - response = WebPusher(subscription_info).send( + response = webpush( + subscription_info=subscription_info, data=payload, vapid_private_key=Config.VAPID_PRIVATE_KEY, vapid_claims=vapid_claims,