Updated: 2026-07-13 19:46:37 CST
Worktree: /Users/bytedance/.config/superpowers/worktrees/opentypeless/desktop-settings-simplification
Original checkout to avoid: /Users/bytedance/个人项目/opentypeless
Branch: codex/desktop-settings-simplification at a04937a, based on local main at d188dbf
- Preserve all uncommitted changes.
- Do not modify the original checkout.
- Do not merge, push, or commit unless explicitly asked.
- Current packaged test app:
/Users/bytedance/.config/superpowers/worktrees/opentypeless/desktop-settings-simplification/src-tauri/target/debug/bundle/macos/OpenTypeless.app
The main feature work and review fixes are implemented. The final full frontend/Rust suites, lint, strict Clippy, production build, debug app bundle, and packaged native visual pass are green. This is not yet a signed release recommendation because Windows/Linux real-device smoke tests, macOS signed/notarized package behavior, Gmail Automation permission flow, account password backend flows, and updater end-to-end release flow still need real-environment verification.
#76Artix/Wayland crash: diagnostics and opt-in launch workarounds are implemented, but the reporter-specific crash is not confirmed fixed.#75iOS support: not implemented and outside this desktop spec.#73dictionary import/export: local import/export is implemented; trending-keyword import remains open.#72local-first paths: Ollama keyless polish/model fetch and Custom Whisper onboarding bugs are fixed in code and tests; real endpoint smoke tests remain.#70Fn push-to-talk: lower-level macOS Fn support and default binding are implemented; hardware smoke remains.#67Xiaomi MiMo ASR: not implemented.#28summary UI: Doubao STT exists, but the requested summary UI remains open.
- Added spec:
docs/superpowers/specs/2026-07-13-local-provider-and-linux-launch-hardening-design.md. - Implemented #72 local provider fixes:
- Added shared LLM key requirement helper.
- Ollama is treated as keyless consistently.
- Dictation AI polish no longer skips Ollama just because API key is empty.
- Ask and dictation now use the same keyless/keyed provider decision.
- LLM connection and benchmark paths allow keyless providers when base URL/model are configured.
- Keyless LLM requests omit empty
Authorization: Bearerheaders. - AI Polish hides the API-key field for keyless providers and keeps Test beside Base URL.
- Keyed providers cannot request models until a key is entered.
- Onboarding no longer silently switches an existing
custom-whispersetup to a cloud provider. - Onboarding Custom Whisper test now uses
stt_custom_api_key,stt_custom_base_url, andstt_custom_model.
- Added #76 Linux launch hardening:
- Logs safe Linux launch diagnostics before WebView creation.
- Keeps existing NVIDIA + Wayland DMA-BUF workaround.
- Adds opt-in env switches:
OPENTYPELESS_DISABLE_WEBKIT_DMABUF=1OPENTYPELESS_DISABLE_WEBKIT_COMPOSITING=1OPENTYPELESS_FORCE_GDK_X11=1OPENTYPELESS_FORCE_SOFTWARE_GL=1
- Does not claim Artix/AMD crash fixed; needs reporter logs/backtrace/strace.
- General settings now keeps hotkeys and dictation mode as separate compact sections.
- Low-frequency settings remain behind the existing
Moredisclosure. - macOS Accessibility grant flow no longer leaves stale Fn registration errors.
- Top Accessibility banner, General pane recovery, and onboarding permission grant now call
resumeHotkey()after permission is granted. - AI Polish and Speech Recognition Pro CTAs use an upgrade button and consistent card density.
common.upgradekey usage was removed in favor ofnav.upgrade.- Config dirty-state comparison is semantic and key-order independent, so a cold backend load no longer shows a false
You have unsaved changesbar. - Scenes and Dictionary switch to stacked controls at the app's narrow desktop size while retaining compact horizontal rows at the normal window size.
- Old
SceneAssignmentsDialogUI was removed. - Scenes now centers on
App Writing Modesby app family. - Each family shows representative app logos, for example Gmail, Apple Mail, Slack, Lark, Google Docs, Notion, GitHub, Cursor, Zendesk, X, and LinkedIn.
- Default modes are concrete names such as Email Format, Work Chat, Document Notes, etc.; no more
Automaticas the user-facing choice. - Built-in default system scenes appear in My Scenes as editable/resettable defaults.
- Custom scenes remain creatable and assignable to app families.
- Global Scene activation is no longer exposed in the new UI.
- Exact-app override UI now follows default app writing mode or selects user custom scenes only; it no longer offers old built-in scene/family assignment choices.
- Email family prompt now asks for an email body, greeting when recipient is spoken, clear paragraphs, and light closing when appropriate.
- Work chat, personal chat, document, project management, developer collaboration, prompt/code, support, and social family rules have concise formatting contracts.
- Built-in Professional Email prompt now explicitly produces an email body.
- When a mapped/default/custom/active scene prompt exists,
[BUILTIN_POLISH_STYLE]is skipped so Polish Style does not stack with scene-owned output shape. - General/no-scene dictation still keeps Polish Style fallback.
- Chinese email draft intent detection was expanded for natural phrases like writing an email to Sara while retaining guarded negative/discussion cases.
- Added compact onboarding
Permissionsstep. - It shows only relevant rows:
- Microphone
- Text output
- Browser apps
- Apple Speech only when selected
- No Settings permission health/checklist section was added, per user request.
- Added
BrowserAccessStatusthrough app context and history:availableneeds_permissionnot_applicableunknown
- Passive polling uses the non-prompting macOS Automation preflight API.
- Only macOS TCC denials (
-1743/-1744) becomeneeds_permission; unrelated AppleScript failures remainunknown. - The top banner exposes a compact
Allow Browser Accessaction only when access is actually needed. - Clicking that action requests Automation access for the exact safe browser target; polling never raises a surprise system prompt.
- Raw URLs are not stored or displayed.
- AI Polish shows a short Browser Access hint only when context adaptation is enabled, latest context is
general.browser, and URL read failed. - History shows
Browser · needs browser accessonly for that specific URL-read-failure fallback.
- Onboarding includes App Writing Modes copy and the new compact Permissions step.
- Ask standalone webview now loads config on startup and applies
config.ui_language, preventing English UI from showing Chinese Ask copy. - All new strings were added across 10 locale files.
- Locale key parity verified with 725 keys.
- Ask recording and Ask thinking capsule titles use
whitespace-nowrap, preventing Chinese问答from breaking into two vertical characters. - macOS History clear no longer uses
window.confirm; it now uses an in-app minimal confirmation block. - Existing History feature still supports clearing all history. There is still no single-entry delete feature.
Current defaults:
- macOS:
- Dictation:
Fn - Ask:
Fn+Space - Translate:
Fn+LeftShift - Mode:
toggle
- Dictation:
- Windows:
- Dictation:
Ctrl+/ - Ask:
Ctrl+. - Translate:
Ctrl+Shift+/ - Mode:
hold
- Dictation:
- Linux:
- Dictation:
Ctrl+/ - Ask:
Ctrl+. - Translate:
Ctrl+Shift+/ - Mode:
hold
- Dictation:
RightAlt parsing/native support remains in lower-level code, but it is no longer the Windows default or recommended special chip.
- Account page security section shows:
Change passwordif credential account exists.Set passwordfor OAuth-only accounts.- No action while capability is unknown.
- Forgot password remains in signed-out auth flow.
- Password dialog has focused modal behavior and focus trap tests.
- Store logic covers:
- Password reset request with locale.
- Password change with token rotation.
- OAuth-only set password.
- Verification required before set password if account is unverified.
- This flow still requires real backend/email verification before release.
- Device-local API keys and exact-app matcher material remain excluded from cloud backup/restore.
system_scene_overridesis included so edited default writing modes survive cross-device restore.- Restored settings are allow-list merged, persisted through Tauri, then reloaded from backend truth.
- History, dictionary entries, and correction rules are validated and restored into SQLite, not only the current Zustand session.
- History/dictionary/correction replacement uses one SQLite transaction and ignores incoming database IDs.
- Dictionary backups use the existing cloud
dictionaryslot as{ entries, correction_rules }; legacy array-only backups remain supported and preserve local correction rules.
src/components/Settings/ScenesPane.tsxsrc/components/Settings/GeneralPane.tsxsrc/components/Settings/LlmPane.tsxsrc/components/Settings/SttPane.tsxsrc/components/Settings/AppStyleMappingDialog.tsxsrc/components/Settings/shared/useDirtyConfig.tssrc/components/toast-service.tssrc/components/Settings/SceneAssignmentsDialog.tsxdeletedsrc/components/Onboarding/PermissionsStep.tsxaddedsrc/components/MainLayout/AccessibilityBanner.tsxsrc/components/Capsule/CapsuleAskRecording.tsxsrc/components/Capsule/CapsuleAskThinking.tsxsrc/components/History/index.tsxsrc/components/History/AppContextMeta.tsxsrc/App.tsxsrc/stores/appStore.tssrc-tauri/src/storage/mod.rssrc-tauri/src/commands/backup.rssrc-tauri/src/app_detector/cache.rssrc-tauri/src/app_detector/platform/macos.rssrc-tauri/src/app_detector/types.rssrc-tauri/src/llm/context_policy.rssrc-tauri/src/llm/prompt.rssrc-tauri/src/voice_intent/grammar/zh_hans.rssrc/i18n/locales/*.jsonsrc/components/Onboarding/SttSetupStep.tsxsrc/components/Onboarding/__tests__/SttSetupStep.test.tsxsrc-tauri/src/commands/llm.rssrc-tauri/src/commands/ask.rssrc-tauri/src/llm/openai.rssrc-tauri/src/lib.rssrc/lib/backup-settings.tssrc/components/AccountPage/index.tsxdocs/superpowers/specs/2026-07-13-local-provider-and-linux-launch-hardening-design.md
Final verification after the review fixes:
npm test -- --reporter=dot- Passed: 41 files, 373 tests.
- Notes: expected test-log noise from simulated vault failures, HTTP 429, update install failure, and existing framer-motion DOM prop mocks.
cargo test --manifest-path src-tauri/Cargo.toml- Passed: 456 tests.
npm run lint- Passed with zero warnings.
npm run format:check- Passed after applying the repository's Prettier configuration to
src/.
- Passed after applying the repository's Prettier configuration to
cargo fmt --manifest-path src-tauri/Cargo.toml -- --check- Passed.
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings- Passed.
npm run build- Passed.
- Notes: existing Vite dynamic import/chunk-size warnings remain.
- Locale key parity script
- Passed: 725 leaf keys in each of 10 locale files.
git diff --check- Passed.
npm run tauri -- build --debug --bundles app --config '{"bundle":{"createUpdaterArtifacts":false}}'- Passed.
- Latest app path:
src-tauri/target/debug/bundle/macos/OpenTypeless.app
- Packaged macOS native QA through Computer Use:
- Passed cold-start Settings check: no false dirty bar.
- Passed General, AI Polish, Scenes, Dictionary, Account, and Forgot password review at
900x700and the app's narrow720x480size. - Confirmed app logos, stacked narrow layouts, compact normal layouts, and no observed text overlap or clipping.
- Proposed next version:
v1.1.49(the tag is unused in both GitHub repositories). - macOS and Linux signing/notarization secrets are configured in the CI repository.
- The Windows SignPath workflow builds and signs both MSI and NSIS packages, but the configured policy currently issues the SignPath OSS test certificate. It is useful for a dry run only and is not a publicly trusted production signature.
- The Windows workflow now rejects
publish_release=truewhenever the SignPath policy slug starts withtest-ortest_, and it requires Authenticode statusValidfor production publication. This prevents a test-signed installer from being attached to a stable GitHub Release by mistake. - A complete signed
v1.1.49release remains blocked until the CI repository is given a production SignPath signing policy/certificate (or the standard Windows workflow receives a production PFX certificate and password). - The owner repository's Actions jobs currently fail before executing any steps, so
CI and signing validation must run from
toverwu-qaq/opentypeless; release assets are still published totover0314-w/opentypelessafter all signing gates pass.
- Gmail Browser Access / macOS Automation:
- Non-prompting detection and explicit user-triggered grant paths exist and status is recorded.
- Still needs real Chrome/Gmail test to confirm the system prompt and post-grant
Gmail / Emailclassification.
- Windows:
- Defaults restored to Ctrl shortcuts and covered in frontend platform tests.
- Needs real Windows smoke test for global shortcut behavior and translation shortcut
Ctrl+Shift+/. - A macOS-hosted Windows cross-target check was attempted but stopped inside
ring's C build because the MSVC SDK headerassert.his unavailable; this does not replace a Windows build.
- Linux:
- Defaults set and Wayland limitations exist in code.
- Needs real X11/Wayland smoke test.
- Issue #76:
- Diagnostics and opt-in workarounds are implemented.
- The Artix/AMD crash still requires reporter confirmation and native backtrace/strace.
- Issue #72:
- Code/test fixes are implemented for keyless LLM and Custom Whisper onboarding.
- A real Ollama smoke test and a real Custom Whisper endpoint smoke test are still recommended before closing.
- Signed macOS release:
- Only debug app bundle verified.
- Signed/notarized
/Applicationsinstall and TCC behavior still need verification.
- Updater:
- Plugin/config exist and prompt component has tests.
- Full manifest/signature/download/install/restart flow not verified in this session.
- Account password:
- UI/store tests pass and code path is reviewed.
- Real backend Set password / Change password / Forgot password email flow still needs test accounts.
- History:
- Clear all is fixed with in-app confirmation.
- Single-entry delete is not implemented.
- Cloud restore:
- Local transactional persistence is covered by tests; a real Pro account upload/download round trip against TalkMore still needs verification.
- Some older locale strings outside this feature may still be English fallback quality, even though key parity passes.
- macOS Fn dictation:
- Grant Accessibility from banner/onboarding.
- Confirm Fn triggers capsule without restarting.
- Ask:
- English UI shows Ask, not Chinese
问答. - Ask recording/thinking capsule does not wrap title.
- English UI shows Ask, not Chinese
- Gmail:
- Use Chrome/Gmail compose.
- Confirm the in-app Browser Access action appears when needed and the macOS prompt appears only after clicking it.
- After grant, History should show Gmail/Email.
- Output should be email body format.
- Scenes:
- Review App Writing Modes rows and logos.
- Edit/reset Email Format.
- Assign custom scene to a family.
- History:
- Clear all history on macOS using in-app confirmation.
- Account:
- OAuth-only Set password.
- Credential Change password.
- Forgot password email.
- Windows:
- Dictation
Ctrl+/. - Ask
Ctrl+. - Translate
Ctrl+Shift+/.
- Dictation
- Linux:
- Dictation
Ctrl+/. - Ask
Ctrl+. - Translate
Ctrl+Shift+/. - Confirm Wayland copy/paste behavior.
- Dictation
- Release:
- Build signed macOS app.
- Verify updater end-to-end.
- Worktree is intentionally dirty and broad. Do not revert unrelated files.
handoff.mditself is untracked and should remain as the handoff artifact unless the user asks otherwise.- The user has explicitly authorized commit, push, CI/CD, signed release publication, and evidence-based issue replies/closures for this release task.
- If continuing QA, start from the latest debug package path above.