Merge nucleic/nimble-north-gecko into dev

This commit is contained in:
2026-06-15 19:19:57 -07:00
parent 161b772794
commit 136a22eb89
@@ -92,27 +92,48 @@ struct SessionDetailView: View {
if let approval = store.openApprovals.first { if let approval = store.openApprovals.first {
ApprovalCardView(approval: approval) ApprovalCardView(approval: approval)
.padding() .padding()
} else if let status = summary?.status, status == .awaitingInput || status.isTerminal { } else if let status = summary?.status {
HStack(spacing: 8) { let running = status == .running
TextField("Send a follow-up…", text: $draft, axis: .vertical) let canCompose = running || status == .awaitingInput || status.isTerminal
.textFieldStyle(.roundedBorder) VStack(spacing: 8) {
.lineLimit(1...4) // A follow-up submitted mid-turn, held by the host to send when the current
Button { // turn finishes.
store.sendInput(draft, to: sessionID) if let queued = summary?.queuedMessage, !queued.isEmpty {
draft = "" HStack(spacing: 6) {
} label: { Image(systemName: "clock").foregroundStyle(.secondary)
Image(systemName: "arrow.up.circle.fill").font(.title2) Text(queued).lineLimit(1).truncationMode(.tail)
.foregroundStyle(.secondary)
Spacer(minLength: 8)
}
.font(.footnote)
.frame(maxWidth: .infinity, alignment: .leading)
}
if running {
HStack(spacing: 8) {
ProgressView().controlSize(.small)
Text("Agent is working…").font(.footnote).foregroundStyle(.secondary)
Spacer()
}
.frame(maxWidth: .infinity, alignment: .leading)
}
if canCompose {
HStack(spacing: 8) {
TextField(running ? "Queue a follow-up…" : "Send a follow-up…",
text: $draft, axis: .vertical)
.textFieldStyle(.roundedBorder)
.lineLimit(1...4)
Button {
store.sendInput(draft, to: sessionID)
draft = ""
} label: {
Image(systemName: running ? "clock.arrow.circlepath" : "arrow.up.circle.fill")
.font(.title2)
}
.disabled(draft.trimmingCharacters(in: .whitespaces).isEmpty || !store.connectivity.isLive)
}
} }
.disabled(draft.trimmingCharacters(in: .whitespaces).isEmpty || !store.connectivity.isLive)
} }
.padding() .padding()
} else if summary?.status == .running {
HStack(spacing: 8) {
ProgressView().controlSize(.small)
Text("Agent is working…").font(.footnote).foregroundStyle(.secondary)
}
.frame(maxWidth: .infinity, alignment: .leading)
.padding()
} }
} }
} }