|
|
@@ -3,6 +3,7 @@
|
|
|
from __future__ import annotations
|
|
|
|
|
|
from dataclasses import dataclass
|
|
|
+import logging
|
|
|
from types import MappingProxyType
|
|
|
from typing import Any, Callable, Mapping
|
|
|
|
|
|
@@ -21,6 +22,9 @@ from cyber_agent.core.validation import ValidationPolicy
|
|
|
from cyber_agent.tools.registry import ToolRegistry
|
|
|
|
|
|
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
+
|
|
|
+
|
|
|
@dataclass(frozen=True)
|
|
|
class ApplicationServices:
|
|
|
"""Non-serializable providers and private tool implementations."""
|
|
|
@@ -290,7 +294,13 @@ class ApplicationRuntime:
|
|
|
}
|
|
|
total = 0
|
|
|
for root_trace_id in sorted(roots):
|
|
|
- total += await self.reconcile_events(root_trace_id)
|
|
|
+ try:
|
|
|
+ total += await self.reconcile_events(root_trace_id)
|
|
|
+ except Exception:
|
|
|
+ logger.exception(
|
|
|
+ "Application event reconciliation failed for root %s",
|
|
|
+ root_trace_id,
|
|
|
+ )
|
|
|
return total
|
|
|
|
|
|
def new_run(
|