timer on tool call run

This commit is contained in:
Ian Gulliver
2026-10-18 08:50:34 -07:00
parent 6bcde13b2f
commit 931d1b9a96
2 changed files with 28 additions and 7 deletions
+23 -6
View File
@@ -945,7 +945,7 @@ struct RowView: View {
} content: {
VStack(alignment: .leading, spacing: 6) {
PreBox(text: input)
ToolResult(result: row.result, unfinished: row.unfinished)
ToolResult(result: row.result, unfinished: row.unfinished, started: row.started)
}
.padding(.vertical, 6)
}
@@ -961,7 +961,7 @@ struct RowView: View {
ForEach(row.body!.rows) { child in
RowView(row: child, model: model, nested: true)
}
ToolResult(result: row.result, unfinished: row.unfinished)
ToolResult(result: row.result, unfinished: row.unfinished, started: row.started)
}
}
@@ -1026,17 +1026,34 @@ struct RowView: View {
private struct ToolResult: View {
let result: String?
let unfinished: Bool
let started: Date?
var body: some View {
if let result {
PreBox(text: result)
} else if unfinished || started == nil {
label(unfinished ? "no result" : "running…")
} else {
Text(unfinished ? "no result" : "running…")
.font(Fonts.font(12, italic: true))
.foregroundStyle(Palette.muted)
.padding(.vertical, 4)
TimelineView(.periodic(from: .now, by: 1)) { ctx in
label("running… \(elapsed(ctx.date.timeIntervalSince(started!)))")
}
}
}
private func label(_ text: String) -> some View {
Text(text)
.font(Fonts.font(12, italic: true))
.foregroundStyle(Palette.muted)
.padding(.vertical, 4)
}
private func elapsed(_ t: TimeInterval) -> String {
let s = max(0, Int(t))
if s < 60 {
return "\(s)s"
}
return "\(s / 60)m \(s % 60 < 10 ? "0" : "")\(s % 60)s"
}
}
private struct RunSummary: View {