mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-28 05:16:23 -06:00
fix(apple): surface rejected chat session settings (#128737)
This commit is contained in:
committed by
GitHub
parent
dea053e32f
commit
2b8fe12f0b
@@ -85,6 +85,7 @@ extension OpenClawChatViewModel {
|
||||
guard clearsOverride ? baselineSessionLevel != nil : Self.normalizedVerboseLevel(baselineSessionLevel) != next
|
||||
else { return }
|
||||
|
||||
self.errorText = nil
|
||||
if self.acceptedVerboseLevelsByTarget[target] == nil {
|
||||
self.acceptedVerboseLevelsByTarget[target] = baselineSessionLevel.map(VerboseLevelState.value)
|
||||
?? VerboseLevelState.none
|
||||
@@ -133,6 +134,7 @@ extension OpenClawChatViewModel {
|
||||
self.acceptedVerboseLevelsByTarget[target]?.level,
|
||||
sessionKey: state.key,
|
||||
exactMatchOnly: state.exactMatchOnly)
|
||||
if !state.exactMatchOnly { self.errorText = error.localizedDescription }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -177,6 +179,7 @@ extension OpenClawChatViewModel {
|
||||
let baselineEffectiveFastMode = self.currentSessionEntry()?.effectiveFastMode
|
||||
guard baselineFastMode != next else { return }
|
||||
|
||||
self.errorText = nil
|
||||
if self.acceptedFastModesByTarget[target] == nil {
|
||||
self.acceptedFastModesByTarget[target] = FastModeState(
|
||||
override: baselineFastMode,
|
||||
@@ -225,6 +228,7 @@ extension OpenClawChatViewModel {
|
||||
effective: accepted?.effective,
|
||||
sessionKey: state.key,
|
||||
exactMatchOnly: state.exactMatchOnly)
|
||||
if !state.exactMatchOnly { self.errorText = error.localizedDescription }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ extension OpenClawChatViewModel {
|
||||
guard next != preferredThinkingLevel || self.thinkingOverrideIsInherited else { return }
|
||||
}
|
||||
|
||||
self.errorText = nil
|
||||
let sessionKey = self.sessionKey
|
||||
let acceptedBaseline = Self.normalizedThinkingLevel(currentSessionEntry()?.thinkingLevel)
|
||||
?? Self.normalizedThinkingLevel(thinkingLevel)
|
||||
@@ -159,6 +160,7 @@ extension OpenClawChatViewModel {
|
||||
self.updateCurrentSessionThinkingLevel(
|
||||
self.acceptedThinkingOverrideClearedByTarget[target] == true ? nil : rollbackLevel,
|
||||
sessionKey: sessionKey)
|
||||
self.errorText = error.localizedDescription
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2748,13 +2748,17 @@ struct ChatViewModelTests {
|
||||
viewModel.sessions = [running]
|
||||
let omitted = try JSONDecoder().decode(
|
||||
OpenClawSessionMessageEventPayload.self,
|
||||
from: Data(#"{"sessionKey":"main","hasActiveRun":true,"messageId":"message-1","message":{"role":"assistant","content":[{"type":"text","text":"working"}],"timestamp":2}}"#.utf8))
|
||||
from: Data(
|
||||
#"{"sessionKey":"main","hasActiveRun":true,"messageId":"message-1","message":{"role":"assistant","content":[{"type":"text","text":"working"}],"timestamp":2}}"#
|
||||
.utf8))
|
||||
viewModel.handleTransportEvent(.sessionMessage(omitted))
|
||||
#expect(viewModel.currentSessionEntry()?.activeRunIds == ["run-stale"])
|
||||
|
||||
let payload = try JSONDecoder().decode(
|
||||
OpenClawSessionMessageEventPayload.self,
|
||||
from: Data(#"{"sessionKey":"main","hasActiveRun":true,"activeRunIds":null,"messageId":"message-2","message":{"role":"assistant","content":[{"type":"text","text":"still working"}],"timestamp":3}}"#.utf8))
|
||||
from: Data(
|
||||
#"{"sessionKey":"main","hasActiveRun":true,"activeRunIds":null,"messageId":"message-2","message":{"role":"assistant","content":[{"type":"text","text":"still working"}],"timestamp":3}}"#
|
||||
.utf8))
|
||||
|
||||
viewModel.handleTransportEvent(.sessionMessage(payload))
|
||||
|
||||
@@ -10408,6 +10412,7 @@ struct ChatViewModelTests {
|
||||
#expect(await MainActor.run {
|
||||
vm.sessions.first(where: { $0.key == "main" })?.thinkingLevel
|
||||
} == "high")
|
||||
#expect(await MainActor.run { vm.errorText } == nil)
|
||||
}
|
||||
|
||||
@Test func `older pending thinking choice becomes preference fallback`() async throws {
|
||||
@@ -10486,12 +10491,14 @@ struct ChatViewModelTests {
|
||||
try await loadAndWaitBootstrap(vm: vm, sessionId: "sess-main")
|
||||
await MainActor.run { vm.selectFastMode("off") }
|
||||
await vm.waitForPendingSessionSettings(in: "main")
|
||||
#expect(await MainActor.run { vm.errorText } == "rejected")
|
||||
#expect(await MainActor.run { vm.fastModeSelectionID } == OpenClawChatViewModel.inheritedThinkingSelectionID)
|
||||
#expect(await MainActor.run { vm.sessions.first?.fastMode } == nil)
|
||||
#expect(await MainActor.run { vm.sessions.first?.effectiveFastMode } == .on)
|
||||
|
||||
await MainActor.run { vm.selectVerboseLevel("full") }
|
||||
await vm.waitForPendingSessionSettings(in: "main")
|
||||
#expect(await MainActor.run { vm.errorText } == "rejected")
|
||||
#expect(await MainActor.run { vm.verboseLevel } == OpenClawChatViewModel.inheritedThinkingSelectionID)
|
||||
#expect(await MainActor.run { vm.sessions.first?.verboseLevel } == nil)
|
||||
}
|
||||
@@ -10763,6 +10770,7 @@ struct ChatViewModelTests {
|
||||
#expect(await MainActor.run { vm.preferredThinkingLevel } == "off")
|
||||
#expect(await MainActor.run { !vm.prefersExplicitThinkingLevel })
|
||||
#expect(await MainActor.run { callbackState.values } == ["medium", "off"])
|
||||
#expect(await MainActor.run { vm.errorText } == "rejected")
|
||||
}
|
||||
|
||||
@Test func `two failed queued thinking patches restore the confirmed level`() async throws {
|
||||
|
||||
Reference in New Issue
Block a user