diff --git a/src/tracker/api/tasks.py b/src/tracker/api/tasks.py index fdcd3b9..1b4eb84 100644 --- a/src/tracker/api/tasks.py +++ b/src/tracker/api/tasks.py @@ -142,9 +142,12 @@ async def _system_message( attachments=[], created_at=task_msg.created_at.isoformat() if task_msg.created_at else datetime.datetime.now(datetime.timezone.utc).isoformat(), ) - await manager.broadcast_all( - {"type": WSEventType.MESSAGE_NEW, "data": task_msg_out.model_dump()}, - exclude_slug="system", + # Broadcast task comment via broadcast_message (applies agent filtering: @mention check) + project_id = str(task.project_id) + await manager.broadcast_message( + project_id, + task_msg_out.model_dump(), + author_slug="system", ) # Broadcast chat message diff --git a/src/tracker/ws/handler.py b/src/tracker/ws/handler.py index c46cf5a..ad25a65 100644 --- a/src/tracker/ws/handler.py +++ b/src/tracker/ws/handler.py @@ -351,12 +351,15 @@ async def _handle_chat_send(session_id: str, data: dict): async def _handle_agent_stream(session_id: str, event_type: str, data: dict): """Relay agent streaming events to project subscribers.""" + logger.info("STREAM event: %s data=%s", event_type, str(data)[:200]) client = manager.sessions.get(session_id) if not client: + logger.warning("STREAM: no client for session %s", session_id[:8]) return # Only agents can stream if client.member_type != MemberType.AGENT: + logger.warning("STREAM: non-agent %s tried to stream", client.member_slug) return # Determine project_id from chat_id or task_id in the data