Detail: voice chip click re-summarizes immediately; separate Re-summarize button removed (redundant)

This commit is contained in:
avi 2026-09-16 17:28:42 -05:00
commit 8f7e1f9ea5

View file

@ -840,17 +840,25 @@ fun DetailScreen(state: DesktopState) {
val hasSummary = detail.summary != null || val hasSummary = detail.summary != null ||
(report?.contains("## Summary") == true) (report?.contains("## Summary") == true)
val remoteKnown = state.remoteIdFor(detail.file) != null val remoteKnown = state.remoteIdFor(detail.file) != null
// Personality for the next summary: pick a voice, then hit // A voice chip IS the action: clicking one re-summarizes in
// Re-summarize. Neutral = the plain house voice. // that voice immediately — no separate Re-summarize button.
val sumBusy = detail.jobs.firstOrNull { it.jobType == "summarize" }
?.status in setOf("queued", "running")
val voicesEnabled = remoteKnown && hasTranscript && !sumBusy
Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {
Text("Summarize in the voice of", Text(if (hasSummary) "Re-summarize in the voice of"
else "Summarize in the voice of",
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant) color = MaterialTheme.colorScheme.onSurfaceVariant)
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
SUMMARIZE_PERSONAS.forEach { (label, tone) -> SUMMARIZE_PERSONAS.forEach { (label, tone) ->
FilterChip( FilterChip(
selected = sumTone == tone, selected = sumTone == tone,
onClick = { sumTone = tone }, enabled = voicesEnabled,
onClick = {
sumTone = tone
state.summarize(tone)
},
label = { Text(label) }, label = { Text(label) },
) )
} }
@ -860,13 +868,6 @@ fun DetailScreen(state: DesktopState) {
TextButton({ state.transcribe() }) { TextButton({ state.transcribe() }) {
Text(if (hasTranscript) "Re-transcribe" else "Transcribe") Text(if (hasTranscript) "Re-transcribe" else "Transcribe")
} }
TextButton({ state.summarize(sumTone) },
enabled = remoteKnown && hasTranscript) {
Text(buildString {
append(if (hasSummary) "Re-summarize" else "Summarize")
sumTone?.let { append(" · $it") }
})
}
} }
// Progress right where the buttons are: the busy spinner near // Progress right where the buttons are: the busy spinner near
// the top is off-screen once a report fills the page, which // the top is off-screen once a report fills the page, which