chore(release): bump version to 1.0.1 (build 27)
Release the current PiP reliability, polish style, macOS dictionary, and UI updates.
This commit is contained in:
@@ -178,10 +178,18 @@ final class KeyboardFlowCoordinator {
|
||||
// host utt.rec=1 → ready=false → keyboard forever "正在启动…".
|
||||
let hostBusy = readySnapshot?.reason == .recording
|
||||
|| readySnapshot?.reason == .processing
|
||||
// PiP sessions publish `reason=.starting` while the small window is
|
||||
// coming up — treat that as warming so the mic stays orange (wait)
|
||||
// instead of jumping into another cold start.
|
||||
let hostWarming = !hostReady
|
||||
&& !hostBusy
|
||||
&& FlowSessionBridge.isSessionActive()
|
||||
&& (FlowSessionBridge.isHostReachable() || isPendingFlowStart || withinReadyGrace)
|
||||
&& (
|
||||
FlowSessionBridge.isHostReachable()
|
||||
|| isPendingFlowStart
|
||||
|| withinReadyGrace
|
||||
|| readySnapshot?.reason == .starting
|
||||
)
|
||||
state.flowSessionActive = FlowSessionBridge.isSessionActive()
|
||||
state.debugPendingFlowStart = isPendingFlowStart
|
||||
state.debugFlowRecording = isFlowRecording
|
||||
@@ -475,7 +483,11 @@ final class KeyboardFlowCoordinator {
|
||||
isPendingFlowStart = true
|
||||
isFlowRecording = false
|
||||
flowStartDeadline = Date().timeIntervalSince1970 + FlowWatchdog.startTimeout
|
||||
state.lastTranscript = ExtL10n.string("keyboard.flow.startingSession")
|
||||
state.lastTranscript = ExtL10n.string(
|
||||
FlowSessionPolicy.keepAliveMode() == .pictureInPicture
|
||||
? "keyboard.flow.startingSession.pip"
|
||||
: "keyboard.flow.startingSession"
|
||||
)
|
||||
recomputeMicVoiceAvailability()
|
||||
openHostApp("startflow")
|
||||
startFlowStartWatchdog()
|
||||
|
||||
@@ -418,9 +418,17 @@ private struct TranscriptLine: View {
|
||||
case .unavailable(.missingAPIKey):
|
||||
Text(micDisabledHint)
|
||||
case .unavailable(.hostNotReady):
|
||||
ExtL10n.text("keyboard.flow.sessionInactive")
|
||||
if FlowSessionPolicy.keepAliveMode() == .pictureInPicture {
|
||||
ExtL10n.text("keyboard.flow.sessionInactive.pip")
|
||||
} else {
|
||||
ExtL10n.text("keyboard.flow.sessionInactive")
|
||||
}
|
||||
case .unavailable(.preparingSession):
|
||||
ExtL10n.text("keyboard.flow.startingSession")
|
||||
if FlowSessionPolicy.keepAliveMode() == .pictureInPicture {
|
||||
ExtL10n.text("keyboard.flow.startingSession.pip")
|
||||
} else {
|
||||
ExtL10n.text("keyboard.flow.startingSession")
|
||||
}
|
||||
case .unavailable(.noFullAccess):
|
||||
ExtL10n.text("keyboard.error.fullAccessRequired")
|
||||
case .unavailable(.appGroupUnavailable):
|
||||
|
||||
@@ -134,10 +134,12 @@
|
||||
|
||||
/* Flow session (keyboard) */
|
||||
"keyboard.flow.sessionInactive" = "Voice session off";
|
||||
"keyboard.flow.sessionInactive.pip" = "Picture in Picture off — tap mic to open OSGKeyboard";
|
||||
"keyboard.flow.start" = "Start";
|
||||
"keyboard.flow.startA11y" = "Start voice session";
|
||||
"keyboard.flow.sessionExpired" = "Voice session ended. Open OSGKeyboard to restart.";
|
||||
"keyboard.flow.startingSession" = "Starting voice session…";
|
||||
"keyboard.flow.startingSession.pip" = "Starting Picture in Picture…";
|
||||
"keyboard.flow.transcribing" = "Transcribing…";
|
||||
"keyboard.flow.resultTimeout" = "Timed out waiting for transcription. Try again.";
|
||||
"keyboard.flow.hostDisconnected" = "Voice session disconnected. Open OSGKeyboard to restart.";
|
||||
|
||||
@@ -134,10 +134,12 @@
|
||||
|
||||
/* Flow session (keyboard) */
|
||||
"keyboard.flow.sessionInactive" = "语音会话未启动";
|
||||
"keyboard.flow.sessionInactive.pip" = "画中画未启动,点麦克风打开 OSGKeyboard";
|
||||
"keyboard.flow.start" = "启动";
|
||||
"keyboard.flow.startA11y" = "启动语音会话";
|
||||
"keyboard.flow.sessionExpired" = "语音会话已结束,请打开 OSGKeyboard 重新启动";
|
||||
"keyboard.flow.startingSession" = "正在启动语音会话…";
|
||||
"keyboard.flow.startingSession.pip" = "正在启动画中画…";
|
||||
"keyboard.flow.transcribing" = "识别中…";
|
||||
"keyboard.flow.resultTimeout" = "等待识别结果超时,请重试";
|
||||
"keyboard.flow.hostDisconnected" = "语音会话已断开,请打开 OSGKeyboard 重新启动";
|
||||
|
||||
Reference in New Issue
Block a user