Releases: itk-dev/mcp-claude-code-browser-feedback
Releases · itk-dev/mcp-claude-code-browser-feedback
v0.6.6
Fixed
- Fix browser extension losing connection and feedback after MCP reconnect (
/mcp) — session IDs are now derived deterministically from the project directory, so reconnecting preserves WebSocket connections and pending feedback (#43) - Add process ID guard on session unregistration to prevent race conditions when old and new MCP processes overlap
- Add feedback migration when a new session registers with the same project directory as an existing session
- Browser extension now validates cached session IDs on page navigation and auto-refreshes stale sessions
v0.6.5
v0.6.4
v0.6.3
v0.6.2
v0.6.1
v0.6.0
Added
- Session isolation for multi-project support — each Claude Code session gets a unique session ID, preventing feedback from one project appearing in another project's widget
- New
/sessionsHTTP endpoint listing all active sessions with project metadata - Session registry with
/register-sessionand/unregister-sessionendpoints for proxy instances - Browser extension auto-matches tabs to sessions based on detected project URL; shows a session picker when multiple sessions are ambiguous
- Session ID included in widget URL, WebSocket connections, and all feedback messages for full isolation
- Test infrastructure with Vitest — unit tests for utils and integration tests for HTTP endpoints
- GitHub Actions CI workflow running tests on Node 22 LTS
- WebSocket session routing tests verifying correct session bucket assignment and duplicate-tab warnings
- Duplicate-tab warning — widget notifies when connecting to a session that already has clients
- Extension popup shows active session name with a "Change" button to switch sessions
- Extension popup only shows connection details when widget is enabled — clean two-state UX
- Extension badge shows "OFF" in gray when widget is inactive
Changed
- Removed unused
sessionIdfields from widget WebSocket messages (session is derived from the WebSocket connection URL) - Extracted
parseJsonBody()helper to reduce code duplication in HTTP POST endpoints - Added UUID format validation on
/register-sessionand/unregister-sessionendpoints - Extracted
isValidSessionId,getPendingSummary,detectProjectUrl, andformatFeedbackAsContentintosrc/utils.jsfor testability
Fixed
- WebSocket connections without a
?session=param no longer silently land in a'default'bucket — they are placed in'unmatched'with a warning, preventing phantom "no clients connected" errors get_connection_statusin proxy mode now returns session-scoped client count instead of misleading global total- Extension popup now shows session-scoped client count instead of global count across all sessions
- Extension popup shows just "Connected" when no session is active (no misleading client counts)
- Duplicate-tab warning moved from widget toast to inline text in extension popup
- Demo page no longer embeds widget script — use the browser extension to inject the widget for testing
- Stale MCP processes no longer block port binding — on EADDRINUSE, the server now health-checks the existing process and retries up to 3 times before falling back to proxy mode
v0.5.0
Added
- Blue highlight indicator on selected element while feedback panel is open, so users can see which element they picked
Fixed
- Keyboard events (arrow keys, typing, etc.) no longer leak to the host page when the feedback panel, annotation mode, or queue panel is active
- Shift+C keyboard shortcut no longer fires while typing in the feedback textarea (Shadow DOM focus detection)
- html2canvas loading in browser extension context - uses fetch instead of script injection to avoid CSP restrictions
- CSS isolation wrapper (
.cf-root) inside Shadow DOM - usesall: initialto fully break CSS inheritance from host page, preventing dark-themed sites from affecting widget appearance - Shadow DOM isolation for widget - host page CSS no longer leaks into the widget UI
- Tooltip selector truncation - long CSS selectors in hover tooltip are now truncated to 2 levels
- Improved tooltip positioning - tooltip moves below element when it would go above the viewport
- Full DOM path selector (
fullSelector) included in feedback element metadata for AI agents - Offline annotation support - widget now works without a server connection, storing feedback locally
- Export to Markdown and GitHub Issue from the queue panel
- Claude Code plugin wrapper for direct installation via
claude plugin add - Browser extension (Chrome MV3 + Firefox MV3) for widget injection without modifying project files
setup_extensionMCP tool to help install the browser extensiondestroy()method on widget for clean teardown
Full Changelog: v0.4.4...v0.5.0
v0.4.3
What's Changed
Improvements
- Smarter widget visibility check: When installing the widget, now uses the detected project URL's hostname for an exact match check instead of always using regex-based pattern matching
- If URL is detected (e.g.,
APP_URLfrom.env): uses simple exact match likeh === 'app.local.itkdev.dk' - If no URL detected: falls back to regex pattern matching with
allowed_hostnames - Provides simpler, more precise hostname checks with less overhead
- If URL is detected (e.g.,
Fixes
- Updated button description in install messages from "🎯 Report Issue" to "Add annotation" to match the actual button text
Full Changelog: v0.4.2...v0.4.3
v0.4.2
Bug Fixes
- Fixed wildcard pattern matching for multi-segment hostnames (#12)
- The wildcard
*in hostname patterns now correctly matches any characters including dots - Previously
*.local.*wouldn't match hostnames likedeltag.local.itkdev.dk - Patterns like
*.local.*now properly match any domain with.local.in it
- The wildcard