Skip to main content
Glama
Package.swift4.47 kB
// swift-tools-version: 6.2 import Foundation import PackageDescription let packageDirectory = URL(fileURLWithPath: #filePath).deletingLastPathComponent() let infoPlistPath = ProcessInfo.processInfo.environment["PEEKABOO_CLI_INFO_PLIST_PATH"] ?? packageDirectory.appendingPathComponent("Sources/Resources/Info.plist").path let concurrencyBaseSettings: [SwiftSetting] = [ .enableExperimentalFeature("StrictConcurrency"), .enableUpcomingFeature("ExistentialAny"), .enableUpcomingFeature("NonisolatedNonsendingByDefault"), .enableExperimentalFeature("RetroactiveConformances"), ] let cliConcurrencySettings = concurrencyBaseSettings + [ .defaultIsolation(MainActor.self), ] let swiftTestingSettings = cliConcurrencySettings + [ .enableExperimentalFeature("SwiftTesting"), ] let includeAutomationTests = ProcessInfo.processInfo.environment["PEEKABOO_INCLUDE_AUTOMATION_TESTS"] == "true" var targets: [Target] = [ .target( name: "PeekabooCLI", dependencies: [ .product(name: "Commander", package: "Commander"), .product(name: "MCP", package: "swift-sdk"), .product(name: "Spinner", package: "Spinner"), .product(name: "TauTUI", package: "TauTUI"), .product(name: "PeekabooCore", package: "PeekabooCore"), .product(name: "PeekabooXPC", package: "PeekabooCore"), .product(name: "Tachikoma", package: "Tachikoma"), .product(name: "TachikomaMCP", package: "Tachikoma"), .product(name: "Swiftdansi", package: "Swiftdansi"), ], path: "Sources/PeekabooCLI", swiftSettings: cliConcurrencySettings), .executableTarget( name: "peekaboo", dependencies: [ "PeekabooCLI", ], path: "Sources/PeekabooExec", swiftSettings: cliConcurrencySettings, linkerSettings: [ .unsafeFlags([ "-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__info_plist", "-Xlinker", infoPlistPath, // Ensure LC_UUID is generated for macOS 26 compatibility "-Xlinker", "-random_uuid", ]), ]), .testTarget( name: "CoreCLITests", dependencies: [ "PeekabooCLI", .product(name: "PeekabooFoundation", package: "PeekabooFoundation"), ], path: "Tests/CoreCLITests", swiftSettings: swiftTestingSettings), .testTarget( name: "CLIRuntimeTests", dependencies: [ "PeekabooCLI", .product(name: "PeekabooFoundation", package: "PeekabooFoundation"), .product(name: "Subprocess", package: "swift-subprocess"), ], path: "Tests/CLIRuntimeTests", swiftSettings: swiftTestingSettings), ] if includeAutomationTests { targets.append( .testTarget( name: "CLIAutomationTests", dependencies: [ "PeekabooCLI", .product(name: "PeekabooFoundation", package: "PeekabooFoundation"), .product(name: "PeekabooCore", package: "PeekabooCore"), .product(name: "PeekabooAgentRuntime", package: "PeekabooCore"), .product(name: "PeekabooAutomation", package: "PeekabooCore"), .product(name: "Subprocess", package: "swift-subprocess"), ], path: "Tests/CLIAutomationTests", resources: [ .process("__snapshots__"), ], swiftSettings: swiftTestingSettings) ) } let package = Package( name: "peekaboo", platforms: [ .macOS(.v15), ], products: [ .executable( name: "peekaboo", targets: ["peekaboo"]), ], dependencies: [ .package(path: "../../Commander"), .package(url: "https://github.com/modelcontextprotocol/swift-sdk.git", from: "0.10.2"), .package(url: "https://github.com/dominicegginton/Spinner", from: "2.1.0"), .package(url: "https://github.com/swiftlang/swift-subprocess.git", from: "0.2.1"), .package(path: "../../TauTUI"), .package(path: "../../Core/PeekabooFoundation"), .package(path: "../../Core/PeekabooCore"), .package(path: "../../Tachikoma"), .package(path: "../../Swiftdansi"), ], targets: targets, swiftLanguageModes: [.v6])

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