Skip to content

Add WakeWord, AppLauncher, AssistantMode plugins and fix startup crash#174

Open
amorr42 wants to merge 1 commit into
szczyglis-dev:masterfrom
amorr42:feat/plugins-and-fixes
Open

Add WakeWord, AppLauncher, AssistantMode plugins and fix startup crash#174
amorr42 wants to merge 1 commit into
szczyglis-dev:masterfrom
amorr42:feat/plugins-and-fixes

Conversation

@amorr42
Copy link
Copy Markdown

@amorr42 amorr42 commented Mar 12, 2026

Summary

  • New plugins: WakeWord (voice activation), AppLauncher (app/media control), AssistantMode (voice assistant orchestration)
  • Critical fix: Windows access violation crash during plugin settings dialog setup when many plugins are registered. Introduced lazy initialization pattern — setup_skeleton() creates minimal UI at startup, full widget build deferred to first dialog open
  • Bug fixes: Config NoneType guard, Profile file handle shadowing & race condition, extract_option_tabs null-safe ordering
  • Test improvements: Cross-platform path handling, timezone-independent assertions, mock isolation with tmp_path_factory
  • Utility: normalize_text() for locale-safe Turkish character comparison

Test plan

  • All 1872 existing tests pass (10 pre-existing failures unrelated to this PR)
  • Application starts without crash on Windows
  • Plugin Settings dialog opens and all plugins are accessible
  • New plugins appear in plugin list and settings are configurable
  • Pre-push sensitive data scan: clean

…on startup

New plugins:
- wake_word: Wake word detection for hands-free activation
- cmd_app_launcher: Launch/close apps, media controls, volume management
- assistant_mode: Orchestrates wake word + audio input/output into a voice assistant loop

Bug fixes:
- Fix Windows access violation crash during plugin settings dialog setup caused by
  excessive Qt widget creation at startup. Introduced lazy initialization pattern:
  setup_skeleton() creates minimal UI structure at startup, full widget build is
  deferred to first dialog open
- Fix extract_option_tabs null-safe check order and prevent empty tab keys from
  being added to the keys list
- Fix Config.load() and load_base_config() NoneType error with defensive guard
- Fix Profile.load() file handle variable shadowing and race condition between
  exists() and open()

Test improvements:
- Fix cross-platform path separator usage (os.path.join)
- Fix timezone-dependent timestamp test
- Fix mock isolation (tmp_path_factory, Profile.init patch, locale reset fixture)
- Fix bridge worker tests with proper MetaObj mock
- Fix provider tests with filesystem isolation

Utilities:
- Add normalize_text() for locale-safe, Turkish-compatible text comparison
- Add openwakeword and pycaw as optional dependencies
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.

1 participant