Replace the async NATS pub/sub chain after step 4 (detection + tracking + categorization) with synchronous gRPC calls using Dapr Service Invocation. The detection-agent becomes the orchestrator: it invokes downstream agents via gRPC, waits for responses, aggregates all enrichment results into a single AnnotatedImage, and publishes one final message per frame to NATS for persistence.
Steps 1-4 remain unchanged (NATS ingestion -> YOLO -> ByteTrack -> categorize). NATS is also retained at the output edge for persistence fan-out.