Fleet Management
Fleet management aggregates all active agent sessions into a single dashboard.
FleetManaging Protocol
public protocol FleetManaging: AnyObject {
var sessions: [any AgentSessionRepresentable] { get }
var stats: FleetStats { get }
var onFleetChange: (() -> Void)? { get set }
func register(_ session: any AgentSessionRepresentable)
func unregister(sessionId: String)
func session(byId id: String) -> (any AgentSessionRepresentable)?
}
Fleet Statistics
public struct FleetStats {
let totalSessions: Int
let activeSessions: Int
let needsInputCount: Int
let errorCount: Int
let totalCost: Decimal
let costByProvider: [AgentProvider: Decimal]
let sessionsByState: [AgentState: Int]
}
Usage
let fleet = FleetManager()
// Register sessions as they start
fleet.register(session1)
fleet.register(session2)
// Query fleet state
print("Active: \(fleet.stats.activeSessions)")
print("Total cost: $\(fleet.stats.totalCost)")
print("Needs input: \(fleet.stats.needsInputCount)")
// React to changes
fleet.onFleetChange = {
updateUI(fleet.stats)
}
Session Representation
Each session in the fleet exposes a read-only view:
public protocol AgentSessionRepresentable {
var sessionId: String { get }
var agentInfo: AgentInfo? { get }
var state: AgentState { get }
var totalCost: Decimal { get }
var projectPath: String? { get }
var startTime: Date { get }
var lastEventTime: Date? { get }
}