GitHub Actions
fix: 0 test failures; FileService; real RagService; emergency probe; chat return
4aaae80
Raw
History Blame
1.67 kB
from __future__ import annotations
import time
class DeliveryManager:
"""Decides direct vs store-and-forward delivery."""
def __init__(self, bus=None, our_node_id: str = ""):
self._bus = bus
self._our_node_id = our_node_id
self._queued: list[dict] = [] # store-and-forward queue
async def deliver(self, message: dict, recipient_node_id: str) -> str:
"""Try direct delivery. Returns 'direct', 'queued', or 'self'."""
if recipient_node_id == self._our_node_id:
return "self"
if self._bus is not None:
try:
from hearthnet.bus.capability import RouteRequest
req = RouteRequest(
capability="chat.send",
version_req=(1, 0),
body={"input": message},
caller=self._our_node_id,
trace_id="",
)
entry = self._bus.router.route(req)
if entry and entry.node_id == recipient_node_id and not entry.is_local:
return "direct"
except Exception:
pass
# Store-and-forward
self._queued.append(
{
"message": message,
"to": recipient_node_id,
"queued_at": time.time(),
}
)
return "queued"
def get_queued(self, node_id: str) -> list[dict]:
return [q for q in self._queued if q["to"] == node_id]
def acknowledge(self, message_event_id: str) -> None:
self._queued = [q for q in self._queued if q["message"].get("event_id") != message_event_id]