tpmjs/apps/omega-mac/OmegaMac/Models/ToolCallRecord.swift
Thomas Davis 1cd44b4e97 feat: add Omega Mac native macOS SwiftUI chat app
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>
2026-02-09 21:29:39 +10:00

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