import { API_BASE } from "./constants"; import type { EnvCatalog, EnvObservation, ResetEnvOptions, StepCandidatePayload, StepResponse, } from "./types"; async function fetchJson(path: string, init?: RequestInit): Promise { const res = await fetch(`${API_BASE}${path}`, init); if (!res.ok) { const body = await res.text(); throw new Error(`API ${path} failed (${res.status}): ${body.slice(0, 240)}`); } return (await res.json()) as T; } export async function fetchCatalog(): Promise { return fetchJson("/env/catalog"); } export async function resetEnv(options: ResetEnvOptions = {}): Promise { return fetchJson("/env/reset", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(options), }); } export async function orchestrateStep(): Promise> { return fetchJson>("/agents/orchestrate", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({}), }); } export async function stepCandidate(payload: StepCandidatePayload): Promise { return fetchJson("/env/step_candidate", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload), }); } export async function fetchTrace(): Promise>> { return fetchJson>>("/env/trace"); } export async function fetchTrainingMetrics(): Promise> { return fetchJson>("/metrics/training"); } export async function fetchBaselines(): Promise> { return fetchJson>("/eval/run_baselines", { method: "POST" }); } export async function fetchRewardBreakdown(): Promise> { return fetchJson>("/env/reward_breakdown"); } export async function fetchLegalActions(): Promise>> { return fetchJson>>("/env/legal_actions"); } export async function fetchUncertainty(): Promise> { return fetchJson>("/env/uncertainty"); } export async function fetchDosingEval(): Promise> { return fetchJson>("/eval/run_dosing", { method: "POST" }); }