Fix: task system messages use broadcast_message (not broadcast_all)
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s

broadcast_all bypasses agent filtering (system message @mention check),
so agents received ALL task lifecycle messages and processed them as
new requests, causing duplicate task creation.
This commit is contained in:
markov 2026-02-27 07:59:53 +01:00
parent c2c595224c
commit f20da3685d
2 changed files with 9 additions and 3 deletions

View File

@ -142,9 +142,12 @@ async def _system_message(
attachments=[], attachments=[],
created_at=task_msg.created_at.isoformat() if task_msg.created_at else datetime.datetime.now(datetime.timezone.utc).isoformat(), created_at=task_msg.created_at.isoformat() if task_msg.created_at else datetime.datetime.now(datetime.timezone.utc).isoformat(),
) )
await manager.broadcast_all( # Broadcast task comment via broadcast_message (applies agent filtering: @mention check)
{"type": WSEventType.MESSAGE_NEW, "data": task_msg_out.model_dump()}, project_id = str(task.project_id)
exclude_slug="system", await manager.broadcast_message(
project_id,
task_msg_out.model_dump(),
author_slug="system",
) )
# Broadcast chat message # Broadcast chat message

View File

@ -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): async def _handle_agent_stream(session_id: str, event_type: str, data: dict):
"""Relay agent streaming events to project subscribers.""" """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) client = manager.sessions.get(session_id)
if not client: if not client:
logger.warning("STREAM: no client for session %s", session_id[:8])
return return
# Only agents can stream # Only agents can stream
if client.member_type != MemberType.AGENT: if client.member_type != MemberType.AGENT:
logger.warning("STREAM: non-agent %s tried to stream", client.member_slug)
return return
# Determine project_id from chat_id or task_id in the data # Determine project_id from chat_id or task_id in the data