roborama 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/data.ts","../src/stats.ts","../src/mock.ts","../src/client.ts"],"sourcesContent":["/**\n * roborama — real robots as an API.\n *\n * ```ts\n * import Roborama from \"roborama\"; // reads ROBORAMA_API_KEY\n *\n * const roborama = new Roborama();\n * const run = await roborama.runs.create({\n * robot: \"g1-edu-pro@fw2.3\",\n * environment: \"kitchen-std@v1.2\",\n * task: \"pick_place@v1\",\n * episodes: \"auto(ci=0.95, moe=0.03)\",\n * });\n * console.log(await run.result()); // n=612 rate=0.874 ci95=(0.846, 0.898)\n * ```\n *\n * Hosted execution is in private preview. Set `ROBORAMA_MOCK=1` (or\n * `new Roborama({ mock: true })`) to integrate today against a\n * deterministic, fixture-shaped mock backend.\n */\n\nimport { Roborama } from \"./client\";\n\nexport {\n CompareRunHandle,\n DEFAULT_BASE_URL,\n EvalRunHandle,\n KitHandle,\n MatrixRunHandle,\n Policy,\n Roborama,\n RunHandle,\n TaskHandle,\n ThresholdContractHandle,\n TransferRunHandle,\n VerifyRunHandle,\n} from \"./client\";\nexport { RoboramaError } from \"./errors\";\nexport { parseAuto, planningN, wilsonCi, zForCi } from \"./stats\";\nexport type * from \"./types\";\n\nexport default Roborama;\n","/**\n * One error class, `RoboramaError`, with a `.code` matching the fixed set at\n * https://roborama.com/docs/errors/. Switch on the code, not the message —\n * messages are for humans and may improve without notice.\n */\n\nimport type { ErrorCode, ErrorEnvelope, Result } from \"./types\";\n\nexport class RoboramaError extends Error {\n /** Machine-readable code from the documented fixed set. */\n readonly code: ErrorCode;\n /** HTTP status, when the error came off the wire. */\n readonly status?: number;\n /** Present when the error concerns a specific run. */\n readonly run_id?: string;\n /** Link to the matching entry in the error reference. */\n readonly doc_url?: string;\n /**\n * For `budget_exceeded`: honest statistics for the episodes that ran\n * before the hard stop (`n`, `success_rate`, `ci95`).\n */\n readonly partial_result?: Result;\n\n constructor(\n message: string,\n opts: {\n code: ErrorCode;\n status?: number;\n run_id?: string;\n doc_url?: string;\n partial_result?: Result;\n },\n ) {\n super(message);\n this.name = \"RoboramaError\";\n this.code = opts.code;\n this.status = opts.status;\n this.run_id = opts.run_id;\n this.doc_url = opts.doc_url;\n this.partial_result = opts.partial_result;\n }\n}\n\nexport function errorFromEnvelope(\n status: number | undefined,\n payload: Partial<ErrorEnvelope> | undefined,\n): RoboramaError {\n const err = payload?.error ?? { code: \"error\" as ErrorCode, message: \"Roborama API error\" };\n return new RoboramaError(err.message ?? \"Roborama API error\", {\n code: err.code ?? (\"error\" as ErrorCode),\n status,\n run_id: err.run_id,\n doc_url: err.doc_url,\n partial_result: err.partial_result,\n });\n}\n","// Embedded fixture data, generated from the published fixtures (fixtures/*.json).\n// Deterministic mock-mode source of truth. Do not edit by hand.\n\nexport const PRICING = {\"currency\":\"USD\",\"meters\":[{\"id\":\"robot_hours\",\"label\":\"Robot-hours\",\"unit\":\"robot-hour\",\"description\":\"Occupancy of an embodiment: metered per minute while your policy holds the cell, from first motor enable to final reset.\"},{\"id\":\"environment_hours\",\"label\":\"Environment-hours\",\"unit\":\"environment-hour\",\"description\":\"Occupancy of a versioned catalogue scene, metered per minute alongside the robot meter. Both meters appear in every quote and every result.\"}],\"billing_note\":\"Metered per minute, displayed per hour. Hours in results are rounded to 0.1 h; billing uses exact minutes. A max_budget_usd on any run is a hard stop, metered live.\",\"robot_rates\":[{\"id\":\"nori-a3\",\"class\":\"arm-pod\",\"tier\":\"soak\",\"usd_per_robot_hour\":7,\"note\":\"Commodity soak pods, 24 cells. Iterate here; escalate when the numbers hold.\"},{\"id\":\"so-101\",\"class\":\"arm-pod\",\"tier\":\"soak\",\"usd_per_robot_hour\":9,\"note\":\"Hobby-class 5-DoF pods, 16 cells. The cheapest smoke test for a policy.\"},{\"id\":\"stretch3\",\"class\":\"mobile-manipulator\",\"tier\":\"verify\",\"usd_per_robot_hour\":34,\"note\":\"Mobile manipulation, firmware-pinned.\"},{\"id\":\"fr3-bench\",\"class\":\"fixed-arm\",\"tier\":\"verify\",\"usd_per_robot_hour\":38,\"note\":\"Torque-controlled 7-DoF industrial arm on a fixed bench.\"},{\"id\":\"aloha-bimanual\",\"class\":\"bimanual\",\"tier\":\"verify\",\"usd_per_robot_hour\":52,\"note\":\"Bimanual teleop-grade rig.\"},{\"id\":\"tiago-pro\",\"class\":\"mobile-manipulator\",\"tier\":\"verify\",\"usd_per_robot_hour\":61,\"note\":\"Premium mobile manipulator; torso lift and force-torque wrists.\"},{\"id\":\"aloha2-pro\",\"class\":\"bimanual\",\"tier\":\"verify\",\"usd_per_robot_hour\":74,\"note\":\"Second-generation bimanual rig, gravity-compensated, higher payload.\"},{\"id\":\"spot-arm\",\"class\":\"quadruped-manip\",\"tier\":\"verify\",\"usd_per_robot_hour\":89,\"note\":\"Quadruped with a 6-DoF arm; uneven-floor manipulation cells.\"},{\"id\":\"g1-edu-pro\",\"class\":\"humanoid\",\"tier\":\"verify\",\"usd_per_robot_hour\":148,\"note\":\"37-DoF humanoid with dex3-1 hands; the verification-tier default.\"},{\"id\":\"g1-edu-plus\",\"class\":\"humanoid\",\"tier\":\"verify\",\"usd_per_robot_hour\":176,\"note\":\"43-DoF humanoid; limited cells.\"}],\"environment_rates\":[{\"adder_tier\":\"bare\",\"usd_per_env_hour\":12,\"examples\":[\"cell-a@v1.0\"],\"note\":\"Bare bench cell, overhead camera.\"},{\"adder_tier\":\"standard\",\"usd_per_env_hour\":24,\"examples\":[\"warehouse-std@v2.0\"],\"note\":\"Standard catalogue scene with mocap.\"},{\"adder_tier\":\"replica\",\"usd_per_env_hour\":39,\"examples\":[\"kitchen-std@v1.2\"],\"note\":\"Full replica scene, mocap + force-torque.\"},{\"adder_tier\":\"instrumented-replica\",\"usd_per_env_hour\":85,\"examples\":[\"surgical-replica@v3\"],\"note\":\"High-instrumentation replica, high-speed capture.\"}],\"priority\":[{\"id\":\"burst\",\"multiplier\":1.5,\"note\":\"Expedited queue: next available cell, both meters at 1.5×.\"},{\"id\":\"standard\",\"multiplier\":1.0,\"note\":\"Default queue.\"},{\"id\":\"soak\",\"multiplier\":0.6,\"note\":\"Off-peak, interruptible scheduling at 0.6×.\"}],\"adders\":[{\"id\":\"teleop-fallback\",\"usd_per_robot_hour\":18,\"note\":\"Human takeover on policy halt (Policy.endpoint fallback).\"},{\"id\":\"extra-instrumentation\",\"usd_per_env_hour\":12,\"note\":\"Additional mocap or high-speed capture beyond the environment's base kit.\"}],\"packages\":[{\"id\":\"suite-manip-core-v3\",\"label\":\"rbr-manip-core@v3 suite run\",\"usd\":9500,\"includes\":\"5 tasks × 300 episodes on g1-edu-pro@fw2.3; suite attestation (rbr:att: id) and the verification report.\"},{\"id\":\"threshold-contract\",\"label\":\"Outcome contract — threshold()\",\"usd\":null,\"pricing\":\"monthly_cap_usd you set\",\"includes\":\"Soak-tier iteration (e.g. nori-a3 pods) with automatic escalation to verification-tier hardware on threshold crossing; on_verified webhook; hard monthly cap.\"}],\"worked_quote\":{\"label\":\"What do 600 humanoid episodes cost?\",\"robot\":\"g1-edu-pro\",\"environment\":\"kitchen-std@v1.2\",\"episodes\":600,\"priority\":\"standard\",\"minutes_per_episode_est\":2.0,\"robot_hours\":20.0,\"env_hours\":20.0,\"robot_usd_per_hour\":148,\"env_usd_per_hour\":39,\"robot_usd\":2960,\"env_usd\":780,\"usd\":3740,\"queue_eta\":\"6h\"}};\nexport const ROBOTS = [{\"id\":\"g1-edu-pro\",\"class\":\"humanoid\",\"dof\":37,\"hands\":\"dex3-1\",\"firmwares\":[\"2.3\",\"2.4\"],\"cells\":6,\"duty_cycle_pct\":71,\"tier\":\"verify\"},{\"id\":\"g1-edu-plus\",\"class\":\"humanoid\",\"dof\":43,\"hands\":\"dex3-1\",\"firmwares\":[\"2.3\"],\"cells\":2,\"duty_cycle_pct\":64,\"tier\":\"verify\"},{\"id\":\"spot-arm\",\"class\":\"quadruped-manip\",\"dof\":19,\"hands\":\"gripper-2f\",\"firmwares\":[\"4.1\"],\"cells\":2,\"duty_cycle_pct\":60,\"tier\":\"verify\"},{\"id\":\"aloha2-pro\",\"class\":\"bimanual\",\"dof\":14,\"hands\":\"gripper-2f\",\"firmwares\":[\"1.1\"],\"cells\":2,\"duty_cycle_pct\":62,\"tier\":\"verify\"},{\"id\":\"aloha-bimanual\",\"class\":\"bimanual\",\"dof\":14,\"hands\":\"gripper-2f\",\"firmwares\":[\"3.1\"],\"cells\":3,\"duty_cycle_pct\":66,\"tier\":\"verify\"},{\"id\":\"tiago-pro\",\"class\":\"mobile-manipulator\",\"dof\":12,\"hands\":\"gripper-2f\",\"firmwares\":[\"2.0\"],\"cells\":2,\"duty_cycle_pct\":55,\"tier\":\"verify\"},{\"id\":\"stretch3\",\"class\":\"mobile-manipulator\",\"dof\":10,\"hands\":\"gripper-2f\",\"firmwares\":[\"1.9\"],\"cells\":4,\"duty_cycle_pct\":58,\"tier\":\"verify\"},{\"id\":\"fr3-bench\",\"class\":\"fixed-arm\",\"dof\":7,\"hands\":\"gripper-2f\",\"firmwares\":[\"5.2\"],\"cells\":8,\"duty_cycle_pct\":74,\"tier\":\"verify\"},{\"id\":\"nori-a3\",\"class\":\"arm-pod\",\"dof\":6,\"hands\":\"gripper-2f\",\"firmwares\":[\"1.0\"],\"cells\":24,\"duty_cycle_pct\":83,\"tier\":\"soak\"},{\"id\":\"so-101\",\"class\":\"arm-pod\",\"dof\":5,\"hands\":\"gripper-2f\",\"firmwares\":[\"1.2\"],\"cells\":16,\"duty_cycle_pct\":79,\"tier\":\"soak\"}];\nexport const ENVIRONMENTS = [{\"id\":\"cell-a\",\"rev\":\"v1.0\",\"class\":\"bench\",\"instrumentation\":[\"overhead-cam\"],\"objects\":24,\"reset\":\"scripted\",\"adder_tier\":\"bare\"},{\"id\":\"warehouse-std\",\"rev\":\"v2.0\",\"class\":\"warehouse\",\"instrumentation\":[\"mocap\"],\"objects\":388,\"reset\":\"scripted\",\"adder_tier\":\"standard\"},{\"id\":\"kitchen-std\",\"rev\":\"v1.2\",\"class\":\"kitchen\",\"instrumentation\":[\"mocap\",\"ft\"],\"objects\":214,\"reset\":\"scripted\",\"adder_tier\":\"replica\"},{\"id\":\"kitchen-replica\",\"rev\":\"v2.0\",\"class\":\"kitchen\",\"instrumentation\":[\"mocap\",\"ft\",\"scale\"],\"objects\":178,\"reset\":\"scripted\",\"adder_tier\":\"replica\"},{\"id\":\"surgical-replica\",\"rev\":\"v3\",\"class\":\"surgical\",\"instrumentation\":[\"mocap\",\"ft\",\"high-speed-cam\"],\"objects\":61,\"reset\":\"teleop-assisted\",\"adder_tier\":\"instrumented-replica\"}];\nexport const SUITES = [{\"id\":\"rbr-manip-core\",\"rev\":\"v3\",\"frozen\":\"2026-03-14\",\"scoring\":\"binary success, Wilson 95% interval\",\"episodes_per_task\":300,\"tasks\":[\"pick_place@v1\",\"load_dishwasher@v2\",\"shelf_restock@v1\",\"fold_towel@v2\",\"bin_pick@v1\"],\"environments\":[\"kitchen-std@v1.2\",\"warehouse-std@v2.0\",\"cell-a@v1.0\"],\"perturbation_rev\":\"suite-core@v3.0\",\"sample_report\":{\"robot\":\"g1-edu-pro@fw2.3\",\"overall\":{\"n\":1500,\"success_rate\":0.859,\"ci95\":[0.841,0.876]},\"per_task\":[{\"task\":\"pick_place@v1\",\"n\":300,\"success_rate\":0.903,\"ci95\":[0.865,0.932]},{\"task\":\"load_dishwasher@v2\",\"n\":300,\"success_rate\":0.873,\"ci95\":[0.831,0.906]},{\"task\":\"shelf_restock@v1\",\"n\":300,\"success_rate\":0.813,\"ci95\":[0.765,0.853]},{\"task\":\"fold_towel@v2\",\"n\":300,\"success_rate\":0.93,\"ci95\":[0.895,0.954]},{\"task\":\"bin_pick@v1\",\"n\":300,\"success_rate\":0.777,\"ci95\":[0.726,0.82]}],\"attestation\":\"rbr:att:9f3c2ab7\",\"attestation_url\":\"https://api.roborama.com/v1/attestations/rbr:att:9f3c2ab7\",\"citation\":\"Roborama Manip-Core v3, run 2026-09-04, attestation rbr:att:9f3c2ab7\"}}];\nexport const TASKS = [{\"id\":\"task_espresso_01\",\"object\":\"task\",\"name\":\"espresso\",\"rev\":\"espresso@v1\",\"status\":\"frozen\",\"visibility\":\"private\",\"created\":\"2026-08-20T09:14:02Z\",\"frozen\":\"2026-08-24T16:40:11Z\",\"signatures\":[\"acct_acme\",\"roborama\"],\"initial_conditions\":{\"machine\":{\"object\":\"kit/acme-breville\",\"pose\":\"P1\",\"tol_mm\":20},\"cup\":{\"object\":\"catalogue/cup-std-08\",\"randomize\":\"zone-A\"}},\"success_predicates\":[{\"cup_on_tray\":\"gt.pose(cup) within tray_zone\"},{\"liquid_mass\":\"scale.delta between 22 and 42 g\"},{\"no_spill\":\"vision.spill_area < 2 cm2\"},{\"t_complete\":\"episode.duration < 180 s\"}],\"instructions\":{\"sampled_per_episode\":[\"make an espresso\",\"brew me a coffee\",\"fais un espresso\"],\"held_out\":[\"prepare a single shot\"]},\"stages\":[{\"grasp_cup\":\"gt.pose(cup) in gripper\"},{\"cup_placed\":\"gt.pose(cup) within drip_zone\"},{\"extraction\":\"scale.delta > 0 within 60s\"},{\"served\":\"all success_predicates\"}],\"envelope\":{\"lighting\":[\"3000K\",\"5600K\"],\"distractors\":\"set-B\",\"out_of_scope\":[\"oat_milk\"]},\"pilot\":{\"run_id\":\"run_9088\",\"robot\":\"g1-edu-pro@fw2.3\",\"episodes\":25,\"amendments\":1}},{\"id\":\"task_latte_art_01\",\"object\":\"task\",\"name\":\"latte_art\",\"rev\":null,\"status\":\"draft\",\"visibility\":\"private\",\"created\":\"2026-08-30T11:03:44Z\",\"frozen\":null,\"signatures\":[],\"initial_conditions\":{\"machine\":{\"object\":\"kit/acme-breville\",\"pose\":\"P1\",\"tol_mm\":20},\"pitcher\":{\"object\":\"catalogue/pitcher-std-02\",\"randomize\":\"zone-A\"}},\"success_predicates\":[{\"pattern_visible\":\"vision.contrast_score > 0.6\"},{\"no_spill\":\"vision.spill_area < 2 cm2\"},{\"t_complete\":\"episode.duration < 240 s\"}],\"instructions\":{\"sampled_per_episode\":[\"pour a latte heart\",\"make latte art\"],\"held_out\":[\"draw a heart in the milk\"]},\"stages\":[{\"steam_milk\":\"audio.steam_event within 90s\"},{\"poured\":\"scale.delta between 120 and 200 g\"},{\"pattern\":\"all success_predicates\"}],\"envelope\":{\"lighting\":[\"3000K\"],\"distractors\":\"none\",\"out_of_scope\":[\"oat_milk\",\"tulip_pattern\"]},\"pilot\":null}];\nexport const KITS = [{\"id\":\"kit_acme_breville\",\"object\":\"kit\",\"name\":\"acme-breville\",\"status\":\"available\",\"status_history\":[{\"status\":\"registered\",\"at\":\"2026-08-12T10:02:00Z\"},{\"status\":\"received\",\"at\":\"2026-08-15T18:30:00Z\"},{\"status\":\"tracked\",\"at\":\"2026-08-17T09:12:00Z\"},{\"status\":\"available\",\"at\":\"2026-08-17T14:45:00Z\"}],\"items\":[{\"desc\":\"Breville BES870\",\"qty\":1}],\"tracking\":{\"mocap_markers\":6,\"mass_g\":10480,\"mesh_scan\":true},\"environment_ref\":\"kit/acme-breville\",\"shipping_label_url\":\"https://api.roborama.com/v1/kits/kit_acme_breville/shipping-label\"},{\"id\":\"kit_pi_breville\",\"object\":\"kit\",\"name\":\"pi-breville\",\"status\":\"tracked\",\"status_history\":[{\"status\":\"registered\",\"at\":\"2026-08-28T08:11:00Z\"},{\"status\":\"received\",\"at\":\"2026-08-31T17:05:00Z\"},{\"status\":\"tracked\",\"at\":\"2026-09-01T10:22:00Z\"}],\"items\":[{\"desc\":\"Breville BES870\",\"qty\":2}],\"tracking\":{\"mocap_markers\":6,\"mass_g\":10480,\"mesh_scan\":true},\"environment_ref\":null,\"shipping_label_url\":\"https://api.roborama.com/v1/kits/kit_pi_breville/shipping-label\"}];\nexport const RUNS = [{\"id\":\"run_8842\",\"object\":\"run\",\"kind\":\"run\",\"status\":\"completed\",\"created\":\"2026-08-28T14:02:11Z\",\"completed\":\"2026-08-29T11:37:48Z\",\"robot\":\"g1-edu-pro@fw2.3\",\"environment\":\"kitchen-std@v1.2\",\"task\":\"load_dishwasher@v2\",\"policy\":{\"type\":\"container\",\"image\":\"ghcr.io/acme/skill:v4\",\"action_space\":\"joint_delta_50hz\",\"observation_contract\":\"droid-3cam\"},\"episodes\":\"auto(ci=0.95, moe=0.03)\",\"priority\":\"standard\",\"perturbation\":{\"layout_jitter_mm\":25,\"lighting\":[\"3000K\",\"5600K\"],\"distractors\":\"set-B\",\"seed\":42},\"data\":{\"retention\":\"30d\",\"train_on_failures\":false},\"max_budget_usd\":4000,\"resolved_pins\":{\"robot\":\"g1-edu-pro@fw2.3\",\"environment\":\"kitchen-std@v1.2\",\"task\":\"load_dishwasher@v2\",\"perturbation_rev\":\"set-B@v1.4\"},\"result\":{\"n\":612,\"success_rate\":0.874,\"ci95\":[0.846,0.898],\"interval_method\":\"wilson\",\"failure_clusters\":{\"grasp_slip\":41,\"perception_miss\":22,\"collision\":9},\"robot_hours\":20.4,\"environment_hours\":20.4,\"cost_usd\":3812,\"artifacts\":{\"mcap\":\"https://api.roborama.com/v1/runs/run_8842/episodes?artifact=mcap\",\"video\":\"https://api.roborama.com/v1/runs/run_8842/episodes?artifact=video\",\"ground_truth\":\"https://api.roborama.com/v1/runs/run_8842/episodes?artifact=ground_truth\",\"report_pdf\":\"https://api.roborama.com/v1/runs/run_8842/report?format=pdf\"}}},{\"id\":\"run_9101\",\"object\":\"run\",\"kind\":\"run\",\"status\":\"completed\",\"created\":\"2026-08-26T08:15:33Z\",\"completed\":\"2026-08-27T04:02:19Z\",\"robot\":\"g1-edu-pro@fw2.3\",\"environment\":\"kitchen-std@v1.2\",\"task\":\"espresso@v1\",\"policy\":{\"type\":\"checkpoint\",\"hf\":\"pi/espresso-v7\",\"runtime\":\"openpi\",\"inference\":{\"action_horizon\":50,\"chunk_size\":50,\"temp\":0.0},\"action_space\":\"joint_delta_50hz\",\"observation_contract\":\"droid-3cam\"},\"episodes\":412,\"priority\":\"standard\",\"interventions\":\"none\",\"perturbation\":{\"layout_jitter_mm\":25,\"lighting\":[\"3000K\",\"5600K\"],\"distractors\":\"set-B\",\"seed\":7},\"data\":{\"retention\":\"30d\",\"train_on_failures\":false},\"max_budget_usd\":3000,\"resolved_pins\":{\"robot\":\"g1-edu-pro@fw2.3\",\"environment\":\"kitchen-std@v1.2\",\"task\":\"espresso@v1\",\"perturbation_rev\":\"set-B@v1.4\"},\"result\":{\"n\":412,\"success_rate\":0.85,\"ci95\":[0.812,0.881],\"interval_method\":\"wilson\",\"failure_clusters\":{\"cup_misplace\":24,\"spill\":19,\"timeout\":12},\"stage_rates\":[{\"stage\":\"grasp_cup\",\"n\":412,\"success_rate\":0.966,\"ci95\":[0.944,0.98]},{\"stage\":\"cup_placed\",\"n\":412,\"success_rate\":0.932,\"ci95\":[0.904,0.953]},{\"stage\":\"extraction\",\"n\":412,\"success_rate\":0.893,\"ci95\":[0.86,0.919]},{\"stage\":\"served\",\"n\":412,\"success_rate\":0.85,\"ci95\":[0.812,0.881]}],\"instruction_breakdown\":[{\"instruction\":\"make an espresso\",\"held_out\":false,\"n\":118,\"success_rate\":0.873,\"ci95\":[0.801,0.921]},{\"instruction\":\"brew me a coffee\",\"held_out\":false,\"n\":112,\"success_rate\":0.866,\"ci95\":[0.791,0.917]},{\"instruction\":\"fais un espresso\",\"held_out\":false,\"n\":99,\"success_rate\":0.848,\"ci95\":[0.765,0.906]},{\"instruction\":\"prepare a single shot\",\"held_out\":true,\"n\":83,\"success_rate\":0.795,\"ci95\":[0.696,0.868]}],\"interventions\":{\"declared\":\"none\",\"count\":0,\"timestamps\":[]},\"robot_hours\":13.7,\"environment_hours\":13.7,\"cost_usd\":2562,\"artifacts\":{\"mcap\":\"https://api.roborama.com/v1/runs/run_9101/episodes?artifact=mcap\",\"video\":\"https://api.roborama.com/v1/runs/run_9101/episodes?artifact=video\",\"ground_truth\":\"https://api.roborama.com/v1/runs/run_9101/episodes?artifact=ground_truth\",\"report_pdf\":\"https://api.roborama.com/v1/runs/run_9101/report?format=pdf\"}}}];\nexport const MATRIX = {\"id\":\"run_8901\",\"object\":\"run\",\"kind\":\"matrix\",\"status\":\"completed\",\"task\":\"pick_place_class3\",\"episodes_per_cell\":\"auto(ci=0.95, moe=0.05)\",\"gate\":{\"metric\":\"ci95_lower\",\"min\":0.8},\"robots\":[\"g1-edu-pro@fw2.3\",\"g1-edu-pro@fw2.4\",\"g1-edu-plus@fw2.3\",\"aloha2-pro@fw1.1\",\"spot-arm@fw4.1\",\"tiago-pro@fw2.0\",\"fr3-bench@fw5.2\",\"stretch3@fw1.9\",\"nori-a3@fw1.0\",\"so-101@fw1.2\"],\"environments\":[\"cell-a@v1.0\",\"kitchen-std@v1.2\",\"warehouse-std@v2.0\"],\"cells\":[{\"robot\":\"g1-edu-pro@fw2.3\",\"environment\":\"cell-a@v1.0\",\"n\":190,\"success_rate\":0.937,\"ci95\":[0.893,0.964],\"status\":\"pass\"},{\"robot\":\"g1-edu-pro@fw2.3\",\"environment\":\"kitchen-std@v1.2\",\"n\":240,\"success_rate\":0.892,\"ci95\":[0.846,0.925],\"status\":\"pass\"},{\"robot\":\"g1-edu-pro@fw2.3\",\"environment\":\"warehouse-std@v2.0\",\"n\":210,\"success_rate\":0.862,\"ci95\":[0.809,0.902],\"status\":\"pass\"},{\"robot\":\"g1-edu-pro@fw2.4\",\"environment\":\"cell-a@v1.0\",\"n\":190,\"success_rate\":0.921,\"ci95\":[0.874,0.952],\"status\":\"pass\"},{\"robot\":\"g1-edu-pro@fw2.4\",\"environment\":\"kitchen-std@v1.2\",\"n\":240,\"success_rate\":0.787,\"ci95\":[0.731,0.835],\"status\":\"fail\"},{\"robot\":\"g1-edu-pro@fw2.4\",\"environment\":\"warehouse-std@v2.0\",\"n\":210,\"success_rate\":0.838,\"ci95\":[0.782,0.882],\"status\":\"fail\"},{\"robot\":\"g1-edu-plus@fw2.3\",\"environment\":\"cell-a@v1.0\",\"n\":190,\"success_rate\":0.953,\"ci95\":[0.912,0.975],\"status\":\"pass\"},{\"robot\":\"g1-edu-plus@fw2.3\",\"environment\":\"kitchen-std@v1.2\",\"n\":240,\"success_rate\":0.921,\"ci95\":[0.88,0.949],\"status\":\"pass\"},{\"robot\":\"g1-edu-plus@fw2.3\",\"environment\":\"warehouse-std@v2.0\",\"n\":210,\"success_rate\":0.89,\"ci95\":[0.841,0.926],\"status\":\"pass\"},{\"robot\":\"stretch3@fw1.9\",\"environment\":\"cell-a@v1.0\",\"n\":190,\"success_rate\":0.879,\"ci95\":[0.825,0.918],\"status\":\"pass\"},{\"robot\":\"stretch3@fw1.9\",\"environment\":\"kitchen-std@v1.2\",\"n\":240,\"success_rate\":0.729,\"ci95\":[0.67,0.781],\"status\":\"fail\"},{\"robot\":\"stretch3@fw1.9\",\"environment\":\"warehouse-std@v2.0\",\"n\":210,\"success_rate\":0.629,\"ci95\":[0.561,0.691],\"status\":\"fail\"},{\"robot\":\"nori-a3@fw1.0\",\"environment\":\"cell-a@v1.0\",\"n\":190,\"success_rate\":0.8,\"ci95\":[0.737,0.851],\"status\":\"fail\"},{\"robot\":\"nori-a3@fw1.0\",\"environment\":\"kitchen-std@v1.2\",\"n\":240,\"success_rate\":0.537,\"ci95\":[0.474,0.599],\"status\":\"fail\"},{\"robot\":\"nori-a3@fw1.0\",\"environment\":\"warehouse-std@v2.0\",\"n\":210,\"success_rate\":0.467,\"ci95\":[0.4,0.534],\"status\":\"fail\"},{\"robot\":\"aloha2-pro@fw1.1\",\"environment\":\"cell-a@v1.0\",\"n\":190,\"success_rate\":0.937,\"ci95\":[0.893,0.964],\"status\":\"pass\"},{\"robot\":\"aloha2-pro@fw1.1\",\"environment\":\"kitchen-std@v1.2\",\"n\":240,\"success_rate\":0.871,\"ci95\":[0.823,0.908],\"status\":\"pass\"},{\"robot\":\"aloha2-pro@fw1.1\",\"environment\":\"warehouse-std@v2.0\",\"n\":210,\"success_rate\":0.843,\"ci95\":[0.788,0.886],\"status\":\"fail\"},{\"robot\":\"spot-arm@fw4.1\",\"environment\":\"cell-a@v1.0\",\"n\":190,\"success_rate\":0.884,\"ci95\":[0.831,0.922],\"status\":\"pass\"},{\"robot\":\"spot-arm@fw4.1\",\"environment\":\"kitchen-std@v1.2\",\"n\":240,\"success_rate\":0.746,\"ci95\":[0.687,0.797],\"status\":\"fail\"},{\"robot\":\"spot-arm@fw4.1\",\"environment\":\"warehouse-std@v2.0\",\"n\":210,\"success_rate\":0.79,\"ci95\":[0.73,0.84],\"status\":\"fail\"},{\"robot\":\"tiago-pro@fw2.0\",\"environment\":\"cell-a@v1.0\",\"n\":190,\"success_rate\":0.905,\"ci95\":[0.855,0.939],\"status\":\"pass\"},{\"robot\":\"tiago-pro@fw2.0\",\"environment\":\"kitchen-std@v1.2\",\"n\":240,\"success_rate\":0.808,\"ci95\":[0.753,0.853],\"status\":\"fail\"},{\"robot\":\"tiago-pro@fw2.0\",\"environment\":\"warehouse-std@v2.0\",\"n\":210,\"success_rate\":0.724,\"ci95\":[0.66,0.78],\"status\":\"fail\"},{\"robot\":\"fr3-bench@fw5.2\",\"environment\":\"cell-a@v1.0\",\"n\":190,\"success_rate\":0.947,\"ci95\":[0.905,0.971],\"status\":\"pass\"},{\"robot\":\"fr3-bench@fw5.2\",\"environment\":\"kitchen-std@v1.2\",\"n\":240,\"success_rate\":0.821,\"ci95\":[0.768,0.864],\"status\":\"fail\"},{\"robot\":\"fr3-bench@fw5.2\",\"environment\":\"warehouse-std@v2.0\",\"n\":210,\"success_rate\":0.79,\"ci95\":[0.73,0.84],\"status\":\"fail\"},{\"robot\":\"so-101@fw1.2\",\"environment\":\"cell-a@v1.0\",\"n\":190,\"success_rate\":0.742,\"ci95\":[0.675,0.799],\"status\":\"fail\"},{\"robot\":\"so-101@fw1.2\",\"environment\":\"kitchen-std@v1.2\",\"n\":240,\"success_rate\":0.463,\"ci95\":[0.401,0.526],\"status\":\"fail\"},{\"robot\":\"so-101@fw1.2\",\"environment\":\"warehouse-std@v2.0\",\"n\":210,\"success_rate\":0.41,\"ci95\":[0.346,0.478],\"status\":\"fail\"}],\"regressions_vs\":\"run_8821\",\"regressions\":[{\"robot\":\"g1-edu-pro@fw2.4\",\"environment\":\"kitchen-std@v1.2\",\"delta_pts\":-10.5,\"note\":\"fw2.4 wrist controller change; grasp_slip cluster opened\"}]};\nexport const TRANSFER = {\"object\":\"transfer\",\"task\":\"towel_fold@v1\",\"interval_method\":\"wilson\",\"source\":{\"robot\":\"aloha-bimanual@fw3.1\",\"success_rate\":0.942,\"n\":380,\"ci95\":[0.914,0.961]},\"target\":{\"robot\":\"g1-edu-pro@fw2.3\",\"success_rate\":0.715,\"n\":340,\"ci95\":[0.665,0.76]},\"delta_pts\":-22.7,\"new_failure_clusters\":[\"grasp_slip\",\"wrist_singularity\"]};\nexport const USAGE = {\"object\":\"usage\",\"period\":\"2026-09\",\"robot_hours\":{\"verify\":141.2,\"soak\":2210.5},\"env_hours\":{\"bare\":96.0,\"standard\":402.3,\"replica\":118.9,\"instrumented-replica\":6.2},\"usd_total\":18940,\"budget\":{\"monthly_usd\":25000,\"hard\":true,\"remaining_usd\":6060}};\nexport const STREAM = {\"object\":\"stream\",\"run\":\"run_9101\",\"episode\":341,\"of\":412,\"cell\":\"cell-g1-04\",\"webrtc\":\"wss://streams.roborama.com/cells/cell-g1-04/webrtc\",\"mjpeg\":\"https://streams.roborama.com/cells/cell-g1-04/mjpeg\",\"viewer_token\":\"vt_7Kq2mHentXw4\",\"expires\":\"2026-09-01T20:00:00Z\"};\n","/**\n * Statistics helpers: Wilson score intervals and `auto(ci=..., moe=...)`\n * sizing. Every Roborama result carries `n` and a confidence interval;\n * intervals are Wilson score intervals (`interval_method: \"wilson\"`).\n */\n\nconst Z_TABLE: Record<string, number> = {\n \"0.9\": 1.6448536269514722,\n \"0.95\": 1.959963984540054,\n \"0.99\": 2.5758293035489004,\n};\n\nexport const AUTO_RE = /^auto\\(ci=(0\\.[0-9]+), ?moe=(0\\.[0-9]+)\\)$/;\n\nexport function zForCi(ci: number): number {\n const exact = Z_TABLE[String(ci)];\n if (exact !== undefined) return exact;\n // Acklam's rational approximation of the normal quantile (~1e-9 accurate).\n const p = 1 - (1 - ci) / 2;\n const a = [-3.969683028665376e1, 2.209460984245205e2, -2.759285104469687e2,\n 1.38357751867269e2, -3.066479806614716e1, 2.506628277459239];\n const b = [-5.447609879822406e1, 1.615858368580409e2, -1.556989798598866e2,\n 6.680131188771972e1, -1.328068155288572e1];\n const c = [-7.784894002430293e-3, -3.223964580411365e-1, -2.400758277161838,\n -2.549732539343734, 4.374664141464968, 2.938163982698783];\n const d = [7.784695709041462e-3, 3.224671290700398e-1, 2.445134137142996,\n 3.754408661907416];\n const plow = 0.02425;\n const phigh = 1 - plow;\n if (p < plow) {\n const q = Math.sqrt(-2 * Math.log(p));\n return -(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) /\n ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);\n }\n if (p <= phigh) {\n const q = p - 0.5;\n const r = q * q;\n return (((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) * q /\n (((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1);\n }\n const q = Math.sqrt(-2 * Math.log(1 - p));\n return (((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) /\n ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);\n}\n\nexport const round1 = (x: number): number => Math.round(x * 10) / 10;\nexport const round3 = (x: number): number => Math.round(x * 1000) / 1000;\n\n/** Wilson score interval, rounded to 3 decimals (the API's display precision). */\nexport function wilsonCi(successes: number, n: number, ci = 0.95): [number, number] {\n if (n <= 0) return [0, 0];\n const z = zForCi(ci);\n const p = successes / n;\n const z2 = z * z;\n const denom = 1 + z2 / n;\n const center = (p + z2 / (2 * n)) / denom;\n const half = (z * Math.sqrt((p * (1 - p)) / n + z2 / (4 * n * n))) / denom;\n return [round3(center - half), round3(center + half)];\n}\n\n/** Parse `auto(ci=0.95, moe=0.03)` → `{ci, moe}`; null when not auto-form. */\nexport function parseAuto(spec: string): { ci: number; moe: number } | null {\n const m = AUTO_RE.exec(spec.trim());\n if (!m) return null;\n return { ci: Number(m[1]), moe: Number(m[2]) };\n}\n\n/** Throws when the spec is neither a positive int nor well-formed auto(). */\nexport function validateEpisodes(spec: number | string): void {\n if (typeof spec === \"number\") {\n if (!Number.isInteger(spec) || spec < 1) {\n throw new RangeError(\"episodes must be a positive integer or 'auto(ci=..., moe=...)'\");\n }\n return;\n }\n if (parseAuto(spec) === null) {\n throw new RangeError(\n \"episodes is neither a positive int nor a well-formed 'auto(ci=..., moe=...)'\",\n );\n }\n}\n\n/** Conservative pre-run sizing (p=0.5) for a target margin of error. */\nexport function planningN(ci: number, moe: number): number {\n const z = zForCi(ci);\n return Math.ceil((z * z * 0.25) / (moe * moe));\n}\n\n/**\n * Deterministic mock-mode realized n for an `auto(...)` spec — anchored to\n * the canonical run (n=612 at ci=0.95, moe=0.03), scaled by the 1/moe² law.\n */\nexport function realizedN(ci: number, moe: number): number {\n const z = zForCi(ci);\n const z95 = zForCi(0.95);\n return Math.max(1, Math.round(612 * (0.03 / moe) ** 2 * (z / z95) ** 2));\n}\n","/**\n * Deterministic mock backend (`ROBORAMA_MOCK=1` / `new Roborama({ mock: true })`).\n *\n * Hosted execution is in private preview; the mock backend lets you\n * integrate today. It speaks the same wire shapes as `api.roborama.com` and\n * returns deterministic, fixture-shaped data: quote math follows the public\n * rate card, run results are shaped like the canonical runs (`run_8842`,\n * `run_9101`), and `max_budget_usd` hard stops fire exactly as documented\n * with an honest partial result attached. Nothing here talks to the network.\n */\n\nimport {\n ENVIRONMENTS,\n KITS,\n MATRIX,\n PRICING,\n ROBOTS,\n RUNS,\n STREAM,\n SUITES,\n TASKS,\n TRANSFER,\n USAGE,\n} from \"./data\";\nimport { errorFromEnvelope, RoboramaError } from \"./errors\";\nimport { parseAuto, planningN, realizedN, round1, round3, validateEpisodes, wilsonCi } from \"./stats\";\nimport type { MatrixCell, Result, WatchEvent } from \"./types\";\n\nexport const MOCK_NOW = \"2026-09-08T00:00:00Z\";\nexport const MOCK_LATER = \"2026-09-08T01:00:00Z\";\n\n/** Canonical base success rate: 535/612 from the canonical run (run_8842). */\nconst BASE_RATE = 535 / 612;\n/** Canonical failure-cluster proportions from run_8842 (of 77 failures). */\nconst CLUSTER_SPLIT: [string, number][] = [\n [\"grasp_slip\", 41 / 77],\n [\"perception_miss\", 22 / 77],\n [\"collision\", 9 / 77],\n];\nconst MINUTES_PER_EPISODE = 2.0;\nconst QUEUE_ETA: Record<string, string> = { burst: \"1h\", standard: \"6h\", soak: \"24h\" };\nconst PRIORITY_MULT: Record<string, number> = { burst: 1.5, standard: 1.0, soak: 0.6 };\nconst DEFAULT_ROBOT_RATE = 148;\nconst DEFAULT_ENV_TIER = \"replica\";\n\ntype Json = Record<string, any>;\n\nconst baseId = (ref: string): string => ref.split(\"@\", 1)[0]!.split(\"@\")[0]!;\nconst clone = <T>(x: T): T => JSON.parse(JSON.stringify(x)) as T;\n\nfunction notFound(message: string, run_id?: string): RoboramaError {\n return new RoboramaError(message, { code: \"not_found\", status: 404, run_id });\n}\n\nexport class MockBackend {\n private runs = new Map<string, Json>();\n private tasks = new Map<string, Json>();\n private kits = new Map<string, Json>();\n private counters = new Map<string, number>();\n private robotRates = new Map<string, number>();\n private envTier = new Map<string, string>();\n private tierRates = new Map<string, number>();\n\n constructor() {\n for (const r of RUNS as Json[]) this.runs.set(r.id, clone(r));\n this.runs.set((MATRIX as Json).id, clone(MATRIX as Json));\n // The public demo run referenced by the hero snippet (`run_demo`) is an\n // alias of the canonical completed run so watch/result/report all work.\n const demo = clone(this.runs.get(\"run_8842\")!);\n demo.id = \"run_demo\";\n this.runs.set(\"run_demo\", demo);\n for (const t of TASKS as Json[]) this.tasks.set(t.id, clone(t));\n for (const k of KITS as Json[]) this.kits.set(k.id, clone(k));\n for (const r of (PRICING as Json).robot_rates) {\n this.robotRates.set(r.id, r.usd_per_robot_hour);\n }\n for (const e of ENVIRONMENTS as Json[]) this.envTier.set(e.id, e.adder_tier);\n for (const e of (PRICING as Json).environment_rates) {\n this.tierRates.set(e.adder_tier, e.usd_per_env_hour);\n }\n }\n\n private next(prefix: string, start: number): string {\n const n = this.counters.get(prefix) ?? start;\n this.counters.set(prefix, n + 1);\n return `${prefix}${n}`;\n }\n\n request(method: string, path: string, body?: Json, params?: Json): Json {\n body = body ?? {};\n params = params ?? {};\n const parts = path.split(\"/\").filter(Boolean);\n const key = `${method.toUpperCase()} ${path}`;\n\n if (key === \"POST /v1/quote\") return this.quote(body);\n if (key === \"POST /v1/runs\") return this.createRun(body);\n if (key === \"GET /v1/runs\") return this.listRuns(params);\n if (method === \"GET\" && parts.length === 3 && parts[1] === \"runs\") {\n return this.getRun(parts[2]!);\n }\n if (method === \"GET\" && parts.length === 4 && parts[1] === \"runs\" && parts[3] === \"episodes\") {\n return this.listEpisodes(parts[2]!);\n }\n if (method === \"GET\" && parts.length === 4 && parts[1] === \"runs\" && parts[3] === \"report\") {\n return this.report(parts[2]!);\n }\n if (method === \"POST\" && parts.length === 4 && parts[1] === \"runs\" && parts[3] === \"export\") {\n return this.export(parts[2]!, body.format ?? \"lerobot\");\n }\n if (method === \"POST\" && parts.length === 4 && parts[1] === \"runs\" && parts[3] === \"on-verified\") {\n const run = this.getRun(parts[2]!);\n run.on_verified = { webhook: body.webhook };\n return run;\n }\n if (key === \"GET /v1/robots\") {\n return { object: \"list\", url: \"/v1/robots\", data: clone(ROBOTS) };\n }\n if (key === \"GET /v1/environments\") {\n let data = clone(ENVIRONMENTS) as Json[];\n if (params.cls) data = data.filter((e) => e.class === params.cls);\n return { object: \"list\", url: \"/v1/environments\", data };\n }\n if (key === \"GET /v1/suites\") {\n return { object: \"list\", url: \"/v1/suites\", data: clone(SUITES) };\n }\n if (key === \"POST /v1/gates\") {\n return {\n object: \"gate\",\n id: this.next(\"gate_\", 312),\n status: \"active\",\n on: body.on,\n suite: body.suite,\n robots: body.robots ?? [],\n fail_if: body.fail_if ?? {},\n };\n }\n if (method === \"GET\" && parts.length === 3 && parts[1] === \"streams\") {\n const cell = parts[2]!;\n return {\n ...clone(STREAM as Json),\n cell,\n webrtc: `wss://streams.roborama.com/cells/${cell}/webrtc`,\n mjpeg: `https://streams.roborama.com/cells/${cell}/mjpeg`,\n };\n }\n if (key === \"GET /v1/usage\") {\n const usage = clone(USAGE as Json);\n if (params.period) usage.period = params.period;\n return usage;\n }\n if (key === \"PUT /v1/budgets\") {\n const monthly = Number(body.monthly_usd ?? 0);\n return {\n monthly_usd: monthly,\n hard: Boolean(body.hard ?? false),\n remaining_usd: Math.round((monthly - (USAGE as Json).usd_total) * 100) / 100,\n };\n }\n if (key === \"POST /v1/keys\") {\n return {\n object: \"key\",\n id: this.next(\"key_\", 7001),\n scope: body.scope ?? [],\n secret: \"rbr_live_mock_0000000000000000\",\n created: MOCK_NOW,\n };\n }\n if (key === \"GET /v1/keys\") return { object: \"list\", data: [] };\n if (key === \"POST /v1/calibration/exports\") {\n const id = this.next(\"exp_cal_\", 1);\n return {\n object: \"export\",\n id,\n format: \"mcap-bundle\",\n status: \"ready\",\n download_url: `https://artifacts.roborama.com/calibration/${id}.tar.gz`,\n };\n }\n if (method === \"DELETE\" && parts.length === 3 && parts[1] === \"data\") {\n return {\n object: \"purge_receipt\",\n id: this.next(\"purge_\", 1),\n run_id: parts[2],\n status: \"completed\",\n purged_at: MOCK_NOW,\n };\n }\n if (key === \"POST /v1/tasks\") return this.createTask(body);\n if (key === \"GET /v1/tasks\") {\n return { object: \"list\", url: \"/v1/tasks\", data: [...this.tasks.values()] };\n }\n if (method === \"GET\" && parts.length === 3 && parts[1] === \"tasks\") {\n return this.getTask(parts[2]!);\n }\n if (method === \"POST\" && parts.length === 4 && parts[1] === \"tasks\") {\n return this.taskAction(parts[2]!, parts[3]!, body);\n }\n if (key === \"POST /v1/kits\") return this.registerKit(body);\n if (method === \"GET\" && parts.length === 3 && parts[1] === \"kits\") {\n return this.getKit(parts[2]!);\n }\n if (method === \"GET\" && parts.length === 4 && parts[1] === \"kits\" && parts[3] === \"shipping-label\") {\n const kit = this.getKit(parts[2]!);\n return {\n url: `https://artifacts.roborama.com/labels/${kit.id}.pdf`,\n expires: MOCK_LATER,\n };\n }\n throw notFound(`No mock route for ${method} ${path}`);\n }\n\n *events(runId: string): Generator<WatchEvent> {\n const run = this.getRun(runId);\n const n = this.realizedEpisodes(run);\n const cell = \"cell-g1-04\";\n for (const i of [1, 2, 3]) {\n yield { episode: i, of: n, outcome: \"success\", duration_s: 121, status: \"running\" };\n }\n yield {\n status: \"completed\",\n episode: n,\n of: n,\n cell,\n webrtc: `wss://streams.roborama.com/cells/${cell}/webrtc`,\n };\n }\n\n // -- rate card --------------------------------------------------------------\n\n private robotRate(robot: string): number {\n return this.robotRates.get(baseId(robot)) ?? DEFAULT_ROBOT_RATE;\n }\n\n private envRate(environment: string): number {\n const tier = this.envTier.get(baseId(environment)) ?? DEFAULT_ENV_TIER;\n return this.tierRates.get(tier) ?? this.tierRates.get(DEFAULT_ENV_TIER)!;\n }\n\n private episodeCount(spec: number | string, realized: boolean): number {\n validateEpisodes(spec);\n if (typeof spec === \"number\") return spec;\n const auto = parseAuto(spec)!;\n return realized ? realizedN(auto.ci, auto.moe) : planningN(auto.ci, auto.moe);\n }\n\n quote(body: Json): Json {\n const robot = body.robot ?? \"g1-edu-pro\";\n const environment = body.environment ?? \"kitchen-std\";\n const priority = body.priority ?? \"standard\";\n const episodes = body.episodes ?? 600;\n const n = this.episodeCount(episodes, false);\n const hours = round1((n * MINUTES_PER_EPISODE) / 60);\n const rr = this.robotRate(robot);\n const er = this.envRate(environment);\n const robotUsd = Math.round(hours * rr);\n const envUsd = Math.round(hours * er);\n const mult = PRIORITY_MULT[priority] ?? 1.0;\n return {\n object: \"quote\",\n robot,\n environment,\n episodes,\n priority,\n robot_hours: hours,\n env_hours: hours,\n usd: Math.round((robotUsd + envUsd) * mult),\n queue_eta: QUEUE_ETA[priority] ?? \"6h\",\n breakdown: {\n minutes_per_episode_est: MINUTES_PER_EPISODE,\n robot_usd_per_hour: rr,\n env_usd_per_hour: er,\n robot_usd: robotUsd,\n env_usd: envUsd,\n },\n expires: MOCK_NOW,\n };\n }\n\n // -- runs ---------------------------------------------------------------------\n\n private canonicalResult(runId: string): Result {\n return clone(this.runs.get(runId)!.result) as Result;\n }\n\n private genericResult(\n n: number,\n robot: string,\n environment: string,\n priority: string,\n rate = BASE_RATE,\n ): Json {\n const successes = Math.round(n * rate);\n const failures = n - successes;\n const clusters: Record<string, number> = {};\n for (const [name, share] of CLUSTER_SPLIT) {\n const count = Math.round(failures * share);\n if (count) clusters[name] = count;\n }\n const hours = round1((n * MINUTES_PER_EPISODE) / 60);\n const mult = PRIORITY_MULT[priority] ?? 1.0;\n const cost = Math.round(\n ((n * MINUTES_PER_EPISODE) / 60) * (this.robotRate(robot) + this.envRate(environment)) * mult,\n );\n return {\n n,\n success_rate: round3(successes / Math.max(n, 1)),\n ci95: wilsonCi(successes, n),\n interval_method: \"wilson\",\n failure_clusters: clusters,\n robot_hours: hours,\n environment_hours: hours,\n cost_usd: cost,\n };\n }\n\n private artifacts(runId: string): Json {\n const base = `https://api.roborama.com/v1/runs/${runId}`;\n return {\n mcap: `${base}/episodes?artifact=mcap`,\n video: `${base}/episodes?artifact=video`,\n ground_truth: `${base}/episodes?artifact=ground_truth`,\n report_pdf: `${base}/report?format=pdf`,\n };\n }\n\n createRun(body: Json): Json {\n const kind = body.kind ?? \"run\";\n const id = this.next(\"run_\", 9200);\n const run: Json = {\n id,\n object: \"run\",\n kind,\n status: \"completed\",\n created: MOCK_NOW,\n completed: MOCK_LATER,\n priority: body.priority ?? \"standard\",\n };\n for (const field of [\n \"robot\", \"robots\", \"environment\", \"environments\", \"task\", \"suite\",\n \"policy\", \"policies\", \"policy_stream\", \"episodes\", \"episodes_per_cell\",\n \"perturbation\", \"data\", \"max_budget_usd\", \"paired\", \"publish\",\n \"audit_sample\", \"return_ground_truth\", \"source\", \"target\", \"iterate_on\",\n \"escalate_to\", \"monthly_cap_usd\", \"on_verified\", \"interventions\", \"scenarios\",\n ]) {\n if (body[field] !== undefined && body[field] !== null) run[field] = body[field];\n }\n\n const pins: Record<string, string> = {};\n for (const field of [\"robot\", \"environment\", \"task\"]) {\n if (typeof run[field] === \"string\") pins[field] = run[field];\n }\n if (run.perturbation) pins.perturbation_rev = \"set-B@v1.4\";\n if (Object.keys(pins).length) run.resolved_pins = pins;\n\n switch (kind) {\n case \"eval\": this.buildEval(run); break;\n case \"verify\": this.buildVerify(run); break;\n case \"matrix\": this.buildMatrix(run); break;\n case \"threshold\": run.status = \"running\"; break;\n case \"compare\": this.buildCompare(run); break;\n case \"transfer\": this.buildTransfer(run); break;\n default: this.buildRun(run);\n }\n this.runs.set(id, run);\n return run;\n }\n\n private buildRun(run: Json): void {\n const robot = run.robot ?? \"g1-edu-pro@fw2.3\";\n const environment = run.environment ?? \"kitchen-std@v1.2\";\n const priority = run.priority ?? \"standard\";\n const spec = run.episodes ?? \"auto(ci=0.95, moe=0.03)\";\n const n = this.episodeCount(spec, true);\n\n const budget = run.max_budget_usd;\n const episodeUsd =\n (MINUTES_PER_EPISODE / 60) *\n (this.robotRate(robot) + this.envRate(environment)) *\n (PRIORITY_MULT[priority] ?? 1.0);\n if (budget !== undefined && episodeUsd * n > Number(budget)) {\n const affordable = Math.max(0, Math.floor(Number(budget) / episodeUsd));\n run.status = \"stopped\";\n run.error = {\n code: \"budget_exceeded\",\n message: `Run halted at max_budget_usd=${budget} after ${affordable} episodes.`,\n run_id: run.id,\n doc_url: \"https://roborama.com/docs/errors/#budget_exceeded\",\n partial_result: affordable\n ? this.genericResult(affordable, robot, environment, priority)\n : undefined,\n };\n return;\n }\n\n let result: Json;\n const task = String(run.task ?? \"\");\n if (task.startsWith(\"espresso\")) {\n result = this.canonicalResult(\"run_9101\") as Json;\n } else if (spec === \"auto(ci=0.95, moe=0.03)\" || n === 612) {\n result = this.canonicalResult(\"run_8842\") as Json;\n } else {\n result = this.genericResult(n, robot, environment, priority);\n }\n result.artifacts = this.artifacts(run.id);\n run.result = result;\n }\n\n private buildEval(run: Json): void {\n const sample = ((SUITES as Json[])[0] ?? {}).sample_report ?? {};\n run.citation = sample.citation;\n run.attestation = sample.attestation;\n run.attestation_url = sample.attestation_url;\n run.overall = sample.overall;\n run.per_task = sample.per_task;\n const overall = { ...(sample.overall ?? {}) } as Json;\n overall.interval_method = overall.interval_method ?? \"wilson\";\n overall.artifacts = this.artifacts(run.id);\n run.result = overall;\n }\n\n private buildVerify(run: Json): void {\n run.sim_agreement = 0.93;\n run.disagreements = [\"scn_0042\", \"scn_0113\", \"scn_0197\"];\n if (run.return_ground_truth) {\n run.ground_truth_url = `https://artifacts.roborama.com/verify/${run.id}/ground_truth.tar.gz`;\n }\n const robots: string[] = run.robots ?? [\"g1-edu-pro@fw2.3\"];\n const result = this.genericResult(340, robots[0]!, \"kitchen-std\", run.priority ?? \"standard\");\n result.artifacts = this.artifacts(run.id);\n run.result = result;\n }\n\n private matrixCell(robot: string, environment: string): MatrixCell {\n const envBase = baseId(environment);\n for (const cell of (MATRIX as Json).cells as Json[]) {\n if (cell.robot === robot && baseId(cell.environment) === envBase) {\n return { ...(clone(cell) as MatrixCell), environment };\n }\n }\n const n = ({ \"cell-a\": 190, \"kitchen-std\": 240, \"warehouse-std\": 210 } as Record<string, number>)[envBase] ?? 240;\n let rate = 0.85;\n for (const cell of (MATRIX as Json).cells as Json[]) {\n if (cell.robot === robot && baseId(cell.environment) === \"kitchen-std\") {\n rate = cell.success_rate;\n break;\n }\n }\n const successes = Math.round(n * rate);\n const [lo, hi] = wilsonCi(successes, n);\n return {\n robot,\n environment,\n n,\n success_rate: round3(successes / n),\n ci95: [lo, hi],\n status: lo >= 0.8 ? \"pass\" : \"fail\",\n };\n }\n\n private buildMatrix(run: Json): void {\n const robots: string[] = run.robots ?? [];\n const environments: string[] = run.environments ?? [];\n const cells = robots.flatMap((r) => environments.map((e) => this.matrixCell(r, e)));\n run.cells = cells;\n run.gate = { metric: \"ci95_lower\", min: 0.8 };\n run.regressions = clone((MATRIX as Json).regressions);\n const nTotal = cells.reduce((acc, c) => acc + c.n, 0);\n const successes = cells.reduce((acc, c) => acc + Math.round(c.n * c.success_rate), 0);\n const result = this.genericResult(\n Math.max(nTotal, 1),\n robots[0] ?? \"g1-edu-pro@fw2.3\",\n environments[0] ?? \"kitchen-std\",\n run.priority ?? \"standard\",\n nTotal ? successes / nTotal : BASE_RATE,\n );\n if (String(run.task ?? \"\").startsWith(\"espresso\")) {\n const canonical = this.canonicalResult(\"run_9101\") as Json;\n result.stage_rates = canonical.stage_rates;\n result.instruction_breakdown = canonical.instruction_breakdown;\n }\n result.artifacts = this.artifacts(run.id);\n run.result = result;\n }\n\n private buildCompare(run: Json): void {\n const names = Object.keys(run.policies ?? {}).sort();\n const winner = names.length ? names[names.length - 1] : undefined;\n run.winner = winner;\n run.p_value = 0.008;\n run.effect_pts = 4.1;\n const results: Json = {};\n for (const name of names) {\n const rate = name === winner ? BASE_RATE : BASE_RATE - 0.041;\n const successes = Math.round(340 * rate);\n results[name] = {\n n: 340,\n success_rate: round3(successes / 340),\n ci95: wilsonCi(successes, 340),\n interval_method: \"wilson\",\n };\n }\n run.results = results;\n }\n\n private buildTransfer(run: Json): void {\n const report = clone(TRANSFER as Json);\n if (run.task) report.task = run.task;\n if (run.source) report.source = { ...report.source, robot: run.source };\n if (typeof run.target === \"string\") report.target = { ...report.target, robot: run.target };\n run.transfer = report;\n }\n\n listRuns(params: Json): Json {\n let data = [...this.runs.values()];\n if (params.kind) data = data.filter((r) => r.kind === params.kind);\n if (params.status) data = data.filter((r) => r.status === params.status);\n const limit = Number(params.limit ?? 20);\n return { object: \"list\", url: \"/v1/runs\", data: data.slice(0, limit) };\n }\n\n getRun(runId: string): Json {\n const run = this.runs.get(runId);\n if (!run) throw notFound(`No such run: ${runId}`, runId);\n return run;\n }\n\n private realizedEpisodes(run: Json): number {\n if (run.result?.n) return Number(run.result.n);\n try {\n return this.episodeCount(run.episodes ?? 612, true);\n } catch {\n return 612;\n }\n }\n\n listEpisodes(runId: string): Json {\n const run = this.getRun(runId);\n const n = this.realizedEpisodes(run);\n const rate = run.result?.success_rate ?? BASE_RATE;\n const successes = Math.round(n * rate);\n const failures = n - successes;\n const clusters: string[] = [];\n for (const [name, count] of Object.entries(run.result?.failure_clusters ?? {})) {\n for (let i = 0; i < Number(count); i++) clusters.push(name);\n }\n const episodes: Json[] = [];\n let failSeen = 0;\n for (let i = 0; i < n; i++) {\n const isFailure =\n failures > 0 && Math.floor((i * failures) / n) !== Math.floor(((i + 1) * failures) / n);\n const base = `https://artifacts.roborama.com/${runId}/ep_${String(i).padStart(5, \"0\")}`;\n const episode: Json = {\n id: `${runId}_ep_${String(i).padStart(5, \"0\")}`,\n object: \"episode\",\n index: i,\n outcome: isFailure ? \"failure\" : \"success\",\n duration_s: 100 + ((i * 37) % 80),\n video_url: `${base}/video.mp4`,\n mcap_url: `${base}/episode.mcap`,\n replay_spec: {\n episode: i,\n seed: run.perturbation?.seed ?? 42,\n initial_conditions: { layout_seed: 42 + i },\n },\n };\n if (isFailure) {\n if (failSeen < clusters.length) episode.cluster = clusters[failSeen];\n failSeen += 1;\n }\n episodes.push(episode);\n }\n return { object: \"list\", url: `/v1/runs/${runId}/episodes`, data: episodes };\n }\n\n raiseIfStopped(run: Json): void {\n if (run.status === \"stopped\" && run.error) {\n throw errorFromEnvelope(402, { error: run.error });\n }\n }\n\n report(runId: string): Json {\n const run = this.getRun(runId);\n this.raiseIfStopped(run);\n const pdf = `https://api.roborama.com/v1/runs/${runId}/report?format=pdf`;\n return {\n object: \"report\",\n run_id: runId,\n kind: \"verification\",\n result: run.result,\n resolved_pins: run.resolved_pins ?? {},\n citation: `Roborama verification report, ${runId}, task ${run.task ?? \"n/a\"}, ${MOCK_NOW.slice(0, 10)}`,\n pdf_url: pdf,\n url: pdf,\n };\n }\n\n export(runId: string, format: string): Json {\n this.getRun(runId);\n const id = this.next(\"exp_\", 1);\n return {\n object: \"export\",\n id,\n run_id: runId,\n format,\n status: \"ready\",\n download_url: `https://artifacts.roborama.com/exports/${runId}-${format}.tar.gz`,\n };\n }\n\n // -- tasks / kits -------------------------------------------------------------\n\n createTask(body: Json): Json {\n const name = body.name ?? \"task\";\n const num = this.next(`tasknum_${name}_`, 1).split(\"_\").pop()!;\n const task: Json = {\n id: `task_${name}_${num.padStart(2, \"0\")}`,\n object: \"task\",\n name,\n rev: null,\n status: \"draft\",\n visibility: body.visibility ?? \"private\",\n created: MOCK_NOW,\n frozen: null,\n signatures: [],\n initial_conditions: body.initial_conditions ?? {},\n success_predicates: body.success_predicates ?? [],\n instructions: body.instructions ?? {},\n stages: body.stages ?? [],\n envelope: body.envelope ?? {},\n baseline: body.baseline,\n pilot: null,\n };\n this.tasks.set(task.id, task);\n return task;\n }\n\n getTask(taskId: string): Json {\n const task = this.tasks.get(taskId);\n if (!task) throw notFound(`No such task: ${taskId}`);\n return task;\n }\n\n taskAction(taskId: string, action: string, body: Json): Json {\n const task = this.getTask(taskId);\n if (action === \"pilot\") {\n task.status = \"piloting\";\n const pilot = {\n run_id: \"run_9088\",\n robot: body.robot,\n episodes: body.episodes ?? 25,\n stream_url: \"wss://streams.roborama.com/cells/cell-g1-02/webrtc\",\n amendments: task.pilot?.amendments ?? 0,\n };\n task.pilot = pilot;\n return pilot;\n }\n if (action === \"amend\") {\n for (const [key, value] of Object.entries(body)) {\n if (value !== undefined && value !== null) task[key] = value;\n }\n if (task.pilot) task.pilot.amendments = (task.pilot.amendments ?? 0) + 1;\n return task;\n }\n if (action === \"freeze\") {\n task.status = \"frozen\";\n task.rev = `${task.name}@v1`;\n task.frozen = MOCK_NOW;\n task.signatures = [\"acct_customer\", \"roborama\"];\n return task;\n }\n throw notFound(`No mock route for task action: ${action}`);\n }\n\n registerKit(body: Json): Json {\n const name = body.name ?? \"kit\";\n const id = `kit_${String(name).replace(/-/g, \"_\")}`;\n const kit: Json = {\n id,\n object: \"kit\",\n name,\n status: \"registered\",\n status_history: [{ status: \"registered\", at: MOCK_NOW }],\n items: body.items ?? [],\n tracking: null,\n environment_ref: null,\n shipping_label_url: `https://api.roborama.com/v1/kits/${id}/shipping-label`,\n };\n this.kits.set(id, kit);\n return kit;\n }\n\n getKit(kitId: string): Json {\n const kit = this.kits.get(kitId);\n if (!kit) throw notFound(`No such kit: ${kitId}`);\n return kit;\n }\n}\n","/**\n * The Roborama client: bearer auth, idempotency keys, typed errors, and a\n * deterministic mock mode.\n *\n * `new Roborama()` reads `ROBORAMA_API_KEY` from the environment; every\n * method returns a promise; field names stay snake_case on both sides of\n * the wire. Set `ROBORAMA_MOCK=1` (or `new Roborama({ mock: true })`) to\n * integrate offline against fixture-shaped results while hosted execution\n * is in private preview.\n */\n\nimport { errorFromEnvelope, RoboramaError } from \"./errors\";\nimport { MockBackend } from \"./mock\";\nimport type {\n Budget,\n CalibrationExportParams,\n CheckpointPolicy,\n ContainerPolicy,\n CreateCompareParams,\n CreateEvalParams,\n CreateMatrixParams,\n CreateRunParams,\n CreateThresholdParams,\n CreateTransferParams,\n CreateVerifyParams,\n EndpointPolicy,\n Environment,\n Episode,\n Export,\n ExportFormat,\n Gate,\n GateCreateParams,\n Heatmap,\n Key,\n KeyScope,\n KitCreateParams,\n KitData,\n MatrixCell,\n MatrixRegression,\n MatrixResult,\n Pilot,\n PurgeReceipt,\n Quote,\n QuoteParams,\n Report,\n Result,\n Robot,\n RoboramaOptions,\n RunCreateParams,\n RunData,\n RunKind,\n RunStatus,\n Stream,\n Suite,\n TaskCreateParams,\n TaskData,\n TransferReport,\n Usage,\n WatchEvent,\n} from \"./types\";\n\nexport const DEFAULT_BASE_URL = \"https://api.roborama.com\";\nconst USER_AGENT = \"roborama-typescript/0.1.0\";\n\ntype Json = Record<string, any>;\n\nfunction env(name: string): string | undefined {\n const proc = (globalThis as any).process;\n return proc?.env?.[name];\n}\n\nfunction envFlag(name: string): boolean {\n const value = (env(name) ?? \"\").trim().toLowerCase();\n return value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\n\nfunction idempotencyKey(): string {\n const c = (globalThis as any).crypto;\n if (c?.randomUUID) return c.randomUUID();\n return `idk-${Date.now()}-${Math.floor(Math.random() * 1e9)}`;\n}\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\n/** Serialize params, dropping undefined/null so the wire stays clean. */\nfunction cleanBody(params: Json): Json {\n const out: Json = {};\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) out[key] = value;\n }\n return out;\n}\n\n// -- Transport -----------------------------------------------------------------\n\nclass Transport {\n private mockOpt?: boolean;\n private mockBackend?: MockBackend;\n private apiKey?: string;\n readonly baseUrl: string;\n private fetchImpl?: typeof globalThis.fetch;\n\n constructor(opts: RoboramaOptions = {}) {\n this.apiKey = opts.apiKey;\n this.baseUrl = (opts.baseUrl ?? env(\"ROBORAMA_BASE_URL\") ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n this.mockOpt = opts.mock;\n this.fetchImpl = opts.fetch;\n }\n\n get mock(): boolean {\n return this.mockOpt ?? envFlag(\"ROBORAMA_MOCK\");\n }\n\n private engine(): MockBackend {\n if (!this.mockBackend) this.mockBackend = new MockBackend();\n return this.mockBackend;\n }\n\n private key(): string {\n const key = this.apiKey ?? env(\"ROBORAMA_API_KEY\");\n if (!key) {\n throw new RoboramaError(\n \"No API key. Export ROBORAMA_API_KEY (keys use the rbr_live_ prefix), or set \" +\n \"ROBORAMA_MOCK=1 / new Roborama({ mock: true }) to integrate offline against \" +\n \"the deterministic mock backend.\",\n { code: \"invalid_api_key\", status: 401 },\n );\n }\n return key;\n }\n\n async request(\n method: string,\n path: string,\n opts: { body?: Json; params?: Json } = {},\n ): Promise<any> {\n if (this.mock) {\n return this.engine().request(method, path, opts.body, opts.params);\n }\n const fetchFn = this.fetchImpl ?? globalThis.fetch;\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.key()}`,\n Accept: \"application/json\",\n \"User-Agent\": USER_AGENT,\n };\n if (opts.body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n if (method === \"POST\" && path === \"/v1/runs\") {\n // Physical work: a retried submission returns the original run\n // instead of buying the episodes twice.\n headers[\"Idempotency-Key\"] = idempotencyKey();\n }\n const url = new URL(this.baseUrl + path);\n for (const [key, value] of Object.entries(opts.params ?? {})) {\n if (value !== undefined && value !== null) url.searchParams.set(key, String(value));\n }\n\n for (let attempt = 1; ; attempt++) {\n let resp: Response;\n try {\n resp = await fetchFn(url, {\n method,\n headers,\n body: opts.body !== undefined ? JSON.stringify(opts.body) : undefined,\n });\n } catch (cause) {\n if (attempt <= 2) {\n await sleep(500 * attempt);\n continue;\n }\n throw new RoboramaError(`Network error talking to ${this.baseUrl}: ${cause}`, {\n code: \"transport_error\",\n });\n }\n if (resp.status === 429 && attempt <= 2) {\n const retryAfter = Number(resp.headers.get(\"Retry-After\") ?? \"1\");\n await sleep(Math.min(Number.isFinite(retryAfter) ? retryAfter * 1000 : 1000, 30_000));\n continue;\n }\n if (resp.ok) {\n const text = await resp.text();\n return text ? JSON.parse(text) : null;\n }\n let payload: Json | undefined;\n try {\n payload = await resp.json();\n } catch {\n payload = undefined;\n }\n if (!payload) {\n throw new RoboramaError(`HTTP ${resp.status} from ${path}`, {\n code: `http_${resp.status}`,\n status: resp.status,\n });\n }\n throw errorFromEnvelope(resp.status, payload as any);\n }\n }\n\n async *events(runId: string): AsyncGenerator<WatchEvent> {\n if (this.mock) {\n yield* this.engine().events(runId);\n return;\n }\n const fetchFn = this.fetchImpl ?? globalThis.fetch;\n const resp = await fetchFn(`${this.baseUrl}/v1/runs/${runId}/events`, {\n headers: {\n Authorization: `Bearer ${this.key()}`,\n Accept: \"text/event-stream\",\n \"User-Agent\": USER_AGENT,\n },\n });\n if (!resp.ok || !resp.body) {\n let payload: Json | undefined;\n try {\n payload = await resp.json();\n } catch {\n payload = undefined;\n }\n throw errorFromEnvelope(resp.status, payload as any);\n }\n const reader = resp.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let eventType: string | undefined;\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let idx: number;\n while ((idx = buffer.indexOf(\"\\n\")) >= 0) {\n const line = buffer.slice(0, idx).trim();\n buffer = buffer.slice(idx + 1);\n if (!line) {\n eventType = undefined;\n continue;\n }\n if (line.startsWith(\"event:\")) {\n eventType = line.slice(6).trim();\n } else if (line.startsWith(\"data:\")) {\n try {\n const data = JSON.parse(line.slice(5).trim());\n if (data.status === undefined) {\n data.status = eventType === \"episode\" ? \"running\" : (eventType ?? \"running\");\n }\n yield data as WatchEvent;\n } catch {\n // ignore malformed frames\n }\n }\n }\n }\n }\n}\n\n// -- Policies ------------------------------------------------------------------\n\n/** Three constructors, each with a declared contract, validated before any motor moves. */\nexport const Policy = {\n /** A container image we run in-facility, GPU-adjacent. */\n container(opts: Omit<ContainerPolicy, \"type\">): ContainerPolicy {\n return { type: \"container\", ...opts };\n },\n /** A checkpoint on a known runtime (`openpi`, `lerobot`). */\n checkpoint(opts: Omit<CheckpointPolicy, \"type\">): CheckpointPolicy {\n return { type: \"checkpoint\", ...opts };\n },\n /** Customer-hosted inference; measured RTT is logged per step. */\n endpoint(opts: Omit<EndpointPolicy, \"type\">): EndpointPolicy {\n return { type: \"endpoint\", latency_budget_ms: 80, fallback: \"halt\", ...opts };\n },\n} as const;\n\n// -- Run handles ---------------------------------------------------------------\n\nclass BaseRunHandle {\n protected data: RunData;\n\n constructor(\n protected transport: Transport,\n data: RunData,\n ) {\n this.data = data;\n }\n\n get id(): string {\n return this.data.id;\n }\n\n get kind(): RunKind {\n return this.data.kind;\n }\n\n get status(): RunStatus {\n return this.data.status;\n }\n\n get resolved_pins(): Record<string, string> {\n return this.data.resolved_pins ?? {};\n }\n\n /** The full wire payload, for forward compatibility. */\n get raw(): RunData {\n return this.data;\n }\n\n async refresh(): Promise<this> {\n this.data = await this.transport.request(\"GET\", `/v1/runs/${this.id}`);\n return this;\n }\n\n protected raiseIfStopped(): void {\n const error = (this.data as Json).error;\n if (this.data.status === \"stopped\" && error) {\n throw errorFromEnvelope(402, { error });\n }\n }\n}\n\n/** A created or fetched run. `result()` resolves once the run completes. */\nexport class RunHandle extends BaseRunHandle {\n /** `n`, `success_rate`, `ci95`, clusters, both meters, `cost_usd`. */\n async result(): Promise<Result> {\n await this.refresh();\n this.raiseIfStopped();\n return (this.data.result ?? {}) as Result;\n }\n\n /** Per-episode artifacts: `video_url`, `mcap_url`, `replay_spec`. */\n async episodes(): Promise<Episode[]> {\n const payload = await this.transport.request(\"GET\", `/v1/runs/${this.id}/episodes`);\n return payload.data ?? [];\n }\n\n /** Live events: episode ticker plus WebRTC stream URLs. No polling. */\n watch(): AsyncGenerator<WatchEvent> {\n return this.transport.events(this.id);\n }\n\n /** Dataset export: `lerobot`, `rlds`, or `mcap-bundle`. */\n async export(opts: { format: ExportFormat }): Promise<Export> {\n return this.transport.request(\"POST\", `/v1/runs/${this.id}/export`, {\n body: { format: opts.format },\n });\n }\n\n /** The deployment verification report, citable. */\n async report(opts: { format?: \"json\" | \"pdf\" } = {}): Promise<Report> {\n return this.transport.request(\"GET\", `/v1/runs/${this.id}/report`, {\n params: { format: opts.format ?? \"pdf\" },\n });\n }\n}\n\n/** A versioned suite evaluation (`kind: \"eval\"`) with a citable attestation. */\nexport class EvalRunHandle extends RunHandle {\n get citation(): string | undefined {\n return (this.data as Json).citation;\n }\n\n get attestation(): string | undefined {\n return (this.data as Json).attestation;\n }\n\n get attestation_url(): string | undefined {\n return (this.data as Json).attestation_url;\n }\n\n get per_task(): Json[] {\n return (this.data as Json).per_task ?? [];\n }\n}\n\n/** A paired A/B comparison (`kind: \"compare\"`). */\nexport class CompareRunHandle extends RunHandle {\n get winner(): string | undefined {\n return (this.data as Json).winner;\n }\n\n get p_value(): number | undefined {\n return (this.data as Json).p_value;\n }\n\n get effect_pts(): number | undefined {\n return (this.data as Json).effect_pts;\n }\n\n get results(): Record<string, Result> {\n return (this.data as Json).results ?? {};\n }\n}\n\n/** Physical verification of sim-flagged scenarios (`kind: \"verify\"`). */\nexport class VerifyRunHandle extends RunHandle {\n /** Where reality matched sim predictions. */\n get sim_agreement(): number | undefined {\n return (this.data as Json).sim_agreement;\n }\n\n /** Scenario ids where reality diverged. */\n get disagreements(): string[] {\n return (this.data as Json).disagreements ?? [];\n }\n\n get ground_truth_url(): string | undefined {\n return (this.data as Json).ground_truth_url;\n }\n}\n\n/** An outcome contract (`kind: \"threshold\"`). The hardware calls you. */\nexport class ThresholdContractHandle extends RunHandle {\n /** Register the webhook fired after verification-tier confirmation. */\n async onVerified(opts: { webhook: string }): Promise<this> {\n this.data = await this.transport.request(\"POST\", `/v1/runs/${this.id}/on-verified`, {\n body: { webhook: opts.webhook },\n });\n return this;\n }\n}\n\n/** A transfer-gap measurement (`kind: \"transfer\"`). */\nexport class TransferRunHandle extends BaseRunHandle {\n /** Source vs. target statistics and the failure clusters transfer opened. */\n async report(): Promise<TransferReport> {\n await this.refresh();\n this.raiseIfStopped();\n return ((this.data as Json).transfer ?? {}) as TransferReport;\n }\n}\n\n/** An embodiment × environment sweep (`kind: \"matrix\"`). */\nexport class MatrixRunHandle extends RunHandle {\n get cells(): MatrixCell[] {\n return (this.data as Json).cells ?? [];\n }\n\n /** Embodiment × environment grid of rate ± CI per cell. */\n async heatmap(): Promise<Heatmap> {\n const grid: Heatmap = {};\n for (const cell of this.cells) {\n (grid[cell.robot] ??= {})[cell.environment] = {\n n: cell.n,\n success_rate: cell.success_rate,\n ci95: cell.ci95,\n status: cell.status,\n };\n }\n return grid;\n }\n\n /** Cells that degraded vs. a prior release run. */\n async regressions(opts: { vs: string }): Promise<MatrixRegression[]> {\n await this.refresh();\n return (this.data as Json).regressions ?? [];\n }\n\n /** The release-gate deliverable (PDF). */\n async verificationReport(opts: { format?: \"json\" | \"pdf\" } = {}): Promise<Report> {\n return this.report(opts);\n }\n\n /** Overall stats plus the grid and per-stage/per-instruction breakdowns. */\n async result(): Promise<MatrixResult> {\n await this.refresh();\n this.raiseIfStopped();\n return {\n ...((this.data.result ?? {}) as Result),\n heatmap: await this.heatmap(),\n cells: this.cells,\n };\n }\n}\n\nfunction makeRunHandle(transport: Transport, data: RunData): BaseRunHandle {\n switch (data.kind) {\n case \"eval\":\n return new EvalRunHandle(transport, data);\n case \"compare\":\n return new CompareRunHandle(transport, data);\n case \"verify\":\n return new VerifyRunHandle(transport, data);\n case \"threshold\":\n return new ThresholdContractHandle(transport, data);\n case \"transfer\":\n return new TransferRunHandle(transport, data);\n case \"matrix\":\n return new MatrixRunHandle(transport, data);\n default:\n return new RunHandle(transport, data);\n }\n}\n\n// -- Task / kit handles ----------------------------------------------------------\n\n/**\n * A Task Spec: declarative, versioned, instrument-bound.\n * Lifecycle: `draft` → `pilot()` → `amend()` → `freeze()` → immutable `name@vN`.\n */\nexport class TaskHandle {\n private data: TaskData;\n\n constructor(\n private transport: Transport,\n data: TaskData,\n ) {\n this.data = data;\n }\n\n get id(): string {\n return this.data.id;\n }\n\n get name(): string {\n return this.data.name;\n }\n\n get status(): \"draft\" | \"piloting\" | \"frozen\" {\n return this.data.status;\n }\n\n /** Frozen revision id (`espresso@v1`); null until frozen. */\n get rev(): string | null {\n return this.data.rev;\n }\n\n get visibility(): \"private\" | \"published\" {\n return this.data.visibility;\n }\n\n get raw(): TaskData {\n return this.data;\n }\n\n /** Run the calibration session; the returned `stream_url` is live. */\n async pilot(opts: { robot: string; episodes?: number }): Promise<Pilot> {\n const pilot = await this.transport.request(\"POST\", `/v1/tasks/${this.id}/pilot`, {\n body: { robot: opts.robot, episodes: opts.episodes ?? 25 },\n });\n this.data.status = \"piloting\";\n return pilot;\n }\n\n /** Iterate on the method while piloting. Omitted fields are unchanged. */\n async amend(fields: Partial<TaskCreateParams>): Promise<this> {\n this.data = await this.transport.request(\"POST\", `/v1/tasks/${this.id}/amend`, {\n body: cleanBody(fields),\n });\n return this;\n }\n\n /** Freeze to an immutable, co-signed revision (`name@vN`). */\n async freeze(): Promise<this> {\n this.data = await this.transport.request(\"POST\", `/v1/tasks/${this.id}/freeze`, {\n body: {},\n });\n return this;\n }\n}\n\n/** A kit of customer hardware, with live follow-ups. */\nexport class KitHandle {\n private data: KitData;\n\n constructor(\n private transport: Transport,\n data: KitData,\n ) {\n this.data = data;\n }\n\n get id(): string {\n return this.data.id;\n }\n\n get name(): string {\n return this.data.name;\n }\n\n /** `registered → received → tracked → available` (as `kit/<name>`). */\n get status(): KitData[\"status\"] {\n return this.data.status;\n }\n\n get environment_ref(): string | null | undefined {\n return this.data.environment_ref;\n }\n\n get raw(): KitData {\n return this.data;\n }\n\n /** The inbound shipping label to the facility (URL). */\n async shippingLabel(): Promise<string> {\n const payload = await this.transport.request(\n \"GET\",\n `/v1/kits/${this.id}/shipping-label`,\n );\n return payload.url ?? \"\";\n }\n}\n\n// -- The client -----------------------------------------------------------------\n\n/**\n * The Roborama client. Reads `ROBORAMA_API_KEY` from the environment;\n * mirrors the Python surface method for method.\n */\nexport class Roborama {\n /** Policy constructors: `Roborama.Policy.checkpoint({...})`, etc. */\n static readonly Policy = Policy;\n\n private transport: Transport;\n\n readonly runs: {\n /** `POST /v1/runs`; `kind` selects the primitive (default `run`). */\n create(params: CreateRunParams): Promise<RunHandle>;\n create(params: CreateEvalParams): Promise<EvalRunHandle>;\n create(params: CreateVerifyParams): Promise<VerifyRunHandle>;\n create(params: CreateMatrixParams): Promise<MatrixRunHandle>;\n create(params: CreateThresholdParams): Promise<ThresholdContractHandle>;\n create(params: CreateCompareParams): Promise<CompareRunHandle>;\n create(params: CreateTransferParams): Promise<TransferRunHandle>;\n create(params: RunCreateParams): Promise<RunHandle>;\n get(runId: string): Promise<RunHandle>;\n list(params?: { kind?: RunKind; status?: RunStatus; limit?: number }): Promise<RunHandle[]>;\n };\n\n /** Physical verification of sim-flagged scenarios (`runs.create` with `kind: \"verify\"`). */\n readonly verifications: {\n create(params: Omit<CreateVerifyParams, \"kind\">): Promise<VerifyRunHandle>;\n };\n\n /** Embodiment × environment sweeps (`runs.create` with `kind: \"matrix\"`). */\n readonly matrices: {\n create(params: Omit<CreateMatrixParams, \"kind\">): Promise<MatrixRunHandle>;\n };\n\n readonly robots: { list(): Promise<Robot[]> };\n readonly environments: { list(params?: { cls?: string }): Promise<Environment[]> };\n readonly suites: { list(): Promise<Suite[]> };\n readonly gates: { create(params: GateCreateParams): Promise<Gate> };\n readonly streams: { get(cell: string): Promise<Stream> };\n readonly keys: {\n create(params: { scope: readonly KeyScope[] }): Promise<Key>;\n list(): Promise<Key[]>;\n };\n readonly budgets: {\n set(params: { monthly_usd: number; hard?: boolean }): Promise<Budget>;\n };\n readonly data: { purge(runId: string): Promise<PurgeReceipt> };\n readonly calibration: { export(params: CalibrationExportParams): Promise<Export> };\n readonly tasks: {\n create(params: TaskCreateParams): Promise<TaskHandle>;\n get(taskId: string): Promise<TaskHandle>;\n list(): Promise<TaskHandle[]>;\n };\n readonly kits: {\n register(params: KitCreateParams): Promise<KitHandle>;\n get(kitId: string): Promise<KitHandle>;\n };\n readonly scenarios: {\n /** Load PolaRiS / Isaac / world-model exports or layout-replay specs. */\n fromFile(path: string): Promise<Record<string, unknown>>;\n };\n\n constructor(options: RoboramaOptions = {}) {\n const transport = new Transport(options);\n this.transport = transport;\n\n this.runs = {\n create: (async (params: RunCreateParams) => {\n const body = cleanBody(params as Json);\n body.kind = body.kind ?? \"run\";\n const data = await transport.request(\"POST\", \"/v1/runs\", { body });\n return makeRunHandle(transport, data);\n }) as Roborama[\"runs\"][\"create\"],\n get: async (runId: string) => {\n const data = await transport.request(\"GET\", `/v1/runs/${runId}`);\n return makeRunHandle(transport, data) as RunHandle;\n },\n list: async (params = {}) => {\n const payload = await transport.request(\"GET\", \"/v1/runs\", { params });\n return (payload.data ?? []).map(\n (r: RunData) => makeRunHandle(transport, r) as RunHandle,\n );\n },\n };\n\n this.verifications = {\n create: (params) =>\n this.runs.create({ ...params, kind: \"verify\" } as CreateVerifyParams),\n };\n this.matrices = {\n create: (params) =>\n this.runs.create({ ...params, kind: \"matrix\" } as CreateMatrixParams),\n };\n\n this.robots = {\n list: async () => (await transport.request(\"GET\", \"/v1/robots\")).data ?? [],\n };\n this.environments = {\n list: async (params = {}) =>\n (await transport.request(\"GET\", \"/v1/environments\", { params })).data ?? [],\n };\n this.suites = {\n list: async () => (await transport.request(\"GET\", \"/v1/suites\")).data ?? [],\n };\n this.gates = {\n create: (params) =>\n transport.request(\"POST\", \"/v1/gates\", { body: cleanBody(params as Json) }),\n };\n this.streams = {\n get: (cell) => transport.request(\"GET\", `/v1/streams/${cell}`),\n };\n this.keys = {\n create: (params) =>\n transport.request(\"POST\", \"/v1/keys\", { body: { scope: params.scope } }),\n list: async () => (await transport.request(\"GET\", \"/v1/keys\")).data ?? [],\n };\n this.budgets = {\n set: (params) =>\n transport.request(\"PUT\", \"/v1/budgets\", {\n body: { monthly_usd: params.monthly_usd, hard: params.hard ?? false },\n }),\n };\n this.data = {\n purge: (runId) => transport.request(\"DELETE\", `/v1/data/${runId}`),\n };\n this.calibration = {\n export: (params) =>\n transport.request(\"POST\", \"/v1/calibration/exports\", {\n body: cleanBody(params as Json),\n }),\n };\n this.tasks = {\n create: async (params) => {\n const data = await transport.request(\"POST\", \"/v1/tasks\", {\n body: cleanBody(params as Json),\n });\n return new TaskHandle(transport, data);\n },\n get: async (taskId) => {\n const data = await transport.request(\"GET\", `/v1/tasks/${taskId}`);\n return new TaskHandle(transport, data);\n },\n list: async () => {\n const payload = await transport.request(\"GET\", \"/v1/tasks\");\n return (payload.data ?? []).map((t: TaskData) => new TaskHandle(transport, t));\n },\n };\n this.kits = {\n register: async (params) => {\n const data = await transport.request(\"POST\", \"/v1/kits\", {\n body: cleanBody(params as Json),\n });\n return new KitHandle(transport, data);\n },\n get: async (kitId) => {\n const data = await transport.request(\"GET\", `/v1/kits/${kitId}`);\n return new KitHandle(transport, data);\n },\n };\n this.scenarios = {\n fromFile: async (path: string) => {\n const { readFile } = await import(\"node:fs/promises\");\n const parsed = JSON.parse(await readFile(path, \"utf8\"));\n return Array.isArray(parsed) ? { scenarios: parsed } : parsed;\n },\n };\n }\n\n /** Whether this client is in mock mode. */\n get mock(): boolean {\n return this.transport.mock;\n }\n\n get baseUrl(): string {\n return this.transport.baseUrl;\n }\n\n /** Both meters, dollars, and a queue ETA — before you commit. */\n async quote(params: QuoteParams): Promise<Quote> {\n return this.transport.request(\"POST\", \"/v1/quote\", {\n body: cleanBody(params as Json),\n });\n }\n\n /** Metered usage for a period (`YYYY-MM`): hours by tier, dollars, budget. */\n async usage(params: { period?: string } = {}): Promise<Usage> {\n return this.transport.request(\"GET\", \"/v1/usage\", {\n params: { period: params.period },\n });\n }\n}\n"],"mappings":"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","names":["q"]}