ferrox-api
The wire contract between ferrox-server and its clients.
Route constants and serde DTOs shared by the server, Ferrox Studio (the
separate web app in ui/), the desktop shell that spawns the server,
and ferrox chat. A path or a payload shape gets exactly one
definition instead of one per end.
Contents:
routes: every path the server serves, named once.health: the three-state/healthhandshake (ready,detecting,unavailable) with a machine reason code and a human sentence per capability.lifecycle: theferrox.server.readystdout line carrying the address the server ended up bound to and its pid, which is what makes--port 0usable by a supervising process.usage: token accounting plus llama.cpp-style timings, with prefill and decode kept separate.request_id: server-assigned ids, stated in the first streamed chunk.progress: a rolling-window transfer rate and ETA that reports nothing until it has something true to report.
Depends on serde and nothing else, so a CLI, a desktop shell and a browser-targeted frontend all link it.