feat: Unified Messaging System — kommunikation plugin, AI/Proactive/System participants, MessageSidebar, Rich Content Renderer

Phase 1: Backend plugin kommunikation (13 files, 10 tables, REST API, WebSocket, RBAC, DMS Bridge, Participant Registry, Mini-App Registry, Search Provider)
Phase 2: AI plugins as participants (ai_assistant + ai_proactive dock as participants, heartbeat job)
Phase 3: system_notif plugin (system events → chat messages, pinned System room)
Phase 4: Frontend MessageSidebar (replaces AISidebar, same design, comm API client, WebSocket hook, commStore)
Phase 5: Rich Content Block Renderer (11 components: Markdown, HTML, Image, Audio, Video, File, ActionCard, ContactCard, MiniApp, BlockRenderer)
BasePlugin: added services property + _container in on_activate
This commit is contained in:
Agent Zero
2026-07-22 01:22:15 +02:00
parent 5980d38c66
commit cc3ac9a43d
45 changed files with 8154 additions and 113 deletions
@@ -0,0 +1,46 @@
"""System participant handler — passive participant that only reads."""
from __future__ import annotations
import logging
from typing import Any
from app.plugins.builtins.kommunikation.participant_registry import ParticipantHandler
logger = logging.getLogger(__name__)
class SystemParticipantHandler(ParticipantHandler):
"""System participant — passive, does not respond to messages.
The system participant only sends messages triggered by system events
(handled in the plugin's event handlers). It does not respond to
user messages in the chat.
"""
def __init__(self, container: Any) -> None:
self._container = container
async def on_message_received(
self,
conversation_id: Any,
message: dict[str, Any],
conversation: dict[str, Any],
mentions: list[str],
context: dict[str, Any],
) -> list[dict[str, Any]] | None:
"""System is passive — does not respond to messages.
Users can interact with action_card buttons (open, archive) which
are handled via the frontend, not via new messages.
"""
return None
def get_participant_info(self) -> dict[str, Any]:
"""Return participant metadata."""
return {
"display_name": "System",
"avatar_url": None,
"capabilities": ["notifications", "action_cards"],
"description": "System-Benachrichtigungen",
}