mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-22 21:11:14 +00:00
* feat(ios): unify chat and voice experience * refactor(ios): finish unified chat ownership * fix(ios): unify chat and voice capture ownership * fix(ios): serialize Talk permission hydration * fix(ios): clear voice CI regressions * fix(ios): clear remaining unified chat CI failures * chore(i18n): sync native source inventory * refactor(ios): defer provider-only realtime voice * fix(ios): clean unified chat voice PR * fix(ios): localize unified voice controls * fix(ios): serialize composer audio controls * fix(ios): isolate dictation preparation lifecycle * fix(ios): key chat tab icons by appearance * fix(ios): preserve talk upgrade handshakes * fix(ios): refresh native i18n inventory * fix(ios): reconcile shared locale artifacts * fix(ios): satisfy chat view lint limit * fix(ios): reconcile shared composer implementation * test(apple): avoid XCTest actor deinit crash * fix(ios): satisfy SwiftFormat scope spacing * fix(ios): remove duplicate merged helper declarations
26 lines
772 B
Swift
26 lines
772 B
Swift
import Foundation
|
|
|
|
public typealias OpenClawChatToolActivityHandler = @MainActor @Sendable (
|
|
_ id: String,
|
|
_ name: String,
|
|
_ isActive: Bool,
|
|
_ sessionKey: String) -> Void
|
|
|
|
extension OpenClawChatViewModel {
|
|
public func endPendingToolActivities() {
|
|
self.pendingToolCallsById = [:]
|
|
}
|
|
|
|
func reportToolActivityChanges(
|
|
from previous: [String: OpenClawChatPendingToolCall],
|
|
to current: [String: OpenClawChatPendingToolCall])
|
|
{
|
|
for (id, call) in previous where current[id] == nil {
|
|
self.onToolActivity?(id, call.name, false, self.sessionKey)
|
|
}
|
|
for (id, call) in current where previous[id] == nil {
|
|
self.onToolActivity?(id, call.name, true, self.sessionKey)
|
|
}
|
|
}
|
|
}
|