From 8c5682f669df220a8d123aa926865ff5400b9317 Mon Sep 17 00:00:00 2001 From: Agent Zero Date: Fri, 18 Sep 2026 11:10:35 +0200 Subject: [PATCH] =?UTF-8?q?fix(integration):=20F17=20(Astra=20P1)=20?= =?UTF-8?q?=E2=80=94=206=20Aufrufer=20von=20nicht=20existierender=20Regist?= =?UTF-8?q?ry.get()=20auf=20get=5Fcontract()=20umstellen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vorher: ContractRegistry besitzt get_contract(), aber 6 Produktionsstellen riefen get_contract_registry().get(...) auf → AttributeError. Betroffen: Agenten-/Workflow-Kommunikation (Nachrichten an Raeume), Miniapp-Tools, proaktive KI-Hinweise und Report-Jobs — teils nur geloggt, erwartete Nachrichten/Ergebnisse fehlten STILL. Fix: Alle 6 Aufrufer auf die echte Methode get_contract() umgestellt (Astra-Empfehlung: Aufrufer fixen statt Alias — die Registry ist kein dict, ein get()-Alias haette die Fehlersuche kaschiert): - automation/agent_runner.py (Kommunikations-Raum) - report_generator/jobs.py (DMS-Contract) - ai_proactive/services.py (Kommunikations-Raum) - workflows/engine.py (Kommunikations-Raum) - ai/miniapp_tools.py (Kommunikations-Contract) - ai/agent_loop.py (Approval-Posting) + N806 noqa am pre-existing Mail-Klassenalias Abnahme (Astra): Betroffene Funktionen laufen jetzt auf die echte Registry-Methode — persistierende Aufrufketten durch die bestehenden Miniapp-/Workflow-Suites abgedeckt (67/67). Tests: test_agent_loop + test_phase_g_workflows + test_m4_system_miniapps 67/67. ruff clean. --- app/ai/agent_loop.py | 2 +- app/ai/miniapp_tools.py | 2 +- app/plugins/builtins/ai_proactive/services.py | 2 +- app/plugins/builtins/automation/agent_runner.py | 4 ++-- app/plugins/builtins/report_generator/jobs.py | 2 +- app/workflows/engine.py | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/ai/agent_loop.py b/app/ai/agent_loop.py index c9cf5bb..c3c3197 100644 --- a/app/ai/agent_loop.py +++ b/app/ai/agent_loop.py @@ -495,7 +495,7 @@ async def run_react_loop( if agent_run_id: try: from app.plugins.builtins.contracts import get_contract_registry - komm = get_contract_registry().get("kommunikation") + komm = get_contract_registry().get_contract("kommunikation") if komm: agent_id = getattr(agent_definition, "id", uuid.uuid4()) room_title = f"Agent: {getattr(agent_definition, 'name', 'Agent')}" diff --git a/app/ai/miniapp_tools.py b/app/ai/miniapp_tools.py index 2dcf6dc..6fd1e9e 100644 --- a/app/ai/miniapp_tools.py +++ b/app/ai/miniapp_tools.py @@ -23,7 +23,7 @@ def _get_komm_contract() -> Any | None: """Resolve the kommunikation contract (None when plugin inactive).""" from app.plugins.builtins.contracts import get_contract_registry - return get_contract_registry().get("kommunikation") + return get_contract_registry().get_contract("kommunikation") async def _send_miniapp_handler(arguments: dict[str, Any], context: dict[str, Any]) -> str: diff --git a/app/plugins/builtins/ai_proactive/services.py b/app/plugins/builtins/ai_proactive/services.py index 486a964..7dd2881 100644 --- a/app/plugins/builtins/ai_proactive/services.py +++ b/app/plugins/builtins/ai_proactive/services.py @@ -75,7 +75,7 @@ async def push_suggestion(user_id: str, suggestion: dict[str, Any]) -> None: from app.core.db import get_worker_session_factory from app.plugins.builtins.contracts import get_contract_registry from app.plugins.builtins.kommunikation.models import CommConversation - komm = get_contract_registry().get("kommunikation") + komm = get_contract_registry().get_contract("kommunikation") if komm: factory = get_worker_session_factory() async with factory() as db: diff --git a/app/plugins/builtins/automation/agent_runner.py b/app/plugins/builtins/automation/agent_runner.py index 41af1d6..642ef5b 100644 --- a/app/plugins/builtins/automation/agent_runner.py +++ b/app/plugins/builtins/automation/agent_runner.py @@ -113,7 +113,7 @@ async def run_agent( mail_contract = get_contract("mail") if mail_contract and hasattr(mail_contract, "Mail"): from sqlalchemy import select as _select - Mail = mail_contract.Mail + Mail = mail_contract.Mail # noqa: N806 — class alias async with factory() as db: mail_q = await db.execute( _select(Mail) @@ -378,7 +378,7 @@ async def run_agent( # ── Post agent result to Communication (F-COMM) ── try: from app.plugins.builtins.contracts import get_contract_registry - komm = get_contract_registry().get("kommunikation") + komm = get_contract_registry().get_contract("kommunikation") if komm: async with factory() as db: # Find or create agent conversation room via contract diff --git a/app/plugins/builtins/report_generator/jobs.py b/app/plugins/builtins/report_generator/jobs.py index 6110422..1fdf95d 100644 --- a/app/plugins/builtins/report_generator/jobs.py +++ b/app/plugins/builtins/report_generator/jobs.py @@ -77,7 +77,7 @@ async def generate_report_job( import hashlib from app.plugins.builtins.contracts import get_contract_registry - _dms_contract = get_contract_registry().get("dms") + _dms_contract = get_contract_registry().get_contract("dms") dms_file = _dms_contract.dms_file async with create_db_session() as db: diff --git a/app/workflows/engine.py b/app/workflows/engine.py index 217ba3b..78e1494 100644 --- a/app/workflows/engine.py +++ b/app/workflows/engine.py @@ -92,7 +92,7 @@ class WorkflowEngine: # Post workflow completion to Communication (G-WORK) try: from app.plugins.builtins.contracts import get_contract_registry - komm = get_contract_registry().get("kommunikation") + komm = get_contract_registry().get_contract("kommunikation") if komm and instance.initiated_by: room_title = f"Workflow: {workflow.name if hasattr(workflow, 'name') else str(instance.workflow_id)}" conv_id = await komm.find_locked_room_id(