The Prompter frontend and backend were built against mismatched contracts:
- createSession POSTed no body (the endpoint requires one) and read a
`session_id` field the response doesn't have (it is `id`), so every session
create returned 422.
- sendMessage hit `/sessions/{id}/chat` with `{message}` and expected a
`{reply, draft}` object, but the session endpoint is `/sessions/{id}/messages`
with `{content}` and returns the full message list.
- API errors rendered as "[object Object]" because getErrorMessage String()'d a
FastAPI validation array.
Point createSession/sendMessage at the real endpoints, adapt the message-list
response (latest assistant message is the reply; fetch the structured draft when
the reply signals readiness), and make getErrorMessage format string /
validation-array / structured-object details into a readable line.