Files
Termind/Frameworks/TermindDomain/Agent/ExternalToolCall.swift
T

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
}
}