From e9e7ba50c4277aebcd8630fbf9a21ae9a8bb10ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=95=E6=9F=8F=E9=9D=92?= Date: Fri, 5 Jun 2026 10:47:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=95=BF=E6=8C=89=E9=98=88=E5=80=BC?= =?UTF-8?q?=E4=BB=8E=E4=BC=9A=E8=AF=9D=E5=BC=80=E5=A7=8B=E8=AE=A1=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E6=89=A3=E9=99=A4=20ASR=20=E6=8F=A1=E6=89=8B=E8=80=97?= =?UTF-8?q?=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit arm_voice_agent_long_press 之前在 begin_session(含 ASR 握手)之后才睡 550ms, 握手慢时实际长按阈值被拉长、判定不稳。改为从 state.started_at(≈按下时刻)算起 睡剩余时间,阈值稳定。 --- .../app/src-tauri/src/coordinator/dictation.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/openless-all/app/src-tauri/src/coordinator/dictation.rs b/openless-all/app/src-tauri/src/coordinator/dictation.rs index 677510bf..b7a39079 100644 --- a/openless-all/app/src-tauri/src/coordinator/dictation.rs +++ b/openless-all/app/src-tauri/src/coordinator/dictation.rs @@ -556,10 +556,16 @@ pub(super) async fn handle_released(inner: &Arc) { /// 长按计时器:begin_session 后武装。到点时若热键仍按住、仍是同一会话、且尚未升级, /// 就把当前会话标记为语音 Agent。短按(计时器到点前已松手)不受影响。 fn arm_voice_agent_long_press(inner: &Arc) { - let session_id = inner.state.lock().session_id; + // 阈值从会话开始(≈按下时刻)算起,扣掉 begin_session(含 ASR 握手)已耗时间, + // 否则握手慢时实际阈值会被拉长、长按判定不稳定。 + let (session_id, started_at) = { + let st = inner.state.lock(); + (st.session_id, st.started_at) + }; + let remaining = VOICE_AGENT_LONG_PRESS.saturating_sub(started_at.elapsed()); let inner = Arc::clone(inner); async_runtime::spawn(async move { - tokio::time::sleep(VOICE_AGENT_LONG_PRESS).await; + tokio::time::sleep(remaining).await; // 已松手 → 这是一次普通点按(听写),不升级。 if !inner.hotkey_trigger_held.load(Ordering::SeqCst) { return;