Show the terminal immediately when opening the Terminal tab

This commit is contained in:
Ian Gulliver
2026-10-21 15:05:09 -07:00
parent 47b62763ce
commit 4b4763779d
8 changed files with 420 additions and 414 deletions
+23
View File
@@ -60,6 +60,7 @@ final class Store {
var tasks: [String: [ByreTask]] = [:]
var sessions: [String: [AgentSession]] = [:]
var inbox: [InboxItem] = []
private(set) var terminals: [String: [TaskTerminal]] = [:]
private(set) var selectedTaskId: String?
var pinned: Int?
var connected = false
@@ -85,6 +86,7 @@ final class Store {
private var taskFeeds: [String: Feed] = [:]
@ObservationIgnored private var historyLoads: Set<ObjectIdentifier> = []
@ObservationIgnored private var requestSeqs: [String: Int] = [:]
@ObservationIgnored private var terminalChanges = 0
@ObservationIgnored private var globalStream: EventStream?
@ObservationIgnored private var leadStream: EventStream?
@ObservationIgnored private var stopped = false
@@ -367,6 +369,20 @@ final class Store {
drafts?.prune(self)
}
func loadTerminals() async throws {
let latest = claimRequest("terminals")
let changes = terminalChanges
let list = try await api.client.listTerminals().ok.body.json
if !latest() {
return
}
if changes != terminalChanges {
try await loadTerminals()
return
}
terminals = Dictionary(grouping: list.terminals, by: \.taskId)
}
func loadLeadSessions() async throws {
leadSessions = try await api.client.listLeadSessions().ok.body.json
}
@@ -607,6 +623,9 @@ final class Store {
}, onState: { [weak self] up in
self?.connected = up
if up {
self?.spawn("load terminals") {
try await self?.loadTerminals()
}
self?.paneFocus.reconnected()
reconnected()
}
@@ -632,6 +651,10 @@ final class Store {
taskFeeds[taskId]?.push(ev)
confirmSend(taskId, ev)
}
if ev.kind == "terminals.changed", let taskId = ev.taskId {
terminalChanges += 1
terminals[taskId] = try! decodePayload(ev.payload, as: TerminalList.self).terminals
}
if ev.seq == 0 {
events.send(ev)
return