- Replace hasExplicitMatrixRoomId check with room ownership validation
- Only the tab that owns a Matrix room (registered in globalMatrixListenerRegistry) processes messages
- Each Matrix room can only have one designated owner tab at a time
- Prevents Matrix messages from leaking to other Matrix tabs for different rooms
- Maintains proper message isolation between Matrix tabs
- Keep localStorage for tab persistence across app restarts
- Generate unique session IDs for each restored tab to prevent conflicts
- Each tab gets temp_restored_[timestamp]_[random] session ID on restore
- Backend sessions are created properly for each tab
- Maintains tab state (titles, types, Matrix properties) while ensuring isolation
- Disable localStorage restoration to prevent session ID conflicts
- Always start with fresh tabs and unique session IDs
- Clear localStorage on app start to ensure clean state
- Each tab now gets a truly unique backend session ID
- Fixes messages appearing in wrong tabs due to shared sessions
- Enhanced getRoomHistory method with comprehensive logging
- Added detailed message type detection debugging
- Log current user ID, message processing steps, and final categorization
- Added message type breakdown summary for troubleshooting
- This will help identify why user messages aren't appearing after reload
- Ensure user messages from self are properly categorized as 'user' type
- Only categorize messages as 'assistant' if they have explicit Goose markers or are from other users
- This fixes the issue where user's own messages weren't appearing in conversation history
- Improved message type detection logic to be more precise and reliable
- Updated createSpace method to automatically create session mappings
- Updated createRoom method to automatically create session mappings
- Both Matrix Spaces and regular rooms now have guaranteed 1:1 relationship with Goose sessions
- Session mappings ensure Matrix room history and Goose session history stay synchronized
- This enables proper session loading when navigating to Matrix rooms/spaces
- Update MatrixService to support Matrix Spaces with isSpace, roomType, and isPublic properties
- Add SpaceChild interface for representing space hierarchy
- Implement space navigation with drill-down into sub-spaces and back navigation
- Add contextual room/space creation (create spaces at top level, rooms within spaces)
- Update ChannelsView to show only Matrix Spaces instead of all non-DM rooms
- Add breadcrumb navigation and space content display
- Include empty tiles for creating new rooms within spaces
- Add extension loading to AgentManager::get_or_create_agent() to ensure extensions are loaded from config when creating new agents
- Fixes issue where extensions weren't coming online in alpha (showing 0 enabled)
- Add detailed logging for extension loading success/failure
- Various UI improvements to sidecar and chat components
- Add pr-16 (64px) right padding to messages in condensed mode
- Position badge at right-2 instead of right-0 -mr-12
- Badge stays within message bounds, visible in gutter
- Prevents text from extending into comment gutter area
- Maintains consistent spacing with/without sidecars
- Badge appears with fade-in and zoom-in (200ms)
- Badge scales up on hover (105%) and down on click (95%)
- Drawer slides in from top with fade (200ms)
- Comment input wrapper animates in smoothly
- Active:scale-95 provides tactile click feedback
- All transitions use duration-200 for consistency
- Creates polished, responsive feel
- Show yellow highlight overlay on selected text during comment creation
- Uses same yellow highlight style as existing comments
- Slightly more opaque (40% vs 30%) to indicate active selection
- Highlight persists while comment input is open
- Provides visual feedback of what text is being commented on
- Matches existing comment highlight appearance
- Track which badge was clicked (existing vs new)
- Existing badge shows full drawer with all comments
- New 'Add comment' badge shows only comment input
- No existing comments shown when adding new comment
- Cleaner UX for creating new comment threads
- Existing comments badge stays at first comment position
- New selection shows separate 'Add comment' badge at selection position
- Both badges can be visible simultaneously
- Prevents existing badge from jumping when making new selection
- New badge hidden when drawer is expanded
- Comment out the floating blue comment button
- Selection still triggers badge appearance via onSelectionChange
- Cleaner UI - badge is the only comment trigger
- Removes duplicate comment creation UI
- Change text-text-prominent to text-text-subtle for icon
- Change text-text-prominent to text-text-subtle for count and 'Add comment' text
- More subtle, less prominent appearance in UI
- Maintains text-text-muted for resolved indicators
- Add whitespace-nowrap to prevent text wrapping
- Add flex-shrink-0 to icon to prevent squishing
- Ensures 'Add comment' text stays on one line
- Badge maintains compact appearance
- Badge shows 'Add comment' when totalComments is 0
- Shows count when comments exist
- Clearer call-to-action for new comment threads
- Maintains icon + text layout consistency
- Show one badge per message instead of one per comment thread
- Badge displays total count of all comments on the message
- Positioned at first comment's highlight location
- Drawer shows all comments when expanded
- Cleaner UI when message has multiple comment threads
- Badge count includes all top-level comments and replies
- Badges now positioned absolutely at highlight Y position
- Appear in right gutter (right-0 -mr-12) in condensed mode
- Each badge positioned by its comment's highlight location
- Drawer expands from badge position, not bottom of message
- Maintains visual connection between highlight and comment
- Same positioning logic as full mode, just in gutter instead of margin
- Drawer now absolutely positioned (doesn't push messages down)
- Positioned top-full right-0 from badge
- Added shadow-xl for better visual separation
- High z-index (z-50) to overlay other content
- No vertical layout shift when expanding/collapsing
- Messages stay in their original positions
- Badge now positioned on right side of message
- Drawer expands below badge (not inline with it)
- Fixed width container (384px) aligned right
- Remove absolute positioning from badge
- Better visual hierarchy and alignment
- Add CommentPanel component that slides in from right like mini-sidecar
- Add CommentPanelContext for global panel state management
- Add CommentPanelLayout wrapper to shift chat content left when panel opens
- Update MessageComments to use panel instead of modal
- Smooth 300ms transitions for panel and content shift
- Uses app design tokens for consistent styling
- Better UX - no backdrop overlay, content stays visible
- Wait for existing session mappings instead of creating duplicate recipe sessions
- Clear empty cache entries to force reload from backend
- Skip backend loading for temp_ sessions (like new_ sessions)
- Auto-reload after 15 seconds if history doesn't load (increments reloadCount to force remount)
- Expose useChatStream cache globally for debugging and cache clearing
- Add detailed logging throughout the flow for debugging
This fixes the issue where clicking 'Open Chat' on a Matrix notification would show a blank chat that required manual reload (Cmd+Shift+R) to see the conversation history.
- Add 24px invisible tap target above tabs for easier clicking
- Increase close button size and padding for better usability
- Set close button z-index to 100 to prevent draggable area conflicts
- Remove tab separator lines to accommodate extended tap target
- Increase bottom accent bar from 2px to 3px for better visibility
- Changed from right: -20px to right: 20px
- Badge now appears inside the avatar container, to the left
- Creates an overlapping effect with the Goose dot
- Changed from -right-3 (-12px) to right: -20px
- This adds 8px more distance from the Goose dot avatar
- Creates more visual separation between the two avatars