fix(integration): F17 (Astra P1) — 6 Aufrufer von nicht existierender Registry.get() auf get_contract() umstellen

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.
This commit is contained in:
Agent Zero
2026-09-18 11:10:35 +02:00
parent 5169b12795
commit 8c5682f669
6 changed files with 7 additions and 7 deletions
+1 -1
View File
@@ -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')}"
+1 -1
View File
@@ -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:
@@ -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:
@@ -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
@@ -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:
+1 -1
View File
@@ -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(