Skip to main content
Glama
AutomationEventLogger.swift1.23 kB
import Foundation import os enum AutomationLogCategory: String, CaseIterable { case scroll = "Scroll" case gesture = "Gesture" case drag = "Drag" case cursor = "Focus" case window = "Window" case app = "App" case dock = "Dock" case menu = "Menu" case open = "Open" case space = "Space" case agent = "Agent" case mcp = "MCP" case dialog = "Dialog" } enum AutomationEventLogger { private static let subsystem = "boo.peekaboo.playground" private static var loggers: [AutomationLogCategory: os.Logger] = [:] private static let lock = NSLock() static func log(_ category: AutomationLogCategory, _ message: some StringProtocol) { let logger = self.logger(for: category) let text = String(message) logger.info("\(text, privacy: .public)") } private static func logger(for category: AutomationLogCategory) -> os.Logger { self.lock.lock() defer { self.lock.unlock() } if let existing = self.loggers[category] { return existing } let logger = os.Logger(subsystem: self.subsystem, category: category.rawValue) self.loggers[category] = logger return logger } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/steipete/Peekaboo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server