refactor: rename bundle identifiers to com.clawdis

This commit is contained in:
Peter Steinberger
2026-01-03 12:26:22 +01:00
parent daa1460502
commit 7165c8a7e5
153 changed files with 282 additions and 242 deletions

View File

@@ -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"

View File

@@ -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")!

View File

@@ -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

View File

@@ -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)")

View File

@@ -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

View File

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

View File

@@ -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?

View File

@@ -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

View File

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

View File

@@ -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

View File

@@ -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.

View File

@@ -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"

View File

@@ -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>?

View File

@@ -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>?

View File

@@ -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 {

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

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

View File

@@ -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] = [:]

View File

@@ -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? {

View File

@@ -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)")

View File

@@ -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

View File

@@ -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?

View File

@@ -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 {

View File

@@ -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>?

View File

@@ -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>

View File

@@ -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...])

View File

@@ -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]) {

View File

@@ -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

View File

@@ -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,

View File

@@ -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

View File

@@ -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 {

View File

@@ -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>?

View File

@@ -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

View File

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

View File

@@ -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(

View File

@@ -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

View File

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

View File

@@ -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

View File

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

View File

@@ -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? {

View File

@@ -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>

View File

@@ -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(

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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?

View File

@@ -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

View File

@@ -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 {

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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) {

View File

@@ -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

View File

@@ -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 {

View File

@@ -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 systems pop-up menus.

View File

@@ -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

View File

@@ -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) {

View File

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

View File

@@ -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 {