from typing import Dict, Any, Optional from app.core.models import WorkerRuntimeType def make_bridge_hello(node_id: str, node_type: str, capabilities: list) -> Dict[str, Any]: return {"op": "bridge.hello", "node_id": node_id, "node_type": node_type, "capabilities": capabilities} def make_capability_advertisement(node_id: str, capabilities: list) -> Dict[str, Any]: return {"op": "capability.advertise", "node_id": node_id, "capabilities": capabilities} def make_job_offer(job_id: str, job_type: str, payload: dict, privacy_mode: str) -> Dict[str, Any]: return {"op": "job.offer", "job_id": job_id, "job_type": job_type, "payload": payload, "privacy_mode": privacy_mode} def make_job_accept(job_id: str, worker_id: str) -> Dict[str, Any]: return {"op": "job.accept", "job_id": job_id, "worker_id": worker_id} def make_job_reject(job_id: str, worker_id: str, reason: str) -> Dict[str, Any]: return {"op": "job.reject", "job_id": job_id, "worker_id": worker_id, "reason": reason} def make_job_result(job_id: str, worker_id: str, output: dict, latency_ms: int, device_signature: Optional[str] = None) -> Dict[str, Any]: return {"op": "job.result", "job_id": job_id, "worker_id": worker_id, "output": output, "latency_ms": latency_ms, "device_signature": device_signature} def make_receipt_message(receipt: dict) -> Dict[str, Any]: return {"op": "receipt.emit", "receipt": receipt} def make_agent_packet(node_id: str, packet_type: str, payload: dict) -> Dict[str, Any]: return {"op": "agent.packet", "node_id": node_id, "packet_type": packet_type, "payload": payload} def validate_bridge_message(msg: dict) -> bool: valid_ops = { "bridge.hello", "capability.advertise", "lease.create", "job.offer", "job.accept", "job.reject", "job.progress", "job.result", "receipt.emit", "agent.packet", "error", "disconnect", } return isinstance(msg, dict) and msg.get("op") in valid_ops def parse_bridge_message(msg: dict) -> tuple[str, Optional[str], dict]: return msg.get("op", ""), msg.get("node_id"), msg