The scheduled-bridge runner — a documented host hook (mirroring the engine janitor's
AIBridgeEngine.ReconcileOrphans) that starts Scheduled bridges when their time arrives.
Each pass it loads every AIAgentSessionBridge with Status='Scheduled' and
ScheduledStartTime <= now, resolves each one's provider, asks the host's
ScheduledBridgeSessionFactory to build the start params (the host constructs the
IRealtimeSession — the runner never does), and calls AIBridgeEngine.StartBridgeSession.
Properties (per spec):
No timer. Only RunDueBridges is exposed; the host schedules the cadence (e.g. every
30s), exactly like the janitor.
Idempotent.StartBridgeSession transitions the row off Scheduled (to Connecting →
Connected, or Failed), so the next pass no longer sees it. A factory that declines leaves the
row Scheduled for a later pass, never double-starting.
Clean seam. The runner constructs no realtime session; that stays the host's job.
Tolerant. A per-bridge failure is captured in the result and the pass continues.
Runs one pass: finds due scheduled bridges and starts each through the engine. Never throws — a
per-bridge failure is recorded in the returned ScheduledRunResult and the pass proceeds.
The scheduled-bridge runner — a documented host hook (mirroring the engine janitor's AIBridgeEngine.ReconcileOrphans) that starts
Scheduledbridges when their time arrives.Each pass it loads every
AIAgentSessionBridgewithStatus='Scheduled'andScheduledStartTime <= now, resolves each one's provider, asks the host's ScheduledBridgeSessionFactory to build the start params (the host constructs theIRealtimeSession— the runner never does), and calls AIBridgeEngine.StartBridgeSession.Properties (per spec):
StartBridgeSessiontransitions the row offScheduled(toConnecting→Connected, orFailed), so the next pass no longer sees it. A factory that declines leaves the rowScheduledfor a later pass, never double-starting.See
/plans/realtime/realtime-bridges-architecture.md§5 / §7 (Scheduled join + lifecycle).