Allow sending queued messages when a task is stopped

This commit is contained in:
Ian Gulliver
2026-10-23 21:29:50 -07:00
parent 5987e764c4
commit d13e1f695f
6 changed files with 530 additions and 368 deletions
+26 -1
View File
@@ -521,6 +521,19 @@ final class ChatModel {
}
}
var canSendQueued: Bool {
taskId != nil && !closed && !stopping && !paused && session?.state != .running
}
func sendQueued(_ p: PendingSend, _ overlays: Overlays) async {
guard let taskId, let inputId = p.inputId else { return }
do {
_ = try await store.api.client.sendQueuedMessage(path: .init(taskId: taskId, inputId: Int64(inputId))).noContent
} catch {
overlays.showAlert(errorText(error))
}
}
func withdraw(_ p: PendingSend, _ overlays: Overlays) async {
guard let taskId, let inputId = p.inputId else {
return
@@ -1126,6 +1139,7 @@ private struct PendingView: View {
let model: ChatModel
@Environment(Overlays.self) private var overlays
@ViewState private var withdrawing = false
@ViewState private var sending = false
var body: some View {
TrailingBubble {
@@ -1135,6 +1149,17 @@ private struct PendingView: View {
.font(Fonts.font(11, italic: true))
.foregroundStyle(Palette.muted)
if pending.inputId != nil {
if model.canSendQueued {
Button("Send") {
sending = true
Task {
await model.sendQueued(pending, overlays)
sending = false
}
}
.buttonStyle(WebButtonStyle())
.disabled(sending || withdrawing)
}
Button("×") {
withdrawing = true
Task {
@@ -1143,7 +1168,7 @@ private struct PendingView: View {
}
}
.buttonStyle(ThumbRemoveStyle())
.disabled(withdrawing)
.disabled(withdrawing || sending)
.help("Take this message back into the composer")
}
}