feat(B-TRIG): Trigger-Kern konsolidiert — generischer Dispatcher, UI-Event-Typ, 4 Trigger-Typen
Check Cross-Plugin Imports / check (push) Has been cancelled

B-TRIG-GEN: app/core/trigger_dispatcher.py (NEU) — generischer Event→Automation Dispatcher
- Wildcard EventBus Subscribe → matcht AutomationDefinition mit trigger_type=event
- Keine hardcodierte Event-Liste mehr — alle Outbox Events können Automations triggern
- Registriert in main.py lifespan + worker.py on_startup

B-TRIG-UI: UI-Event Trigger-Typ
- trigger_type Pattern um „ui" erweitert (event/schedule/manual/ui)
- UI-Events laufen ephemeral über EventBus → TriggerDispatcher → run_automation
- UI-Events NIEMALS in Outbox (is_ui_event() Guard)

B-TRIG-CRON: Cron/Heartbeat verifiziert — bestehender Pfad funktioniert
B-TRIG-MAN: Manual-Trigger verifiziert — bestehender Pfad funktioniert

B-TRIG-TEST: 10 Tests in test_trigger_core.py — alle grün
- Domain Event, UI Event (ephemeral), Cron, Manual, alle nutzen selben Execution-Kern
B-TRIG-DOC: Plugin-Dev-Guide Kapitel 10 mit Implementierungsdetails erweitert
This commit is contained in:
Agent Zero
2026-08-13 21:04:46 +02:00
parent ae228bb484
commit 78963f2ca9
6 changed files with 963 additions and 26 deletions
+2 -2
View File
@@ -71,7 +71,7 @@ class AutomationDefinitionCreate(BaseModel):
name: str = Field(..., min_length=1, max_length=120)
description: str = Field(default="", max_length=500)
trigger_type: str = Field(default="manual", pattern="^(event|schedule|manual)$")
trigger_type: str = Field(default="manual", pattern="^(event|schedule|manual|ui)$")
trigger_config: dict[str, Any] = Field(default_factory=dict)
conditions: list[dict[str, Any]] = Field(default_factory=list)
actions: list[dict[str, Any]] = Field(default_factory=list)
@@ -84,7 +84,7 @@ class AutomationDefinitionUpdate(BaseModel):
name: str | None = Field(None, max_length=120)
description: str | None = Field(None, max_length=500)
trigger_type: str | None = Field(None, pattern="^(event|schedule|manual)$")
trigger_type: str | None = Field(None, pattern="^(event|schedule|manual|ui)$")
trigger_config: dict[str, Any] | None = None
conditions: list[dict[str, Any]] | None = None
actions: list[dict[str, Any]] | None = None