@@ -209,24 +209,23 @@ class ChatViewModel(
209209 // would be lost forever. The persisted draft is cleared only on success.
210210 _draft.value = ""
211211 viewModelScope.launch {
212− val ok = runCatching {
212+ runCatching {
213213 conn.repository.sendPrompt(
214214 sessionId,
215215 trimmed,
216216 model = _selectedModel.value?.ref,
217217 agent = _selectedAgent.value,
218218 )
219− }.isSuccess
220− _running.value = false
221− if (!ok) {
219+ }.onFailure {
222220 _failedDraft.value = trimmed
223221 // Only restore the draft if the user hasn't typed anything new since.
224222 if (_draft.value.isBlank()) updateDraft(trimmed)
225− _error.value = container.string(R.string.error_failed_to_send)
226− } else {
223+ _error.value = container.friendlyError(it)
224+ }.onSuccess {
227225 // Send succeeded — now it's safe to persist the empty draft.
228226 container.draftStore.set(sessionId, "")
229227 }
228+ _running.value = false
230229 }
231230 return true
232231 }