{"session_create":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/session-create.json","title":"session-create","type":"object","required":["schema_version","prompt"],"properties":{"schema_version":{"type":"integer","const":1},"prompt":{"type":"string","minLength":1},"runner_name":{"type":"string","maxLength":32,"pattern":"^[^\\x00-\\x1f\\x7f]*$"},"email":{"type":"string","maxLength":254,"pattern":"^(?:$|[^\\s@]+@[^\\s@]+\\.[^\\s@]+)$"},"model":{"type":"string","maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$"},"email_run_video":{"type":"boolean","default":false},"public_conversation":{"type":["object","null"],"additionalProperties":false,"required":["messages"],"properties":{"model":{"type":"string","minLength":1,"maxLength":80},"messages":{"type":"array","maxItems":64,"items":{"type":"object","additionalProperties":false,"required":["role","content"],"properties":{"role":{"enum":["user","assistant","tool","system","developer"]},"content":{"type":"string","minLength":1,"maxLength":8000}}}}}},"run_duration_s":{"type":"integer","minimum":60,"maximum":1200,"default":300},"provider":{"type":"string","enum":["","dream","dream_flash"]},"robot_id":{"type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$","default":"yam-1"}},"additionalProperties":false,"allOf":[{"if":{"required":["provider"],"properties":{"provider":{"enum":["dream","dream_flash"]}}},"then":{"properties":{"run_duration_s":{"maximum":1200}}},"else":{"properties":{"run_duration_s":{"maximum":600}}}}]},"session_created":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/session-created.json","title":"session-created","type":"object","required":["schema_version","session_id","status","position","episode_id","events_url","session_capability"],"properties":{"schema_version":{"type":"integer","const":1},"session_id":{"type":"string","minLength":1},"status":{"type":"string","enum":["queued","preparing","running","complete","resetting","stopped","timed_out","disconnected","safety_aborted"]},"position":{"type":["integer","null"],"minimum":1},"episode_id":{"type":["string","null"]},"lease_id":{"type":["string","null"]},"lease_expires_at":{"type":["number","null"],"minimum":0},"latest_observation_step":{"type":["integer","null"],"minimum":0},"events_url":{"type":"string","minLength":1},"session_capability":{"type":"string","minLength":32},"robot_id":{"type":"string"},"active_trajectory":{"type":["object","null"],"required":["trajectory_id","state","first_step_id","last_step_id","waypoint_count","progress_count","last_progress_step_id","final_observation_received","dispatched_at"],"properties":{"trajectory_id":{"type":"string","minLength":1},"state":{"type":"string","enum":["dispatched","accepted"]},"first_step_id":{"type":"integer","minimum":0,"maximum":12299},"last_step_id":{"type":"integer","minimum":0,"maximum":12299},"waypoint_count":{"type":"integer","minimum":1,"maximum":300},"progress_count":{"type":"integer","minimum":0,"maximum":300},"last_progress_step_id":{"type":["integer","null"],"minimum":0,"maximum":12299},"final_observation_received":{"type":"boolean"},"dispatched_at":{"type":"number","minimum":0}},"additionalProperties":false}},"additionalProperties":false},"queue_snapshot":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/queue-snapshot.json","title":"queue-snapshot","type":"object","required":["schema_version","type","generated_at","entries","stations"],"properties":{"schema_version":{"type":"integer","const":1},"type":{"type":"string","const":"queue_snapshot"},"public_run":{"type":["object","null"]},"robot_id":{"type":["string","null"]},"generated_at":{"type":"number","minimum":0},"entries":{"type":"array","items":{"type":"object","required":["position","session_id","status","created_at"],"properties":{"position":{"type":"integer","minimum":1},"robot_id":{"type":"string"},"session_id":{"type":"string","minLength":1},"status":{"type":"string","const":"queued"},"created_at":{"type":"number","minimum":0}},"additionalProperties":false}},"stations":{"type":"array","items":{"type":"object","required":["jetson_id","connected","available","source","mode","observed_at"],"properties":{"jetson_id":{"type":"string","minLength":1},"connected":{"type":"boolean"},"available":{"type":"boolean"},"queue_ready":{"type":"boolean"},"fault_notification":{"enum":[null,"pending","submitted","failed","unavailable"]},"source":{"type":["string","null"],"enum":["simulation","hardware",null]},"mode":{"type":["string","null"]},"observed_at":{"type":["number","null"],"minimum":0}},"additionalProperties":false}}},"additionalProperties":false},"observation":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/observation.json","title":"observation","type":"object","required":["schema_version","session_id","episode_id","lease_id","step_id","observed_at","left_joints_deg","right_joints_deg","images"],"properties":{"schema_version":{"type":"integer","const":1},"session_id":{"type":"string","minLength":1},"episode_id":{"type":"string","minLength":1},"lease_id":{"type":"string","minLength":1},"step_id":{"type":"integer","minimum":0},"observed_at":{"type":"number","minimum":0},"homed":{"type":"boolean"},"settled":{"type":"boolean"},"left_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"right_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"left_gripper":{"type":["number","null"],"minimum":0,"maximum":1},"right_gripper":{"type":["number","null"],"minimum":0,"maximum":1},"images":{"type":"object","maxProperties":32,"propertyNames":{"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$"},"additionalProperties":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false}}},"additionalProperties":false},"observation_page":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/observation-page.json","title":"observation-page","type":"object","required":["schema_version","session_id","episode_id","lease_id","after_step_id","next_after_step_id","has_more","observations"],"properties":{"schema_version":{"type":"integer","const":1},"session_id":{"type":"string","minLength":1},"episode_id":{"type":["string","null"]},"lease_id":{"type":["string","null"]},"after_step_id":{"type":"integer","minimum":-1},"next_after_step_id":{"type":"integer","minimum":-1},"has_more":{"type":"boolean"},"observations":{"type":"array","items":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/observation.json","title":"observation","type":"object","required":["schema_version","session_id","episode_id","lease_id","step_id","observed_at","left_joints_deg","right_joints_deg","images"],"properties":{"schema_version":{"type":"integer","const":1},"session_id":{"type":"string","minLength":1},"episode_id":{"type":"string","minLength":1},"lease_id":{"type":"string","minLength":1},"step_id":{"type":"integer","minimum":0},"observed_at":{"type":"number","minimum":0},"homed":{"type":"boolean"},"settled":{"type":"boolean"},"left_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"right_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"left_gripper":{"type":["number","null"],"minimum":0,"maximum":1},"right_gripper":{"type":["number","null"],"minimum":0,"maximum":1},"images":{"type":"object","maxProperties":32,"propertyNames":{"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$"},"additionalProperties":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false}}},"additionalProperties":false}}},"additionalProperties":false},"station_status":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/station-status.json","title":"station-status","type":"object","required":["schema_version","type","jetson_id","source","mode","observed_at","left_joints_deg","right_joints_deg","left_gripper","right_gripper","images","safety"],"properties":{"schema_version":{"type":"integer","const":1},"type":{"type":"string","const":"station_status"},"jetson_id":{"type":"string","minLength":1},"source":{"type":"string","enum":["simulation","hardware"]},"mode":{"type":"string","minLength":1},"queue_ready":{"type":["boolean","null"]},"observed_at":{"type":"number","minimum":0},"homed":{"type":"boolean"},"settled":{"type":"boolean"},"left_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"right_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"left_gripper":{"type":["number","null"],"minimum":0,"maximum":1},"right_gripper":{"type":["number","null"],"minimum":0,"maximum":1},"images":{"type":"object","maxProperties":32,"propertyNames":{"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$"},"additionalProperties":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"safety":{"type":"object","required":["ok","estop_engaged"],"properties":{"ok":{"type":"boolean"},"estop_engaged":{"type":"boolean"},"reason":{"type":["string","null"]}},"additionalProperties":false}},"additionalProperties":false},"station_status_publish":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/station-status-publish.json","title":"station-status-publish","type":"object","required":["schema_version","type","source","mode","observed_at","left_joints_deg","right_joints_deg","left_gripper","right_gripper","images","safety"],"properties":{"schema_version":{"type":"integer","const":1},"type":{"type":"string","const":"station_status"},"source":{"type":"string","enum":["simulation","hardware"]},"mode":{"type":"string","minLength":1},"queue_ready":{"type":["boolean","null"]},"observed_at":{"type":"number","minimum":0},"homed":{"type":"boolean"},"settled":{"type":"boolean"},"left_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"right_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"left_gripper":{"type":["number","null"],"minimum":0,"maximum":1},"right_gripper":{"type":["number","null"],"minimum":0,"maximum":1},"images":{"type":"object","maxProperties":32,"propertyNames":{"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$"},"additionalProperties":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}},"additionalProperties":false}},"safety":{"type":"object","required":["ok","estop_engaged"],"properties":{"ok":{"type":"boolean"},"estop_engaged":{"type":"boolean"},"reason":{"type":["string","null"]}},"additionalProperties":false}},"additionalProperties":false},"joint_trajectory_request":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/joint-trajectory-request.json","title":"joint-trajectory-request","type":"object","required":["schema_version","episode_id","lease_id","trajectory_id","cadence_hz","waypoints"],"properties":{"schema_version":{"type":"integer","const":1},"episode_id":{"type":"string","minLength":1},"lease_id":{"type":"string","minLength":1},"trajectory_id":{"type":"string","minLength":1},"cadence_hz":{"type":"number","const":10.0},"waypoints":{"type":"array","minItems":1,"maxItems":300,"items":{"type":"object","required":["step_id","left_joints_deg","right_joints_deg"],"properties":{"step_id":{"type":"integer","minimum":0,"maximum":12299},"left_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"right_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"left_gripper":{"type":"number","minimum":0,"maximum":1},"right_gripper":{"type":"number","minimum":0,"maximum":1}},"additionalProperties":false}}},"additionalProperties":false},"joint_trajectory":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/joint-trajectory.json","title":"joint-trajectory","type":"object","required":["schema_version","episode_id","lease_id","trajectory_id","cadence_hz","waypoints","type","session_id","dispatched_at"],"properties":{"schema_version":{"type":"integer","const":1},"episode_id":{"type":"string","minLength":1},"lease_id":{"type":"string","minLength":1},"trajectory_id":{"type":"string","minLength":1},"cadence_hz":{"type":"number","const":10.0},"waypoints":{"type":"array","minItems":1,"maxItems":300,"items":{"type":"object","required":["step_id","left_joints_deg","right_joints_deg"],"properties":{"step_id":{"type":"integer","minimum":0,"maximum":12299},"left_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"right_joints_deg":{"type":"array","minItems":0,"maxItems":128,"items":{"type":"number"}},"left_gripper":{"type":"number","minimum":0,"maximum":1},"right_gripper":{"type":"number","minimum":0,"maximum":1}},"additionalProperties":false}},"type":{"type":"string","const":"joint_trajectory"},"session_id":{"type":"string","minLength":1},"dispatched_at":{"type":"number","minimum":0}},"additionalProperties":false},"trajectory_dispatch_ack":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/trajectory-dispatch-ack.json","title":"trajectory-dispatch-ack","type":"object","required":["schema_version","accepted","duplicate","session_id","episode_id","lease_id","trajectory_id","first_step_id","last_step_id","waypoint_count","dispatched_at"],"properties":{"schema_version":{"type":"integer","const":1},"accepted":{"type":"boolean","const":true},"duplicate":{"type":"boolean"},"session_id":{"type":"string","minLength":1},"episode_id":{"type":"string","minLength":1},"lease_id":{"type":"string","minLength":1},"trajectory_id":{"type":"string","minLength":1},"first_step_id":{"type":"integer","minimum":0,"maximum":12299},"last_step_id":{"type":"integer","minimum":0,"maximum":12299},"waypoint_count":{"type":"integer","minimum":1,"maximum":300},"dispatched_at":{"type":"number","minimum":0}},"additionalProperties":false},"trajectory_progress":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/trajectory-progress.json","title":"trajectory-progress","type":"object","required":["schema_version","type","session_id","episode_id","lease_id","trajectory_id","step_id","executed_at"],"properties":{"schema_version":{"type":"integer","const":1},"type":{"type":"string","const":"trajectory_progress"},"session_id":{"type":"string","minLength":1},"episode_id":{"type":"string","minLength":1},"lease_id":{"type":"string","minLength":1},"trajectory_id":{"type":"string","minLength":1},"step_id":{"type":"integer","minimum":0,"maximum":12299},"executed_at":{"type":"number","minimum":0}},"additionalProperties":false},"trajectory_result":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/trajectory-result.json","title":"trajectory-result","type":"object","required":["schema_version","type","session_id","episode_id","lease_id","trajectory_id","status","reported_at"],"properties":{"schema_version":{"type":"integer","const":1},"type":{"type":"string","const":"trajectory_result"},"session_id":{"type":"string","minLength":1},"episode_id":{"type":"string","minLength":1},"lease_id":{"type":"string","minLength":1},"trajectory_id":{"type":"string","minLength":1},"status":{"type":"string","enum":["accepted","rejected","completed","aborted"]},"reported_at":{"type":"number","minimum":0},"step_id":{"type":["integer","null"],"minimum":0,"maximum":12299},"code":{"type":["string","null"]},"message":{"type":["string","null"]},"details":{"type":"object","additionalProperties":true}},"additionalProperties":false},"action_result":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/action-result.json","title":"action-result","type":"object","required":["schema_version","session_id","episode_id","lease_id","step_id","command_id","status"],"properties":{"schema_version":{"type":"integer","const":1},"session_id":{"type":"string"},"episode_id":{"type":"string"},"lease_id":{"type":"string"},"step_id":{"type":"integer","minimum":0},"command_id":{"type":"string"},"status":{"type":"string","enum":["accepted","executed","rejected"]},"detail":{"type":"object","additionalProperties":true}},"additionalProperties":false},"safety_abort":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/safety-abort.json","title":"safety-abort","type":"object","required":["schema_version","type","session_id","episode_id","lease_id"],"properties":{"schema_version":{"type":"integer","const":1},"type":{"type":"string","const":"safety_abort"},"session_id":{"type":"string","minLength":1},"episode_id":{"type":"string","minLength":1},"lease_id":{"type":"string","minLength":1},"code":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$"},"message":{"type":"string","minLength":1,"maxLength":512},"reason":{"type":"string","minLength":1,"maxLength":512},"step_id":{"type":["integer","null"],"minimum":0,"maximum":12299},"observed_at":{"type":["number","null"],"minimum":0},"details":{"type":"object","maxProperties":16,"additionalProperties":true}},"additionalProperties":false,"anyOf":[{"required":["message"]},{"required":["reason"]}]},"episode_event":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/episode-event.json","title":"episode-event","type":"object","required":["schema_version","event_id","type","timestamp","session_id","payload"],"properties":{"schema_version":{"type":"integer","const":1},"event_id":{"type":"string","minLength":1},"type":{"type":"string","enum":["snapshot","queue_update","lifecycle","observation","action_result","trajectory_progress","trajectory_result","heartbeat","episode","error"]},"timestamp":{"type":"number","minimum":0},"session_id":{"type":"string","minLength":1},"episode_id":{"type":["string","null"]},"payload":{"type":"object","additionalProperties":true}},"additionalProperties":false},"error":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/error.json","title":"error","type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","status"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"integer"}},"additionalProperties":false}},"additionalProperties":false},"lifecycle_event":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/lifecycle-event.json","title":"lifecycle-event","type":"object","required":["schema_version","event_id","session_id","state","previous_state","timestamp","actor","reason"],"properties":{"schema_version":{"type":"integer","const":1},"event_id":{"type":"string"},"session_id":{"type":"string"},"episode_id":{"type":["string","null"]},"state":{"type":"string","enum":["queued","preparing","running","complete","resetting","stopped","timed_out","disconnected","safety_aborted"]},"previous_state":{"type":["string","null"],"enum":[null,"queued","preparing","running","complete","resetting","stopped","timed_out","disconnected","safety_aborted"]},"timestamp":{"type":"number","minimum":0},"actor":{"type":"string"},"reason":{"type":"string"}},"additionalProperties":false},"jetson_auth_challenge":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/jetson-auth-challenge.json","title":"jetson-auth-challenge","type":"object","required":["schema_version","type","algorithm","nonce","expires_at"],"properties":{"schema_version":{"type":"integer","const":1},"type":{"type":"string","const":"auth_challenge"},"algorithm":{"type":"string","const":"Ed25519"},"nonce":{"type":"string","minLength":32},"expires_at":{"type":"number","minimum":0}},"additionalProperties":false},"jetson_authenticate":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/jetson-authenticate.json","title":"jetson-authenticate","type":"object","required":["schema_version","type","algorithm","jetson_id","nonce","signature"],"properties":{"schema_version":{"type":"integer","const":1},"type":{"type":"string","const":"authenticate"},"algorithm":{"type":"string","const":"Ed25519"},"jetson_id":{"type":"string","minLength":1},"nonce":{"type":"string","minLength":32},"signature":{"type":"string","minLength":86}},"additionalProperties":false},"jetson_register":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://api.blupe.ai/contracts/v1/jetson-register.json","title":"jetson-register","type":"object","required":["schema_version","type","jetson_id"],"properties":{"schema_version":{"type":"integer","const":1},"type":{"type":"string","const":"register"},"jetson_id":{"type":"string","minLength":1}},"additionalProperties":false}}