Show the terminal immediately when opening the Terminal tab
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user