60 lines
2.0 KiB
Swift
60 lines
2.0 KiB
Swift
import Foundation
|
|
|
|
public nonisolated struct ExternalToolCall: Identifiable, Hashable, Sendable {
|
|
public nonisolated enum Risk: String, Hashable, Sendable, Codable {
|
|
case readOnly, modifiesState, destructive
|
|
|
|
public var label: String {
|
|
switch self {
|
|
case .readOnly: String(localized: "Read-only")
|
|
case .modifiesState: String(localized: "Modifies state")
|
|
case .destructive: String(localized: "Destructive")
|
|
}
|
|
}
|
|
}
|
|
|
|
public nonisolated enum Status: String, Hashable, Sendable, Codable {
|
|
case running, ok, error, denied
|
|
}
|
|
|
|
public var id: UUID = UUID()
|
|
public var runID: UUID
|
|
public var clientName: String
|
|
public var toolName: String
|
|
public var hostID: Host.ID?
|
|
public var hostDisplayName: String?
|
|
public var summary: String
|
|
public var risk: Risk
|
|
public var status: Status = .running
|
|
public var exitCode: Int?
|
|
public var bytesRead: Int?
|
|
public var bytesWritten: Int?
|
|
public var startedAt: Date
|
|
public var finishedAt: Date?
|
|
|
|
public var duration: TimeInterval? {
|
|
finishedAt.map { $0.timeIntervalSince(startedAt) }
|
|
}
|
|
public init(
|
|
id: UUID = UUID(), runID: UUID, clientName: String, toolName: String, hostID: Host.ID? = nil,
|
|
hostDisplayName: String? = nil, summary: String, risk: Risk, status: Status = .running, exitCode: Int? = nil,
|
|
bytesRead: Int? = nil, bytesWritten: Int? = nil, startedAt: Date, finishedAt: Date? = nil
|
|
) {
|
|
self.id = id
|
|
self.runID = runID
|
|
self.clientName = clientName
|
|
self.toolName = toolName
|
|
self.hostID = hostID
|
|
self.hostDisplayName = hostDisplayName
|
|
self.summary = summary
|
|
self.risk = risk
|
|
self.status = status
|
|
self.exitCode = exitCode
|
|
self.bytesRead = bytesRead
|
|
self.bytesWritten = bytesWritten
|
|
self.startedAt = startedAt
|
|
self.finishedAt = finishedAt
|
|
}
|
|
|
|
}
|