npm run viewer:build.| POST/demo | Create sim + start continuous demo loop |
| POST/sim/create | New single-car sim (optional {"spawn":"blue_0"}) |
| POST/sim/:id/step | Single physics tick |
| POST/sim/:id/command | Timed command sequence (streams via WS) |
| GET /sim/:id/frames | Full frame log |
| GET /sim/:id/summary | Compact experiment summary (use this, not /frames) |
| GET /sim/:id/metric/:field | Single-field series summary |
| GET /sim | List all active instances |
| WS /sim/:id/stream | Live frame stream |
| WS /events/stream | Global viewer event bus (sim_created broadcasts) |
| POST/match/create | Multi-car match instance |
| GET /constants | All numeric physics constants |
| GET /config | Server config (compute service URL, port) |