Skip to content

feat(setup): add ESC cancel, multi-language UI, and dynamic language …#94

Open
zyw-981204 wants to merge 1 commit into
missuo:mainfrom
zyw-981204:feat/multi-language-wizard
Open

feat(setup): add ESC cancel, multi-language UI, and dynamic language …#94
zyw-981204 wants to merge 1 commit into
missuo:mainfrom
zyw-981204:feat/multi-language-wizard

Conversation

@zyw-981204

Copy link
Copy Markdown

…picker

  • ESC during recording cancels the session (configurable via hotkey.escape_cancel_enabled).
  • Setup Wizard UI strings extracted to Localizable.strings across ASR/LLM/Overlay/Controls/Dictionary/Prompt/Templates/About panes; window rebuilds on language change.
  • Add ja.lproj and zh-Hant.lproj language packs; language picker in About pane now scans available .lproj folders dynamically.
  • Wizard window now activates app + raises window when opened from menu bar, so it appears above other apps.
  • Local dev signing: use Koe Dev self-signed identity so rebuilds keep TCC permissions.

…picker

- ESC during recording cancels the session (configurable via hotkey.escape_cancel_enabled).
- Setup Wizard UI strings extracted to Localizable.strings across ASR/LLM/Overlay/Controls/Dictionary/Prompt/Templates/About panes; window rebuilds on language change.
- Add ja.lproj and zh-Hant.lproj language packs; language picker in About pane now scans available .lproj folders dynamically.
- Wizard window now activates app + raises window when opened from menu bar, so it appears above other apps.
- Local dev signing: use Koe Dev self-signed identity so rebuilds keep TCC permissions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@missuo

missuo commented Jul 14, 2026

Copy link
Copy Markdown
Owner

Review result: changes requested.

  1. The bare-Escape conflict is not resolved. In the active global event-tap path, hotkeyEventCallback returns NULL, so the foreground terminal never receives Escape and Codex CLI / Claude Code cannot stop. In the listen-only fallback, Escape passes through and cancels both Koe and the foreground CLI. This also contradicts the header's “NOT consumed” contract. Because a global bare Escape cannot identify which app the user intends to cancel, it should not be enabled by default. Please make this opt-in/default-off or use a configurable chord/explicit Koe action.

  2. The Escape handler outlives failed sessions. Monitoring starts before beginSession, but neither rustBridgeDidEncounterError: nor handleAudioCaptureError: clears escapeKeyHandler. After startup/audio failure, the next global Escape can still be swallowed and run cancellation code while Koe is idle. Please centralize cleanup and clear it on every session termination/error path.

  3. The new language packs are incomplete. Static key comparison found that both ja.lproj and zh-Hant.lproj omit 65 keys already used by the app (status-bar menus/stats, permissions, update dialogs, edit menu, notifications). localizedStringForKey: selects the language-specific bundle without a per-key English fallback, so these screens can display raw key names. All shipped locales need the complete key set, plus an automated parity check.

  4. The signing identity is machine-specific. project.yml hard-codes manual signing with Koe Dev. Contributors and CI without that certificate can fail during xcodebuild; this should be removed from shared project settings or supplied conditionally with a documented fallback.

The PR also currently conflicts with main and bundles ESC behavior, localization, window activation, and signing. Please split/rebase it so each behavior can be reviewed and tested independently.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants