{"ok":true,"site":{"host":"relay-emergency-training.slion.chatgpt.site","url":"https://relay-emergency-training.slion.chatgpt.site/","type":"live","desc":"Relay","tools":[{"name":"get_exercise_brief","kind":"answer","impl":"imperative","description":"Read the synthetic scenario, learner role, director rules, fact catalogue, and safety boundary. Call once before directing the exercise. Do not present hidden facts to the learner unless a later tool validates their release.","title":"Get adaptive exercise brief","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"wait_for_learner_event","kind":"act","impl":"imperative","description":"Wait for a learner operation or authored scenario event using one cancellable subscription. Events resolve immediately. An idle call returns reason keepalive after 15 seconds, before the browser transport deadline: immediately call again with the SAME afterEventCursor, without observing or intervening. No repeated scene scan. A new wait supersedes the previous one. Stop on cancelled, superseded, or non-live phase.","title":"Wait for the next exercise event","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"afterEventCursor":{"type":"integer","minimum":0,"maximum":10000}},"required":["afterEventCursor"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"start_training_session","kind":"act","impl":"imperative","description":"Start the continuous synthetic exercise at foundation or advanced difficulty. Use only while the page is in briefing phase. This does not perform any real-world action.","title":"Start training session","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"difficulty":{"type":"string","enum":["foundation","advanced"]},"idempotencyKey":{"type":"string","minLength":8,"maxLength":96}},"required":["difficulty","idempotencyKey"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"observe_exercise_state","kind":"answer","impl":"imperative","description":"Read the exact learner-visible world, recent decisions, incoming reports, director pacing, and current stateVersion. Call after every learner decision and immediately before any state-changing director tool. Do not infer facts that are not returned.","title":"Observe live exercise state","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"recentItems":{"type":"integer","minimum":1,"maximum":10}},"required":["recentItems"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_valid_complications","kind":"answer","impl":"imperative","description":"Return only authored complications that are currently compatible with time, pressure, cooldown, learner actions, and world state. Call immediately before inject_complication and use an ID from this exact stateVersion.","title":"List valid complications","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"inject_complication","kind":"act","impl":"imperative","description":"Apply exactly one complication returned by list_valid_complications for the same stateVersion. The deterministic engine revalidates it and rejects stale, incompatible, repeated, or too-frequent interventions.","title":"Inject validated complication","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"complicationId":{"type":"string","enum":["stair-a-uncertain","mobility-assistance-request","communications-congestion","missing-contractor","smoke-spread-floor-8","conflicting-floor-report"]},"rationale":{"type":"string","minLength":12,"maxLength":240},"expectedStateVersion":{"type":"integer","minimum":1},"idempotencyKey":{"type":"string","minLength":8,"maxLength":96}},"required":["complicationId","rationale","expectedStateVersion","idempotencyKey"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"deliver_role_message","kind":"act","impl":"imperative","description":"Speak as one synthetic scenario actor. Every message must cite one to three versioned fact IDs, and the selected actor must be authorized for each fact. Never add facts, diagnoses, tactics, or real-world instructions in free text.","title":"Deliver grounded role message","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"actorId":{"type":"string","enum":["security-desk","floor-warden-7","floor-warden-8","facilities","responder-liaison"]},"content":{"type":"string","minLength":8,"maxLength":240},"factIds":{"type":"array","minItems":1,"maxItems":3,"uniqueItems":true,"items":{"type":"string"}},"expectedStateVersion":{"type":"integer","minimum":1},"idempotencyKey":{"type":"string","minLength":8,"maxLength":96}},"required":["actorId","content","factIds","expectedStateVersion","idempotencyKey"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"advance_exercise_time","kind":"act","impl":"imperative","description":"Fast-forward the synthetic clock by 15 to 180 seconds for demonstration or pacing. This does not create a round and does not inject an event. Use sparingly; normal sessions advance continuously in the page.","title":"Advance synthetic exercise time","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"seconds":{"type":"integer","minimum":15,"maximum":180},"expectedStateVersion":{"type":"integer","minimum":1},"idempotencyKey":{"type":"string","minLength":8,"maxLength":96}},"required":["seconds","expectedStateVersion","idempotencyKey"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_director_pace","kind":"act","impl":"imperative","description":"Adjust adaptive pressure from 1 to 5 and minimum intervention cooldown from 20 to 180 seconds. This changes pacing only; it cannot bypass scenario validation.","title":"Set director pace","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"pressure":{"type":"integer","minimum":1,"maximum":5},"minimumCooldownSeconds":{"type":"integer","minimum":20,"maximum":180},"expectedStateVersion":{"type":"integer","minimum":1},"idempotencyKey":{"type":"string","minLength":8,"maxLength":96}},"required":["pressure","minimumCooldownSeconds","expectedStateVersion","idempotencyKey"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"record_assessment_observation","kind":"act","impl":"imperative","description":"Record one formative observation tied to one to five existing learner decision IDs. This is evidence for debriefing, not a hidden final grade. Do not cite messages or inferred actions as learner decisions.","title":"Record evidence-grounded observation","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"competencyId":{"type":"string","enum":["sensemaking","prioritization","communication","accountability","adaptability"]},"signal":{"type":"string","enum":["strength","watch","gap"]},"note":{"type":"string","minLength":8,"maxLength":260},"learnerActionIds":{"type":"array","minItems":1,"maxItems":5,"uniqueItems":true,"items":{"type":"string"}},"expectedStateVersion":{"type":"integer","minimum":1},"idempotencyKey":{"type":"string","minLength":8,"maxLength":96}},"required":["competencyId","signal","note","learnerActionIds","expectedStateVersion","idempotencyKey"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"finish_training_session","kind":"act","impl":"imperative","description":"End the synthetic exercise only after at least two learner decisions and one validated complication. This freezes the live clock and unlocks the evidence-based review.","title":"Finish training session","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"expectedStateVersion":{"type":"integer","minimum":1},"idempotencyKey":{"type":"string","minLength":8,"maxLength":96}},"required":["expectedStateVersion","idempotencyKey"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_after_action_review","kind":"answer","impl":"imperative","description":"Generate a deterministic review from the exact decision, complication, observation, and audit records. Never add events or claims that are absent from the returned evidence.","title":"Get evidence-based review","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Health & Education","favicon":"/favicons/relay-emergency-training.slion.chatgpt.site.png","apiSurface":"spec","toolCount":12}}