The JobContext for this run; use it to reach the running session and
the room.
The run job (one scenario) behind this session, likewise available up front.
How the simulated user interacts with the agent (text chat or audio). Unspecified is treated as text, since simulations predating the field were all text-only.
The run, or undefined before the simulation ends.
Carries only its id today, so every other field reads as its protobuf
default rather than the run's real state. Prefer SimulationContext.simulationRunId,
which is the same ID and is available from the entrypoint.
The run this session belongs to. Available as soon as the entrypoint runs, unlike SimulationContext.simulationRun, which the framework only fills in at the end.
The simulator's verdict (its LLM judgment of the conversation). Read-only; recorded alongside your userVerdict.
Only available once the simulation has ended, i.e. inside
onSimulationEnd. Throws if accessed earlier (e.g. from the entrypoint).
Your veto set via fail, or undefined if you didn't veto the run.
Veto this run from your own checks (e.g. final DB state diverged).
The effective result is the AND of both verdicts, so this can only fail a run the simulator passed, never rescue one. The simulator's verdict is still reported. The last call wins if you call fail more than once.
The scenario's userdata decoded from its JSON string ({} if empty).
Passed to the
onSimulationEndcallback while running under a simulation.Carries two verdicts, both recorded for the run:
scenario.userdata). The effective result is the AND of the two: your check can fail a run the simulator passed, but it can never rescue one, so there is nosuccess(); not calling fail leaves the simulator's verdict to stand.Use jobContext to reach the running session and the room.