Added
- Linux GNOME Wayland:
suppressWhenFocusednow works via AT-SPI focus detection (#105, follow-up #111; issues #83, #104)- GNOME exposes no compositor focus API and
xdotoolcannot see native Wayland windows, so the backend reads the AT-SPIACTIVEstate bit overorg.a11y.Bus(requiresgdbus) - Ghostty is matched by its
/com/mitchellh/ghosttyAT-SPI path, other terminals by app name (including thegnome-terminal-serverAT-SPI alias) - Window identity is
bus@pathsince AT-SPI object paths repeat across D-Bus bus names - Unknown window roles are excluded so a failed lookup fails open instead of suppressing a notification
- Implemented and verified on Ubuntu 26.04.1 LTS + GNOME Shell 50.1 + Ghostty 1.3.0
- Previously GNOME sessions always fell back to notifying (and with
notificationSystem: ghostty, Ghostty hid its own banner while plugin sounds still played)
- GNOME exposes no compositor focus API and
- Permission notifications are skipped when the request was auto-approved (#98, follow-up #112; issue #94)
- On
permission.askedthe plugin waits 300ms and only notifies if the request is still pending; any lookup failure notifies (fail-open) - The shared dedupe window is claimed only when a notification actually fires, so a skipped auto-approved request no longer mutes a real one arriving within the same second
- On
- Added
OPENCODE_NOTIFIER_DEBUG=1to log the focus backend decision (backend,cached/currentwindow, session, result) - README: install shortcut via
opencode plug -g @mohak34/opencode-notifier(#99)
Fixed
- Windows: PowerShell sound playback uses
-EncodedCommandso args never contain spaces (#101) - Security hardening: no child process is spawned through a shell anymore (#100)
- All
execFileSynccalls use argv arrays withshell: false - Window IDs are validated before use; KWin socket uses
mkdtemp; Ghostty fields are sanitized
- All
- KDE:
qdbusis resolved viaPATHscan (including Fedora's versioned names) without invoking a shell (#103, #109)