// Same-origin fetch POST helpers for the term-input slash commands — // same shape as modelEffort.ts's `post()` ({ ok, detail } rather than // throwing), reused by TermInput.tsx. async function post( path: string, body?: URLSearchParams, ): Promise<{ ok: boolean; detail?: string }> { try { const resp = await fetch(path, { method: "POST", headers: body ? { "Content-Type": "application/x-www-form-urlencoded" } : undefined, body, 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 postCancelTurn = () => post("api/cancel"); export const postCompact = () => post("api/compact"); export const postNewSession = () => post("api/new-session"); export const postLogout = () => post("api/logout"); export const postSend = (body: string) => post("send", new URLSearchParams({ body }));