Native macOS counterpart to the web Omega agent, connecting directly to the OpenAI API and TPMJS tool registry (1M+ AI-ready tools). - SwiftUI app targeting macOS 15+ with dark theme - Full agentic loop: auto-discover tools via BM25, stream OpenAI responses, execute tools via remote sandbox, loop up to 10x - SwiftData persistence for conversations, messages, tool runs - Keychain storage for API keys and environment variables - SSE streaming via URLSession.bytes with custom parser - Actor-based services (OpenAIService, TPMJSRegistryService) - NavigationSplitView layout with sidebar + chat detail - MarkdownUI for rendering assistant responses - Settings: API key, model picker, env vars, custom system prompt - Keyboard shortcuts: Cmd+N new chat, Cmd+, settings, Enter send Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
51 lines
1.2 KiB
Swift
51 lines
1.2 KiB
Swift
import Foundation
|
|
import SwiftData
|
|
|
|
@Model
|
|
final class ToolCallRecord {
|
|
var id: UUID
|
|
var toolName: String
|
|
var toolCallId: String
|
|
var status: String // "running" | "success" | "error"
|
|
var inputJSON: Data?
|
|
var outputJSON: Data?
|
|
var errorMessage: String?
|
|
var executionTimeMs: Int?
|
|
var createdAt: Date
|
|
var completedAt: Date?
|
|
|
|
var conversation: Conversation?
|
|
|
|
init(
|
|
toolName: String,
|
|
toolCallId: String,
|
|
conversation: Conversation? = nil
|
|
) {
|
|
self.id = UUID()
|
|
self.toolName = toolName
|
|
self.toolCallId = toolCallId
|
|
self.status = "running"
|
|
self.createdAt = Date()
|
|
self.conversation = conversation
|
|
}
|
|
|
|
var input: JSONValue? {
|
|
get {
|
|
guard let data = inputJSON else { return nil }
|
|
return try? JSONDecoder().decode(JSONValue.self, from: data)
|
|
}
|
|
set {
|
|
inputJSON = try? JSONEncoder().encode(newValue)
|
|
}
|
|
}
|
|
|
|
var output: JSONValue? {
|
|
get {
|
|
guard let data = outputJSON else { return nil }
|
|
return try? JSONDecoder().decode(JSONValue.self, from: data)
|
|
}
|
|
set {
|
|
outputJSON = try? JSONEncoder().encode(newValue)
|
|
}
|
|
}
|
|
}
|