mirror of
https://github.com/moltbot/moltbot.git
synced 2026-04-29 01:31:18 +00:00
fix(macos): restore debug build helpers (#48046)
This commit is contained in:
@@ -8,6 +8,24 @@ final class CanvasA2UIActionMessageHandler: NSObject, WKScriptMessageHandler {
|
|||||||
static let messageName = "openclawCanvasA2UIAction"
|
static let messageName = "openclawCanvasA2UIAction"
|
||||||
static let allMessageNames = [messageName]
|
static let allMessageNames = [messageName]
|
||||||
|
|
||||||
|
// Compatibility helper for debug/test shims. Runtime dispatch remains
|
||||||
|
// limited to in-app canvas schemes in `didReceive`.
|
||||||
|
static func isLocalNetworkCanvasURL(_ url: URL) -> Bool {
|
||||||
|
guard let scheme = url.scheme?.lowercased(), scheme == "http" || scheme == "https" else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
guard let host = url.host?.lowercased(), !host.isEmpty else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if host == "localhost" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
guard let ip = Self.parseIPv4(host) else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return Self.isLocalNetworkIPv4(ip)
|
||||||
|
}
|
||||||
|
|
||||||
private let sessionKey: String
|
private let sessionKey: String
|
||||||
|
|
||||||
init(sessionKey: String) {
|
init(sessionKey: String) {
|
||||||
@@ -104,5 +122,24 @@ final class CanvasA2UIActionMessageHandler: NSObject, WKScriptMessageHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static func parseIPv4(_ host: String) -> (UInt8, UInt8, UInt8, UInt8)? {
|
||||||
|
let parts = host.split(separator: ".", omittingEmptySubsequences: false)
|
||||||
|
guard parts.count == 4 else { return nil }
|
||||||
|
let bytes = parts.compactMap { UInt8($0) }
|
||||||
|
guard bytes.count == 4 else { return nil }
|
||||||
|
return (bytes[0], bytes[1], bytes[2], bytes[3])
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func isLocalNetworkIPv4(_ ip: (UInt8, UInt8, UInt8, UInt8)) -> Bool {
|
||||||
|
let (a, b, _, _) = ip
|
||||||
|
if a == 10 { return true }
|
||||||
|
if a == 172, (16...31).contains(Int(b)) { return true }
|
||||||
|
if a == 192, b == 168 { return true }
|
||||||
|
if a == 127 { return true }
|
||||||
|
if a == 169, b == 254 { return true }
|
||||||
|
if a == 100, (64...127).contains(Int(b)) { return true }
|
||||||
|
return false
|
||||||
|
}
|
||||||
// Formatting helpers live in OpenClawKit (`OpenClawCanvasA2UIAction`).
|
// Formatting helpers live in OpenClawKit (`OpenClawCanvasA2UIAction`).
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -254,6 +254,71 @@ struct CronJob: Identifiable, Codable, Equatable {
|
|||||||
case state
|
case state
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init(
|
||||||
|
id: String,
|
||||||
|
agentId: String?,
|
||||||
|
name: String,
|
||||||
|
description: String?,
|
||||||
|
enabled: Bool,
|
||||||
|
deleteAfterRun: Bool?,
|
||||||
|
createdAtMs: Int,
|
||||||
|
updatedAtMs: Int,
|
||||||
|
schedule: CronSchedule,
|
||||||
|
sessionTarget: CronSessionTarget,
|
||||||
|
wakeMode: CronWakeMode,
|
||||||
|
payload: CronPayload,
|
||||||
|
delivery: CronDelivery?,
|
||||||
|
state: CronJobState)
|
||||||
|
{
|
||||||
|
self.init(
|
||||||
|
id: id,
|
||||||
|
agentId: agentId,
|
||||||
|
name: name,
|
||||||
|
description: description,
|
||||||
|
enabled: enabled,
|
||||||
|
deleteAfterRun: deleteAfterRun,
|
||||||
|
createdAtMs: createdAtMs,
|
||||||
|
updatedAtMs: updatedAtMs,
|
||||||
|
schedule: schedule,
|
||||||
|
sessionTarget: .predefined(sessionTarget),
|
||||||
|
wakeMode: wakeMode,
|
||||||
|
payload: payload,
|
||||||
|
delivery: delivery,
|
||||||
|
state: state)
|
||||||
|
}
|
||||||
|
|
||||||
|
init(
|
||||||
|
id: String,
|
||||||
|
agentId: String?,
|
||||||
|
name: String,
|
||||||
|
description: String?,
|
||||||
|
enabled: Bool,
|
||||||
|
deleteAfterRun: Bool?,
|
||||||
|
createdAtMs: Int,
|
||||||
|
updatedAtMs: Int,
|
||||||
|
schedule: CronSchedule,
|
||||||
|
sessionTarget: CronCustomSessionTarget,
|
||||||
|
wakeMode: CronWakeMode,
|
||||||
|
payload: CronPayload,
|
||||||
|
delivery: CronDelivery?,
|
||||||
|
state: CronJobState)
|
||||||
|
{
|
||||||
|
self.id = id
|
||||||
|
self.agentId = agentId
|
||||||
|
self.name = name
|
||||||
|
self.description = description
|
||||||
|
self.enabled = enabled
|
||||||
|
self.deleteAfterRun = deleteAfterRun
|
||||||
|
self.createdAtMs = createdAtMs
|
||||||
|
self.updatedAtMs = updatedAtMs
|
||||||
|
self.schedule = schedule
|
||||||
|
self.sessionTargetRaw = sessionTarget.rawValue
|
||||||
|
self.wakeMode = wakeMode
|
||||||
|
self.payload = payload
|
||||||
|
self.delivery = delivery
|
||||||
|
self.state = state
|
||||||
|
}
|
||||||
|
|
||||||
/// Parsed session target (predefined or custom session ID)
|
/// Parsed session target (predefined or custom session ID)
|
||||||
var parsedSessionTarget: CronCustomSessionTarget {
|
var parsedSessionTarget: CronCustomSessionTarget {
|
||||||
CronCustomSessionTarget.from(self.sessionTargetRaw)
|
CronCustomSessionTarget.from(self.sessionTargetRaw)
|
||||||
|
|||||||
Reference in New Issue
Block a user