From fea884f4d081cbd7e79fd7e87e225317c49dc83c Mon Sep 17 00:00:00 2001 From: Rocuts Date: Mon, 2 Mar 2026 12:31:23 -0500 Subject: [PATCH] iOS: gate env var API key behind DEBUG, tighten deep link rate limit, cap WebSocket message size --- apps/ios/Sources/Model/NodeAppModel.swift | 4 ++-- apps/ios/Sources/Voice/TalkModeManager.swift | 9 ++++++--- .../OpenClawKit/Sources/OpenClawKit/GatewayChannel.swift | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/ios/Sources/Model/NodeAppModel.swift b/apps/ios/Sources/Model/NodeAppModel.swift index ca9c3f9d0c3..7a238813a25 100644 --- a/apps/ios/Sources/Model/NodeAppModel.swift +++ b/apps/ios/Sources/Model/NodeAppModel.swift @@ -2591,8 +2591,8 @@ extension NodeAppModel { "agent deep link rejected: unkeyed message too long chars=\(message.count, privacy: .public)") return } - if Date().timeIntervalSince(self.lastAgentDeepLinkPromptAt) < 1.0 { - self.deepLinkLogger.debug("agent deep link prompt throttled") + if Date().timeIntervalSince(self.lastAgentDeepLinkPromptAt) < 5.0 { + self.deepLinkLogger.debug("agent deep link prompt rate-limited (min 5 s interval)") return } self.lastAgentDeepLinkPromptAt = Date() diff --git a/apps/ios/Sources/Voice/TalkModeManager.swift b/apps/ios/Sources/Voice/TalkModeManager.swift index 5210921a5a7..e8d296c0260 100644 --- a/apps/ios/Sources/Voice/TalkModeManager.swift +++ b/apps/ios/Sources/Voice/TalkModeManager.swift @@ -987,9 +987,12 @@ final class TalkModeManager: NSObject { self.logger.warning("unknown voice alias \(requestedVoice ?? "?", privacy: .public)") } - let resolvedKey = - (self.apiKey?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty == false ? self.apiKey : nil) ?? - ProcessInfo.processInfo.environment["ELEVENLABS_API_KEY"] + let configuredKey = self.apiKey?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty == false ? self.apiKey : nil + #if DEBUG + let resolvedKey = configuredKey ?? ProcessInfo.processInfo.environment["ELEVENLABS_API_KEY"] + #else + let resolvedKey = configuredKey + #endif let apiKey = resolvedKey?.trimmingCharacters(in: .whitespacesAndNewlines) let preferredVoice = resolvedVoice ?? self.currentVoiceId ?? self.defaultVoiceId let voiceId: String? = if let apiKey, !apiKey.isEmpty { diff --git a/apps/shared/OpenClawKit/Sources/OpenClawKit/GatewayChannel.swift b/apps/shared/OpenClawKit/Sources/OpenClawKit/GatewayChannel.swift index 3dc5eacee6e..3be85566a88 100644 --- a/apps/shared/OpenClawKit/Sources/OpenClawKit/GatewayChannel.swift +++ b/apps/shared/OpenClawKit/Sources/OpenClawKit/GatewayChannel.swift @@ -59,7 +59,7 @@ extension URLSession: WebSocketSessioning { public func makeWebSocketTask(url: URL) -> WebSocketTaskBox { let task = self.webSocketTask(with: url) // Avoid "Message too long" receive errors for large snapshots / history payloads. - task.maximumMessageSize = 16 * 1024 * 1024 // 16 MB + task.maximumMessageSize = 4 * 1024 * 1024 // 4 MB return WebSocketTaskBox(task: task) } }