@@ -209,24 +209,23 @@ class ChatViewModel(
209 // would be lost forever. The persisted draft is cleared only on success.
209 // would be lost forever. The persisted draft is cleared only on success.
210 _draft.value = ""
210 _draft.value = ""
211 viewModelScope.launch {
211 viewModelScope.launch {
212− val ok = runCatching {
212+ runCatching {
213 conn.repository.sendPrompt(
213 conn.repository.sendPrompt(
214 sessionId,
214 sessionId,
216 model = _selectedModel.value?.ref,
216 model = _selectedModel.value?.ref,
217 agent = _selectedAgent.value,
217 agent = _selectedAgent.value,
219− }.isSuccess
219+ }.onFailure {
220− _running.value = false
222 _failedDraft.value = trimmed
220 _failedDraft.value = trimmed
223 // Only restore the draft if the user hasn't typed anything new since.
221 // Only restore the draft if the user hasn't typed anything new since.
224 if (_draft.value.isBlank()) updateDraft(trimmed)
222 if (_draft.value.isBlank()) updateDraft(trimmed)
225− _error.value = container.string(R.string.error_failed_to_send)
223+ _error.value = container.friendlyError(it)
226− } else {
224+ }.onSuccess {
227 // Send succeeded — now it's safe to persist the empty draft.
225 // Send succeeded — now it's safe to persist the empty draft.
228 container.draftStore.set(sessionId, "")
226 container.draftStore.set(sessionId, "")
228+ _running.value = false
231 return true
230 return true