// POST `/api/model` / `/api/effort` — same-origin (this agent's own // backend), so a plain `fetch` is safe unlike pause/resume (see // pauseAction.ts). `redirect: 'manual'` + the broad "ok" check below is // ported from app.js unchanged — the endpoints don't actually redirect // today, but treating an opaque redirect as success costs nothing and // matches the existing contract exactly. async function post( path: string, field: string, value: string, ): Promise<{ ok: boolean; detail?: string }> { try { const resp = await fetch(path, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ [field]: value }), redirect: "manual", }); const ok = resp.ok || resp.type === "opaqueredirect" || (resp.status >= 200 && resp.status < 400); if (ok) return { ok: true }; const detail = await resp.text().catch(() => ""); return { ok: false, detail: `http ${resp.status}${detail ? " — " + detail : ""}`, }; } catch (err) { return { ok: false, detail: err instanceof Error ? err.message : String(err), }; } } export const postModel = (name: string) => post("api/model", "model", name); export const postEffort = (level: string) => post("api/effort", "effort", level);