Skip to content

feat: UX polish, multi-monitor, version-gated hooks (v2.1.0)#12

Merged
TobiiNT merged 10 commits into
mainfrom
fix/ux-polish
Mar 16, 2026
Merged

feat: UX polish, multi-monitor, version-gated hooks (v2.1.0)#12
TobiiNT merged 10 commits into
mainfrom
fix/ux-polish

Conversation

@TobiiNT

@TobiiNT TobiiNT commented Mar 16, 2026

Copy link
Copy Markdown
Owner

Highlights

New features

  • Multi-monitor popup support — monitor dropdown in Hooks settings, all popups + notifications appear on selected screen
  • Claude Code update notification — checks npm registry on startup, notifies if newer version available
  • Auto-refresh on session reset — one-shot timer triggers refresh when usage limit lifts (no more 60s wait)
  • Version-gated hook installation — detects Claude Code version, only installs events your version supports (PostCompact v2.1.76, Elicitation v2.1.76, InstructionsLoaded v2.1.69, etc.)
  • Auto-generated release notes — future releases pull notes from PR body

Bug fixes

  • Duplicate Always Allow buttons — dedup by label+tool+ruleName (fixes company Claude)
  • Terminal button resizes window — only SW_RESTORE if minimized, otherwise just SetForegroundWindow
  • Terminal button focus fight — focus terminal AFTER popup closes
  • Notification click opens popover instead of terminal — StopHandler + hook notifications now pass cwd for terminal focus
  • Cost fetch silent failure — CostFetchError field + 403 logging for org permission issues
  • Diff preview too high contrast — softer red/green colors
  • Activity feed not hiding immediately — listens to SettingsChanged, clears instantly on save
  • Floating panel "Updated just now" stale — 30-second refresh timer
  • Other textbox dark in light mode — theme-aware brushes
  • At 100% usage — shows "Limit reached" with red dot, hides misleading pace estimate

Refactors

  • Extract TerminalFocusHelper to shared utility
  • PopupStackManager supports multi-monitor work areas with DPI-aware conversion

Test plan

  • 133 tests passing
  • Permission + notification popups on correct monitor
  • Terminal focus without resize
  • Task Complete notification focuses terminal
  • Activity feed hides immediately on save
  • Other textbox readable in light mode
  • Vietnamese characters render correctly
  • Version-gated install skips unsupported events

TobiiNT and others added 10 commits March 16, 2026 23:12
…olors

- Dedup by label+tool+ruleName instead of label only (catches company
  suggestions with different types but identical display labels)
- Diff preview uses softer red (#E57373) and green (#66BB6A) for readability

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Extract TerminalFocusHelper to shared utility (was duplicated in popup)
- Terminal button focuses terminal AFTER popup closes via BeginInvoke(Background)
- Hook notification click brings matching terminal to foreground (not popover)
- SendNotification accepts optional cwd parameter for terminal focus

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- CostFetchError field on ClaudeUsage for UI display
- Catches 403 specifically with "No permission to access cost data" message
- Logs warning instead of silently swallowing all exceptions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Detect Claude Code version via 'claude --version'
- Core events (pre-v2.1.37) always installed
- ConfigChange (v2.1.49), WorktreeCreate/Remove (v2.1.50),
  InstructionsLoaded (v2.1.69), PostCompact/Elicitation (v2.1.76)
  only installed if version supports them
- Skipped events logged to console for visibility
- Falls back to core events only if version undetectable

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Listen to SettingsChanged event, clear feed and stop tracking instantly
  when activity feed is disabled (was only updating on refresh timer)
- At 100% usage: show "Limit reached" with red dot instead of pace estimate
- Hide misleading "~Xm to limit" when already at limit

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Schedule one-shot timer for exact session reset time + 2s buffer
- Triggers immediate refresh when usage limit lifts
- No more waiting up to 60s for the regular timer to catch the reset

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 30-second timer refreshes "Updated X ago" text in floating panel
- "just now" correctly progresses to "30s ago" → "1m ago" etc.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Monitor dropdown in Hooks settings (lists all connected monitors)
- PopupStackManager reads selected monitor's work area
- DPI-aware coordinate conversion from physical pixels to WPF units
- Default: Monitor 1 (Primary)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@TobiiNT TobiiNT merged commit 02e7dbe into main Mar 16, 2026
1 check passed
@TobiiNT TobiiNT deleted the fix/ux-polish branch March 16, 2026 16:58
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