* fix(llm): omit temperature for OpenAI GPT-6 family (#1101)
Official openai channel already skipped temperature for gpt-5* (#857);
GPT-6 Astra/Sol/Luna reject non-default temperature the same way. Extend
the omit rule and cover display-name / prefixed model ids in unit tests.
* test(llm): tighten GPT-6 API model coverage
---------
Co-authored-by: Chris233 <h-chris233@outlook.com>
* fix(hotkey): allow Space and Mouse4/5 as dictation shortcuts
Normalize Space recording to the named primary so validate/parse no longer
trim it to empty (#1109), surface real binding/register errors, and add a
Windows WH_MOUSE_LL path so Mouse4/Mouse5 can be recorded, saved, and trigger
dictation globally (#1099).
* fix(i18n): add mouseSideHint to remaining locales
Unblocks tsc after Mouse4/Mouse5 recording hint was added for en/zh-CN.
* fix(linux-egui): use current time in host_contract history fixture
Hardcoded 2026-08-27 falls outside the test's 30-day retention window as of
2026-09-26, so append_history pruned the entry and list_history returned [].
* fix(linux-egui): restore missing main.rs test helpers
cargo check --all-targets failed because remote UI unit tests still called
disconnected_app/rendered_text after those fixtures were dropped.
* fix(linux-egui): drop obsolete remote_ui unit test
remote_ui was removed from OpenLessEguiApp but the fingerprint rendering test
still called it, breaking cargo check --all-targets on Linux egui CI.
* fix(core): avoid tokio::spawn in e2ee sync store for TaskSpawner seam
Linux egui CI's check-core-runtime-seam rejects production tokio::spawn.
Match the in-task async blocks used by the last green Linux egui PR.
* fix(core): mark e2ee test modules for TaskSpawner seam scanner
The seam gate only recognizes #[cfg(test)], not #![cfg(test)]. Add an
explicit marker module so test-only tokio::spawn usage is ignored.
* fix(ci): exclude desktop registration on mobile and stabilize history fixture
---------
Co-authored-by: Chris233 <h-chris233@outlook.com>
* fix(selection-voice): auto-hide capsule when begin fails without selection
Schedule the standard 2s capsule idle timer after no-selection begin errors so the Siri-style prompt does not stay on screen indefinitely.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection): log why selection capture missed for voice/polish
Distinguish clipboard sentinel unchanged, empty copy, shortcut failure, and prefetch vs live capture so user-exported logs can diagnose false no-selection reports.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection): fix capture diag logging compile errors
Format optional front_app in prefetch miss logs and gate the NoCapturePath fallback to non-desktop targets so macOS/Windows/Linux builds compile cleanly.
Co-authored-by: Cursor <cursoragent@cursor.com>
* debug(selection): add sentinel/post_copy DEBUG logs to diagnose Chrome capture
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection): Windows content-change check instead of sentinel for Ctrl+C validation
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection): settle clipboard after sentinel for Windows history race
Clipboard History async listeners can hold the clipboard after we write the
sentinel, so target-app Ctrl+C silently fails. Wait for settle, poll, and
optionally resend Ctrl+C. Bump to 1.3.18-Beta.10.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection): parenthesize duration cast comparisons for Rust parse
Bare `as u64 <` is parsed as a generic; cfg(windows) code still must parse on Linux CI.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection): handle GetOpenClipboardWindow Result and type key_down
windows 0.58 returns Result<HWND>; annotate VIRTUAL_KEY for GetAsyncKeyState.
Co-authored-by: Cursor <cursoragent@cursor.com>
* chore(selection): 从 PR 中移除 fork 专用版本号与 release workflow
上游 PR 只保留选区捕获 / 剪贴板 sentinel 修复。版本号仍由上游发布流程管理。
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Chris233 <h-chris233@outlook.com>
* feat(selection-voice): Windows 选区语音编辑 MVP(issue #987)
选区 + 专用快捷键 + 语音指令:指令润色后按 auto/manual/heuristic 分流到 QA 或 EditPlan 确定性编辑,含设置页、预览窗与热键集成。
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection-voice): 修复 Windows 编译(展平 session 模块结构)
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection-voice): 用 polish_text 替代 ActiveLLMProvider::complete
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ci): 补全 mock trait 与 SessionId 单元测试类型
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(release): feature 分支跳过 MSI 并上传 NSIS 安装包
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection-voice): post-utterance intent picker and merged settings
Let users choose question vs edit after speaking (default prompt mode), merge polish and voice into one settings card, keep hotkey supervisor polling, and show capsule errors when trigger preconditions fail.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(i18n): add selectionWorkspace keys for ja, ko, zh-TW
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection-voice): compare hotkey supervisor signatures as Option<&str>
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(coordinator): gate selection_voice_intent_prompt init to Windows
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection-workspace): unify voice and polish hotkey with edge prefetch
Reuse the selection polish shortcut for voice edit and prefetch selection at hotkey press to avoid Alt clearing the selection before capture.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection-voice): align auto/toggle hotkey modes and intent UX
Match dictation auto short/long-press semantics, fix toggle stop blocked by busy flag, block overlapping dictation, and invert intent toggle to heuristic-off / AI-on.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ci): gate selection-voice dictation block to Windows only
selection_voice_session is Windows-gated; non-Windows builds failed with E0433 when dictation referenced it unconditionally.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection-voice): surface end-workflow errors instead of stuck loading
When stopping a voice session, failures during ASR, intent, or edit-plan steps now reset state and show a user-facing capsule error with stage hints.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection-voice): annotate end-workflow async block error type as String
Windows CI failed because the async block inferred Result<_, str> instead of Result<_, String>.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection-voice): route translation edits through translate pipeline
Infer target language from voice instructions like translate-to-English and build a full_rewrite plan via translate_text instead of fragile EditPlan JSON. Also normalize common LLM JSON aliases and improve parse fallbacks.
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(selection-voice): use XML EditPlan format for LLM edit responses
Switch voice-edit system prompt to XML envelopes with child elements for multiline text. Add parse_edit_plan with XML-first parsing and JSON fallback for legacy outputs.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(edit-plan): correct XML entity match string literals
Fix E0762 unterminated character literal in decode_xml_text that broke all platform builds.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(edit-plan): resolve XML parser type errors for CI
Use Option for find_open_tag, fix unwrap_or types, bool attr matching, and promote_alias_field slice arity.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(edit-plan): fix remaining XML parser compile errors
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(edit-plan): fix tuple arity, map remove keys, and borrow in normalize
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection-voice): unify voice edit with QA panel and improve intent
Route voice edits through QaPanel for shared preview/confirm UX, hide capsule when the session ends, prioritize heuristic edit cues for auto intent, and fix translation identity checks.
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(selection-voice): 统一语音编辑为 QA 面板预览模式并支持回退
将选区语音编辑流程统一到 QA 面板,新增预览与回退功能。
- 新增 `revert_selection_voice_preview` Tauri 命令及 IPC 调用,支持回退到上一轮编辑预览
- 在 QA 面板中新增 `editRevertAvailable` 状态,处理预览模式下的错误与空闲状态
- 优化 `emit_selection_voice_end_error` 逻辑:预览模式下错误回退到 Idle 状态并关闭面板,其他模式下显示错误胶囊
- 新增翻译结果与原文相同时的错误提示
- 跟踪 `previous_preview_text` 以支持回退操作
- 同步更新多语言(zh-CN、zh-TW、en、ja、ko)编辑按钮文案及新增回退文案
* fix(ci): gate selection-voice QA follow-up to Windows and fix compile errors
Add missing selection_voice_preview_mode helper, cfg-gate revert command registration, and release QA mutex before async follow-up edit to satisfy Send.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ci): stub selection module in backend-tests harness
hotkey.rs now prefetches workspace selection on polish shortcut; provide no-op stub for Rust-only test crate.
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(qa): route intent by interrogative and add edit-instruction mode
Detect question vs non-question for selection-voice Auto intent, polish QA mic ASR, and gate ask/edit on the panel checkbox so text and voice stay consistent.
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(selection-voice): 增强语音编辑功能,优化 QA 面板状态同步
* fix(selection-voice): stop legacy edit keywords from misrouting to QA
Filter pre-#987 default keywords like 「改成」 so edit imperatives no longer match question heuristics, and reset qa_stream_cancelled before streaming so prior QA cancellations do not yield empty-stream failures.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(selection-voice): address review blockers
* fix(selection-voice): gate QA preview cleanup to Windows
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Chris233 <h-chris233@outlook.com>
* fix(android): use app filesDir for persistence and SAF log export
Honor devices reject writes under /data/local/tmp, which caused PreferencesStore to fall back to openless_prefs_fallback.json and settings saves to fail. Initialize JNI storage roots before Coordinator and file logging, route logs to files/logs/openless.log, and export via ContentResolver for SAF content:// URIs.
* fix(android): guard StylePack empty asset_root and Android-only coord logs
Reject persisting style pack icons when asset_root is empty to avoid writing under cwd; no-op cleanup on empty root. Limit Coordinator persistence degrade log suffix to Android only. Add unit test.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Expose polish mode and marketplace via a bottom-sheet under the Style tab, matching desktop NAV_TREE grouping for issue #862.
Co-authored-by: Cursor <cursoragent@cursor.com>
Skip getActivityStats IPC and ActivityHeatmapCard when useMobileLayout()
is true so narrow screens avoid horizontal overflow and unnecessary work.
Closes#861
Co-authored-by: Cursor <cursoragent@cursor.com>
Merge PR #740 after review and full CI. This supersedes PR #734 by including its SendInput insertion mode work plus the keyboard-list visibility preference for #738.
* chore(ci): nudge Actions to index release workflow on fork
Co-authored-by: Cursor <cursoragent@cursor.com>
* chore(ci): nudge Actions to index release workflow on fork
Co-authored-by: Cursor <cursoragent@cursor.com>
* chore(ci): nudge Actions to index release workflow on fork
Co-authored-by: Cursor <cursoragent@cursor.com>
* chore(ci): nudge Actions to index release workflow on fork
Co-authored-by: Cursor <cursoragent@cursor.com>
* chore: add CapsWriter to .gitignore for local voice inference reference
* fix(windows): revert capsule/qa Acrylic to remove dark host rect
Reverts the apply_acrylic blocks from #487. Full-window Acrylic
tinted the 220×84 capsule hitbox, causing a visible dark rectangle
around the pill on light backgrounds.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>