Status: Accepted Date: 2026-07-22 (recorded retroactively; stated in FOUNDATION)
Upstream Hermes WebUI has no translation layer, and does not need one: one team owns both the agent and the UI, so payload shapes simply match.
ARES aggregates several runtimes whose payloads differ in field names, source vocabulary, and provenance. Without normalization, framework concepts leak into components and every new worker becomes a UI change.
frontend/src/shared/translators.ts converts backend payloads into ARES-owned
contracts declared in frontend/src/shared/contracts.ts. Components consume only
contracts. FOUNDATION states this as a hard boundary.
Good:
translators.test.ts.Costs:
source was derived from a fallback chain that reached
source_label, a display string ("Claude Code"). Sidebar filters compare
against machine values, so every CLI session was misfiled and the CLI tab
read 0. One wrong line in the translator emptied a whole surface.source_label, title, human labels).session_source) over raw values.Never, while ARES supports more than one runtime. The layer is the reason the UI is worker-agnostic.