refactor: rename bundle identifiers to com.clawdis
This commit is contained in:
@@ -2,7 +2,7 @@ import Foundation
|
||||
import OSLog
|
||||
|
||||
enum AgentWorkspace {
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "workspace")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "workspace")
|
||||
static let agentsFilename = "AGENTS.md"
|
||||
static let soulFilename = "SOUL.md"
|
||||
static let identityFilename = "IDENTITY.md"
|
||||
|
||||
@@ -58,7 +58,7 @@ enum AnthropicAuthResolver {
|
||||
}
|
||||
|
||||
enum AnthropicOAuth {
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "anthropic-oauth")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "anthropic-oauth")
|
||||
|
||||
private static let clientId = "9d1c250a-e61b-44d9-88ed-5944d1962f5e"
|
||||
private static let authorizeURL = URL(string: "https://claude.ai/oauth/authorize")!
|
||||
|
||||
@@ -19,7 +19,7 @@ actor BridgeConnectionHandler {
|
||||
private let logger: Logger
|
||||
private let decoder = JSONDecoder()
|
||||
private let encoder = JSONEncoder()
|
||||
private let queue = DispatchQueue(label: "com.steipete.clawdis.bridge.connection")
|
||||
private let queue = DispatchQueue(label: "com.clawdis.bridge.connection")
|
||||
|
||||
private var buffer = Data()
|
||||
private var isAuthenticated = false
|
||||
|
||||
@@ -8,7 +8,7 @@ import OSLog
|
||||
actor BridgeServer {
|
||||
static let shared = BridgeServer()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "bridge")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "bridge")
|
||||
private var listener: NWListener?
|
||||
private var isRunning = false
|
||||
private var store: PairedNodesStore?
|
||||
@@ -42,7 +42,7 @@ actor BridgeServer {
|
||||
Task { await self.handleListenerState(state) }
|
||||
}
|
||||
|
||||
listener.start(queue: DispatchQueue(label: "com.steipete.clawdis.bridge"))
|
||||
listener.start(queue: DispatchQueue(label: "com.clawdis.bridge"))
|
||||
self.listener = listener
|
||||
} catch {
|
||||
self.logger.error("bridge start failed: \(error.localizedDescription, privacy: .public)")
|
||||
|
||||
@@ -36,7 +36,7 @@ actor CameraCaptureService {
|
||||
}
|
||||
}
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "camera")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "camera")
|
||||
|
||||
func listDevices() -> [CameraDeviceInfo] {
|
||||
Self.availableCameras().map { device in
|
||||
|
||||
@@ -10,7 +10,7 @@ final class CanvasFileWatcher: @unchecked Sendable {
|
||||
|
||||
init(url: URL, onChange: @escaping () -> Void) {
|
||||
self.url = url
|
||||
self.queue = DispatchQueue(label: "com.steipete.clawdis.canvaswatcher")
|
||||
self.queue = DispatchQueue(label: "com.clawdis.canvaswatcher")
|
||||
self.onChange = onChange
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import OSLog
|
||||
final class CanvasManager {
|
||||
static let shared = CanvasManager()
|
||||
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "CanvasManager")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "CanvasManager")
|
||||
|
||||
private var panelController: CanvasWindowController?
|
||||
private var panelSessionKey: String?
|
||||
|
||||
@@ -3,7 +3,7 @@ import Foundation
|
||||
import OSLog
|
||||
import WebKit
|
||||
|
||||
private let canvasLogger = Logger(subsystem: "com.steipete.clawdis", category: "Canvas")
|
||||
private let canvasLogger = Logger(subsystem: "com.clawdis", category: "Canvas")
|
||||
|
||||
final class CanvasSchemeHandler: NSObject, WKURLSchemeHandler {
|
||||
private let root: URL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import AppKit
|
||||
|
||||
let canvasWindowLogger = Logger(subsystem: "com.steipete.clawdis", category: "Canvas")
|
||||
let canvasWindowLogger = Logger(subsystem: "com.clawdis", category: "Canvas")
|
||||
|
||||
enum CanvasLayout {
|
||||
static let panelSize = NSSize(width: 520, height: 680)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import Foundation
|
||||
|
||||
enum ClawdisConfigFile {
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "config")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "config")
|
||||
|
||||
static func url() -> URL {
|
||||
ClawdisPaths.configURL
|
||||
|
||||
@@ -5,7 +5,7 @@ import OSLog
|
||||
final class ConnectionModeCoordinator {
|
||||
static let shared = ConnectionModeCoordinator()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "connection")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "connection")
|
||||
|
||||
/// Apply the requested connection mode by starting/stopping local gateway,
|
||||
/// managing the control-channel SSH tunnel, and cleaning up chat windows/panels.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import Foundation
|
||||
|
||||
let launchdLabel = "com.steipete.clawdis"
|
||||
let gatewayLaunchdLabel = "com.steipete.clawdis.gateway"
|
||||
let launchdLabel = "com.clawdis.mac"
|
||||
let gatewayLaunchdLabel = "com.clawdis.gateway"
|
||||
let onboardingVersionKey = "clawdis.onboardingVersion"
|
||||
let currentOnboardingVersion = 7
|
||||
let pauseDefaultsKey = "clawdis.pauseEnabled"
|
||||
|
||||
@@ -73,7 +73,7 @@ final class ControlChannel {
|
||||
}
|
||||
private(set) var lastPingMs: Double?
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "control")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "control")
|
||||
|
||||
private var eventTask: Task<Void, Never>?
|
||||
private var recoveryTask: Task<Void, Never>?
|
||||
|
||||
@@ -21,7 +21,7 @@ final class CronJobsStore {
|
||||
var lastError: String?
|
||||
var statusMessage: String?
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "cron.ui")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "cron.ui")
|
||||
private var refreshTask: Task<Void, Never>?
|
||||
private var runsTask: Task<Void, Never>?
|
||||
private var eventTask: Task<Void, Never>?
|
||||
|
||||
@@ -4,7 +4,7 @@ import Foundation
|
||||
import OSLog
|
||||
import Security
|
||||
|
||||
private let deepLinkLogger = Logger(subsystem: "com.steipete.clawdis", category: "DeepLink")
|
||||
private let deepLinkLogger = Logger(subsystem: "com.clawdis", category: "DeepLink")
|
||||
|
||||
@MainActor
|
||||
final class DeepLinkHandler {
|
||||
|
||||
@@ -6,7 +6,7 @@ final class DockIconManager: NSObject, @unchecked Sendable {
|
||||
static let shared = DockIconManager()
|
||||
|
||||
private var windowsObservation: NSKeyValueObservation?
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "DockIconManager")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "DockIconManager")
|
||||
|
||||
override private init() {
|
||||
super.init()
|
||||
|
||||
@@ -58,7 +58,7 @@ struct WebSocketSessionBox: @unchecked Sendable {
|
||||
private typealias ProtoAnyCodable = ClawdisProtocol.AnyCodable
|
||||
|
||||
actor GatewayChannelActor {
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "gateway")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "gateway")
|
||||
private var task: WebSocketTaskBox?
|
||||
private var pending: [String: CheckedContinuation<GatewayFrame, Error>] = [:]
|
||||
private var connected = false
|
||||
|
||||
@@ -3,7 +3,7 @@ import ClawdisProtocol
|
||||
import Foundation
|
||||
import OSLog
|
||||
|
||||
private let gatewayConnectionLogger = Logger(subsystem: "com.steipete.clawdis", category: "gateway.connection")
|
||||
private let gatewayConnectionLogger = Logger(subsystem: "com.clawdis", category: "gateway.connection")
|
||||
|
||||
enum GatewayAgentChannel: String, Codable, CaseIterable, Sendable {
|
||||
case last
|
||||
|
||||
@@ -34,7 +34,7 @@ final class GatewayDiscoveryModel {
|
||||
private var localIdentity: LocalIdentity
|
||||
private var resolvedTXTByID: [String: [String: String]] = [:]
|
||||
private var pendingTXTResolvers: [String: GatewayTXTResolver] = [:]
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "gateway-discovery")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "gateway-discovery")
|
||||
|
||||
init() {
|
||||
self.localIdentity = Self.buildLocalIdentityFast()
|
||||
@@ -69,7 +69,7 @@ final class GatewayDiscoveryModel {
|
||||
}
|
||||
|
||||
self.browsers[domain] = browser
|
||||
browser.start(queue: DispatchQueue(label: "com.steipete.clawdis.macos.gateway-discovery.\(domain)"))
|
||||
browser.start(queue: DispatchQueue(label: "com.clawdis.macos.gateway-discovery.\(domain)"))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ actor GatewayEndpointStore {
|
||||
}
|
||||
|
||||
private let deps: Deps
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "gateway-endpoint")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "gateway-endpoint")
|
||||
|
||||
private var state: GatewayEndpointState
|
||||
private var subscribers: [UUID: AsyncStream<GatewayEndpointState>.Continuation] = [:]
|
||||
|
||||
@@ -62,7 +62,7 @@ struct GatewayCommandResolution {
|
||||
}
|
||||
|
||||
enum GatewayEnvironment {
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "gateway.env")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "gateway.env")
|
||||
private static let supportedBindModes: Set<String> = ["loopback", "tailnet", "lan", "auto"]
|
||||
|
||||
static func bundledGatewayExecutable() -> String? {
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
import Foundation
|
||||
|
||||
enum GatewayLaunchAgentManager {
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "gateway.launchd")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "gateway.launchd")
|
||||
private static let supportedBindModes: Set<String> = ["loopback", "tailnet", "lan", "auto"]
|
||||
private static let legacyGatewayLaunchdLabel = "com.steipete.clawdis.gateway"
|
||||
|
||||
private static var plistURL: URL {
|
||||
FileManager.default.homeDirectoryForCurrentUser
|
||||
.appendingPathComponent("Library/LaunchAgents/\(gatewayLaunchdLabel).plist")
|
||||
}
|
||||
|
||||
private static var legacyPlistURL: URL {
|
||||
FileManager.default.homeDirectoryForCurrentUser
|
||||
.appendingPathComponent("Library/LaunchAgents/\(legacyGatewayLaunchdLabel).plist")
|
||||
}
|
||||
|
||||
private static func gatewayExecutablePath(bundlePath: String) -> String {
|
||||
"\(bundlePath)/Contents/Resources/Relay/clawdis"
|
||||
}
|
||||
@@ -45,6 +51,8 @@ enum GatewayLaunchAgentManager {
|
||||
|
||||
static func set(enabled: Bool, bundlePath: String, port: Int) async -> String? {
|
||||
if enabled {
|
||||
_ = await self.runLaunchctl(["bootout", "gui/\(getuid())/\(legacyGatewayLaunchdLabel)"])
|
||||
try? FileManager.default.removeItem(at: self.legacyPlistURL)
|
||||
let gatewayBin = self.gatewayExecutablePath(bundlePath: bundlePath)
|
||||
guard FileManager.default.isExecutableFile(atPath: gatewayBin) else {
|
||||
self.logger.error("launchd enable failed: gateway missing at \(gatewayBin)")
|
||||
|
||||
@@ -42,7 +42,7 @@ final class GatewayProcessManager {
|
||||
private var environmentRefreshTask: Task<Void, Never>?
|
||||
private var lastEnvironmentRefresh: Date?
|
||||
private var logRefreshTask: Task<Void, Never>?
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "gateway.process")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "gateway.process")
|
||||
|
||||
private let logLimit = 20000 // characters to keep in-memory
|
||||
private let environmentRefreshMinInterval: TimeInterval = 30
|
||||
|
||||
@@ -77,7 +77,7 @@ enum HealthState: Equatable {
|
||||
final class HealthStore {
|
||||
static let shared = HealthStore()
|
||||
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "health")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "health")
|
||||
|
||||
private(set) var snapshot: HealthSnapshot?
|
||||
private(set) var lastSuccess: Date?
|
||||
|
||||
@@ -2,7 +2,7 @@ import Darwin
|
||||
import Foundation
|
||||
|
||||
enum InstanceIdentity {
|
||||
private static let suiteName = "com.steipete.clawdis.shared"
|
||||
private static let suiteName = "com.clawdis.shared"
|
||||
private static let instanceIdKey = "instanceId"
|
||||
|
||||
private static var defaults: UserDefaults {
|
||||
|
||||
@@ -40,7 +40,7 @@ final class InstancesStore {
|
||||
var statusMessage: String?
|
||||
var isLoading = false
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "instances")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "instances")
|
||||
private var task: Task<Void, Never>?
|
||||
private let interval: TimeInterval = 30
|
||||
private var eventTask: Task<Void, Never>?
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
import Foundation
|
||||
|
||||
enum LaunchAgentManager {
|
||||
private static let legacyLaunchdLabel = "com.steipete.clawdis"
|
||||
private static var plistURL: URL {
|
||||
FileManager.default.homeDirectoryForCurrentUser
|
||||
.appendingPathComponent("Library/LaunchAgents/com.steipete.clawdis.plist")
|
||||
.appendingPathComponent("Library/LaunchAgents/com.clawdis.mac.plist")
|
||||
}
|
||||
private static var legacyPlistURL: URL {
|
||||
FileManager.default.homeDirectoryForCurrentUser
|
||||
.appendingPathComponent("Library/LaunchAgents/\(legacyLaunchdLabel).plist")
|
||||
}
|
||||
|
||||
static func status() async -> Bool {
|
||||
@@ -14,6 +19,8 @@ enum LaunchAgentManager {
|
||||
|
||||
static func set(enabled: Bool, bundlePath: String) async {
|
||||
if enabled {
|
||||
_ = await self.runLaunchctl(["bootout", "gui/\(getuid())/\(legacyLaunchdLabel)"])
|
||||
try? FileManager.default.removeItem(at: self.legacyPlistURL)
|
||||
self.writePlist(bundlePath: bundlePath)
|
||||
_ = await self.runLaunchctl(["bootout", "gui/\(getuid())/\(launchdLabel)"])
|
||||
_ = await self.runLaunchctl(["bootstrap", "gui/\(getuid())", self.plistURL.path])
|
||||
@@ -32,7 +39,7 @@ enum LaunchAgentManager {
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key>
|
||||
<string>com.steipete.clawdis</string>
|
||||
<string>com.clawdis.mac</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>\(bundlePath)/Contents/MacOS/Clawdis</string>
|
||||
|
||||
@@ -74,7 +74,7 @@ enum ClawdisLogging {
|
||||
|
||||
static func parseLabel(_ label: String) -> (String, String) {
|
||||
guard let range = label.range(of: Self.labelSeparator) else {
|
||||
return ("com.steipete.clawdis", label)
|
||||
return ("com.clawdis", label)
|
||||
}
|
||||
let subsystem = String(label[..<range.lowerBound])
|
||||
let category = String(label[range.upperBound...])
|
||||
|
||||
@@ -231,7 +231,7 @@ private final class StatusItemMouseHandlerView: NSView {
|
||||
@MainActor
|
||||
final class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
private var state: AppState?
|
||||
private let webChatAutoLogger = Logger(subsystem: "com.steipete.clawdis", category: "Chat")
|
||||
private let webChatAutoLogger = Logger(subsystem: "com.clawdis", category: "Chat")
|
||||
let updaterController: UpdaterProviding = makeUpdaterController()
|
||||
|
||||
func application(_: NSApplication, open urls: [URL]) {
|
||||
|
||||
@@ -4,7 +4,7 @@ import JavaScriptCore
|
||||
enum ModelCatalogLoader {
|
||||
static let defaultPath: String = FileManager.default.homeDirectoryForCurrentUser
|
||||
.appendingPathComponent("Projects/pi-mono/packages/ai/src/models.generated.ts").path
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "models")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "models")
|
||||
|
||||
static func load(from path: String) async throws -> [ModelChoice] {
|
||||
let expanded = (path as NSString).expandingTildeInPath
|
||||
|
||||
@@ -15,7 +15,7 @@ actor MacNodeBridgePairingClient {
|
||||
{
|
||||
self.lineBuffer = Data()
|
||||
let connection = NWConnection(to: endpoint, using: .tcp)
|
||||
let queue = DispatchQueue(label: "com.steipete.clawdis.macos.bridge-client")
|
||||
let queue = DispatchQueue(label: "com.clawdis.macos.bridge-client")
|
||||
defer { connection.cancel() }
|
||||
try await AsyncTimeout.withTimeout(
|
||||
seconds: 8,
|
||||
|
||||
@@ -39,7 +39,7 @@ actor MacNodeBridgeSession {
|
||||
let params = NWParameters.tcp
|
||||
params.includePeerToPeer = true
|
||||
let connection = NWConnection(to: endpoint, using: params)
|
||||
let queue = DispatchQueue(label: "com.steipete.clawdis.macos.bridge-session")
|
||||
let queue = DispatchQueue(label: "com.clawdis.macos.bridge-session")
|
||||
self.connection = connection
|
||||
self.queue = queue
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import OSLog
|
||||
final class MacNodeModeCoordinator {
|
||||
static let shared = MacNodeModeCoordinator()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "mac-node")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "mac-node")
|
||||
private var task: Task<Void, Never>?
|
||||
private let runtime = MacNodeRuntime()
|
||||
private let session = MacNodeBridgeSession()
|
||||
@@ -198,7 +198,7 @@ final class MacNodeModeCoordinator {
|
||||
static func probeEndpoint(_ endpoint: NWEndpoint, timeoutSeconds: Double) async -> Bool {
|
||||
let connection = NWConnection(to: endpoint, using: .tcp)
|
||||
let stream = Self.makeStateStream(for: connection)
|
||||
connection.start(queue: DispatchQueue(label: "com.steipete.clawdis.macos.bridge-loopback-probe"))
|
||||
connection.start(queue: DispatchQueue(label: "com.clawdis.macos.bridge-loopback-probe"))
|
||||
do {
|
||||
try await Self.waitForReady(stream, timeoutSeconds: timeoutSeconds)
|
||||
connection.cancel()
|
||||
@@ -339,7 +339,7 @@ final class MacNodeModeCoordinator {
|
||||
}
|
||||
}
|
||||
state.browsers.append(browser)
|
||||
browser.start(queue: DispatchQueue(label: "com.steipete.clawdis.macos.bridge-discovery.\(domain)"))
|
||||
browser.start(queue: DispatchQueue(label: "com.clawdis.macos.bridge-discovery.\(domain)"))
|
||||
}
|
||||
|
||||
Task {
|
||||
@@ -351,7 +351,7 @@ final class MacNodeModeCoordinator {
|
||||
}
|
||||
|
||||
enum MacNodeTokenStore {
|
||||
private static let suiteName = "com.steipete.clawdis.shared"
|
||||
private static let suiteName = "com.clawdis.shared"
|
||||
private static let tokenKey = "mac.node.bridge.token"
|
||||
|
||||
private static var defaults: UserDefaults {
|
||||
|
||||
@@ -20,7 +20,7 @@ enum NodePairingReconcilePolicy {
|
||||
final class NodePairingApprovalPrompter {
|
||||
static let shared = NodePairingApprovalPrompter()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "node-pairing")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "node-pairing")
|
||||
private var task: Task<Void, Never>?
|
||||
private var reconcileTask: Task<Void, Never>?
|
||||
private var reconcileOnceTask: Task<Void, Never>?
|
||||
|
||||
@@ -36,7 +36,7 @@ final class NodesStore {
|
||||
var statusMessage: String?
|
||||
var isLoading = false
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "nodes")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "nodes")
|
||||
private var task: Task<Void, Never>?
|
||||
private let interval: TimeInterval = 30
|
||||
private var startCount = 0
|
||||
|
||||
@@ -5,7 +5,7 @@ import UserNotifications
|
||||
|
||||
@MainActor
|
||||
struct NotificationManager {
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "notifications")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "notifications")
|
||||
|
||||
private static let hasTimeSensitiveEntitlement: Bool = {
|
||||
guard let task = SecTaskCreateFromSelf(nil) else { return false }
|
||||
|
||||
@@ -9,7 +9,7 @@ import PeekabooFoundation
|
||||
final class PeekabooBridgeHostCoordinator {
|
||||
static let shared = PeekabooBridgeHostCoordinator()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "PeekabooBridge")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "PeekabooBridge")
|
||||
|
||||
private var host: PeekabooBridgeHost?
|
||||
private var services: ClawdisPeekabooBridgeServices?
|
||||
@@ -102,7 +102,7 @@ private final class ClawdisPeekabooBridgeServices: PeekabooBridgeServiceProvidin
|
||||
let snapshots: any SnapshotManagerProtocol
|
||||
|
||||
init() {
|
||||
let logging = LoggingService(subsystem: "com.steipete.clawdis.peekaboo")
|
||||
let logging = LoggingService(subsystem: "com.clawdis.peekaboo")
|
||||
let feedbackClient: any AutomationFeedbackClient = NoopAutomationFeedbackClient()
|
||||
|
||||
let snapshots = InMemorySnapshotManager(options: .init(
|
||||
|
||||
@@ -228,7 +228,7 @@ enum CameraPermissionHelper {
|
||||
}
|
||||
|
||||
enum AppleScriptPermission {
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "AppleScriptPermission")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "AppleScriptPermission")
|
||||
|
||||
/// Sends a benign AppleScript to Terminal to verify Automation permission.
|
||||
@MainActor
|
||||
|
||||
@@ -22,7 +22,7 @@ actor PortGuardian {
|
||||
}
|
||||
|
||||
private var records: [Record] = []
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "portguard")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "portguard")
|
||||
private nonisolated static let appSupportDir: URL = {
|
||||
let base = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!
|
||||
return base.appendingPathComponent("Clawdis", isDirectory: true)
|
||||
|
||||
@@ -7,7 +7,7 @@ import OSLog
|
||||
final class PresenceReporter {
|
||||
static let shared = PresenceReporter()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "presence")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "presence")
|
||||
private var task: Task<Void, Never>?
|
||||
private let interval: TimeInterval = 180 // a few minutes
|
||||
private let instanceId: String = InstanceIdentity.instanceId
|
||||
|
||||
@@ -9,7 +9,7 @@ import Darwin
|
||||
///
|
||||
/// Uses `ssh -N -L` to forward the remote gateway ports to localhost.
|
||||
final class RemotePortTunnel {
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "remote.tunnel")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "remote.tunnel")
|
||||
|
||||
let process: Process
|
||||
let localPort: UInt16?
|
||||
@@ -167,7 +167,7 @@ final class RemotePortTunnel {
|
||||
if let preferred, self.portIsFree(preferred) { return preferred }
|
||||
|
||||
return try await withCheckedThrowingContinuation { cont in
|
||||
let queue = DispatchQueue(label: "com.steipete.clawdis.remote.tunnel.port", qos: .utility)
|
||||
let queue = DispatchQueue(label: "com.clawdis.remote.tunnel.port", qos: .utility)
|
||||
do {
|
||||
let listener = try NWListener(using: .tcp, on: .any)
|
||||
listener.newConnectionHandler = { connection in connection.cancel() }
|
||||
|
||||
@@ -5,7 +5,7 @@ import OSLog
|
||||
actor RemoteTunnelManager {
|
||||
static let shared = RemoteTunnelManager()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "remote-tunnel")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "remote-tunnel")
|
||||
private var controlTunnel: RemotePortTunnel?
|
||||
|
||||
func controlTunnelPortIfRunning() async -> UInt16? {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>Clawdis</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.steipete.clawdis</string>
|
||||
<string>com.clawdis.mac</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
@@ -24,7 +24,7 @@
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleURLName</key>
|
||||
<string>com.steipete.clawdis.deeplink</string>
|
||||
<string>com.clawdis.mac.deeplink</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>clawdis</string>
|
||||
|
||||
@@ -51,7 +51,7 @@ enum RuntimeResolutionError: Error {
|
||||
}
|
||||
|
||||
enum RuntimeLocator {
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "runtime")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "runtime")
|
||||
private static let minNode = RuntimeVersion(major: 22, minor: 0, patch: 0)
|
||||
|
||||
static func resolve(
|
||||
|
||||
@@ -25,7 +25,7 @@ final class ScreenRecordService {
|
||||
}
|
||||
}
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "screenRecord")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "screenRecord")
|
||||
|
||||
func record(
|
||||
screenIndex: Int?,
|
||||
@@ -110,7 +110,7 @@ final class ScreenRecordService {
|
||||
}
|
||||
|
||||
private final class StreamRecorder: NSObject, SCStreamOutput, SCStreamDelegate, @unchecked Sendable {
|
||||
let queue = DispatchQueue(label: "com.steipete.clawdis.screenRecord.writer")
|
||||
let queue = DispatchQueue(label: "com.clawdis.screenRecord.writer")
|
||||
|
||||
private let logger: Logger
|
||||
private let writer: AVAssetWriter
|
||||
|
||||
@@ -53,7 +53,7 @@ private actor SessionPreviewCache {
|
||||
}
|
||||
|
||||
struct SessionMenuPreviewView: View {
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "SessionPreview")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "SessionPreview")
|
||||
private static let previewTimeoutSeconds: Double = 4
|
||||
|
||||
let sessionKey: String
|
||||
|
||||
@@ -15,7 +15,7 @@ final class TailscaleService {
|
||||
/// API request timeout in seconds.
|
||||
private static let apiTimeoutInterval: TimeInterval = 5.0
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "tailscale")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "tailscale")
|
||||
|
||||
/// Indicates if the Tailscale app is installed on the system.
|
||||
private(set) var isInstalled = false
|
||||
|
||||
@@ -6,7 +6,7 @@ import OSLog
|
||||
final class TalkAudioPlayer: NSObject, @preconcurrency AVAudioPlayerDelegate {
|
||||
static let shared = TalkAudioPlayer()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "talk.tts")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "talk.tts")
|
||||
private var player: AVAudioPlayer?
|
||||
private var playback: Playback?
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import Observation
|
||||
final class TalkModeController {
|
||||
static let shared = TalkModeController()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "talk.controller")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "talk.controller")
|
||||
|
||||
private(set) var phase: TalkModePhase = .idle
|
||||
private(set) var isPaused: Bool = false
|
||||
|
||||
@@ -8,8 +8,8 @@ import Speech
|
||||
actor TalkModeRuntime {
|
||||
static let shared = TalkModeRuntime()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "talk.runtime")
|
||||
private let ttsLogger = Logger(subsystem: "com.steipete.clawdis", category: "talk.tts")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "talk.runtime")
|
||||
private let ttsLogger = Logger(subsystem: "com.clawdis", category: "talk.tts")
|
||||
private static let defaultModelIdFallback = "eleven_v3"
|
||||
|
||||
private final class RMSMeter: @unchecked Sendable {
|
||||
|
||||
@@ -12,7 +12,7 @@ final class TalkOverlayController {
|
||||
static let orbPadding: CGFloat = 12
|
||||
static let orbHitSlop: CGFloat = 10
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "talk.overlay")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "talk.overlay")
|
||||
|
||||
struct Model {
|
||||
var isVisible: Bool = false
|
||||
|
||||
@@ -6,7 +6,7 @@ import OSLog
|
||||
final class TerminationSignalWatcher {
|
||||
static let shared = TerminationSignalWatcher()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "lifecycle")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "lifecycle")
|
||||
private var sources: [DispatchSourceSignal] = []
|
||||
private var terminationRequested = false
|
||||
|
||||
|
||||
@@ -93,14 +93,14 @@ final class VoicePushToTalkHotkey: @unchecked Sendable {
|
||||
if chordActive, !self.active {
|
||||
self.active = true
|
||||
Task {
|
||||
Logger(subsystem: "com.steipete.clawdis", category: "voicewake.ptt")
|
||||
Logger(subsystem: "com.clawdis", category: "voicewake.ptt")
|
||||
.info("ptt hotkey down")
|
||||
await self.beginAction()
|
||||
}
|
||||
} else if !chordActive, self.active {
|
||||
self.active = false
|
||||
Task {
|
||||
Logger(subsystem: "com.steipete.clawdis", category: "voicewake.ptt")
|
||||
Logger(subsystem: "com.clawdis", category: "voicewake.ptt")
|
||||
.info("ptt hotkey up")
|
||||
await self.endAction()
|
||||
}
|
||||
@@ -116,7 +116,7 @@ final class VoicePushToTalkHotkey: @unchecked Sendable {
|
||||
actor VoicePushToTalk {
|
||||
static let shared = VoicePushToTalk()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "voicewake.ptt")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "voicewake.ptt")
|
||||
|
||||
private var recognizer: SFSpeechRecognizer?
|
||||
// Lazily created on begin() to avoid creating an AVAudioEngine at app launch, which can switch Bluetooth
|
||||
|
||||
@@ -19,7 +19,7 @@ final class VoiceSessionCoordinator {
|
||||
var autoSendDelay: TimeInterval?
|
||||
}
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "voicewake.coordinator")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "voicewake.coordinator")
|
||||
private var session: Session?
|
||||
|
||||
// MARK: - API
|
||||
|
||||
@@ -41,7 +41,7 @@ enum VoiceWakeChimeCatalog {
|
||||
|
||||
@MainActor
|
||||
enum VoiceWakeChimePlayer {
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "voicewake.chime")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "voicewake.chime")
|
||||
private static var lastSound: NSSound?
|
||||
|
||||
static func play(_ chime: VoiceWakeChime, reason: String? = nil) {
|
||||
|
||||
@@ -2,7 +2,7 @@ import Foundation
|
||||
import OSLog
|
||||
|
||||
enum VoiceWakeForwarder {
|
||||
private static let logger = Logger(subsystem: "com.steipete.clawdis", category: "voicewake.forward")
|
||||
private static let logger = Logger(subsystem: "com.clawdis", category: "voicewake.forward")
|
||||
|
||||
static func prefixedTranscript(_ transcript: String, machineName: String? = nil) -> String {
|
||||
let resolvedMachine = machineName
|
||||
|
||||
@@ -5,7 +5,7 @@ import OSLog
|
||||
final class VoiceWakeGlobalSettingsSync {
|
||||
static let shared = VoiceWakeGlobalSettingsSync()
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "voicewake.sync")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "voicewake.sync")
|
||||
private var task: Task<Void, Never>?
|
||||
|
||||
private struct VoiceWakePayload: Codable, Equatable {
|
||||
|
||||
@@ -8,7 +8,7 @@ import SwiftUI
|
||||
final class VoiceWakeOverlayController {
|
||||
static let shared = VoiceWakeOverlayController()
|
||||
|
||||
let logger = Logger(subsystem: "com.steipete.clawdis", category: "voicewake.overlay")
|
||||
let logger = Logger(subsystem: "com.clawdis", category: "voicewake.overlay")
|
||||
let enableUI: Bool
|
||||
|
||||
/// Keep the voice wake overlay above any other Clawdis windows, but below the system’s pop-up menus.
|
||||
|
||||
@@ -13,7 +13,7 @@ actor VoiceWakeRuntime {
|
||||
|
||||
enum ListeningState { case idle, voiceWake, pushToTalk }
|
||||
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "voicewake.runtime")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "voicewake.runtime")
|
||||
|
||||
private var recognizer: SFSpeechRecognizer?
|
||||
// Lazily created on start to avoid creating an AVAudioEngine at app launch, which can switch Bluetooth
|
||||
|
||||
@@ -22,7 +22,7 @@ final class VoiceWakeTester {
|
||||
private var lastHeard: Date?
|
||||
private var holdingAfterDetect = false
|
||||
private var detectedText: String?
|
||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "voicewake")
|
||||
private let logger = Logger(subsystem: "com.clawdis", category: "voicewake")
|
||||
private let silenceWindow: TimeInterval = 1.0
|
||||
|
||||
init(locale: Locale = .current) {
|
||||
|
||||
@@ -6,7 +6,7 @@ import OSLog
|
||||
import QuartzCore
|
||||
import SwiftUI
|
||||
|
||||
private let webChatSwiftLogger = Logger(subsystem: "com.steipete.clawdis", category: "WebChatSwiftUI")
|
||||
private let webChatSwiftLogger = Logger(subsystem: "com.clawdis", category: "WebChatSwiftUI")
|
||||
|
||||
private enum WebChatSwiftUILayout {
|
||||
static let windowSize = NSSize(width: 500, height: 840)
|
||||
|
||||
@@ -24,7 +24,7 @@ import Testing
|
||||
listener.newConnectionHandler = { connection in
|
||||
connection.cancel()
|
||||
}
|
||||
listener.start(queue: DispatchQueue(label: "com.steipete.clawdis.tests.bridge-listener"))
|
||||
listener.start(queue: DispatchQueue(label: "com.clawdis.tests.bridge-listener"))
|
||||
try await waitForListenerReady(listener, timeoutSeconds: 1.0)
|
||||
|
||||
guard let port = listener.port else {
|
||||
|
||||
Reference in New Issue
Block a user