- 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
- Changed position from bottom-0 right-0 to top-0 -right-3
- Badge now appears to the right of the Goose dot avatar
- Creates a side-by-side appearance with the user indicator
- Changed from -bottom-1 -right-1 to bottom-0 right-0
- Removed mt-1 class and used inline style for marginTop
- Badge now appears at the exact bottom-right corner of the avatar container
- Display Goose dot avatar as main avatar for all assistant messages
- Add small user badge in bottom-right corner for collaborator messages
- Badge shows user's avatar if available, or initial letter on colored background
- Header shows 'Goose (username)' for collaborator messages
- This clearly indicates the message is from another user's Goose instance
- Check targetRoomId (not sessionId) to determine if in Matrix room context
- sessionId can be a backend session ID even when in a Matrix room
- Use isInMatrixRoomContext based on targetRoomId starting with '!'
- This correctly allows messages from other users in the same Matrix room
- Changed condition from (isMatrixRoom ? true : isSessionMatch) to (isMatrixRoom || isSessionMatch)
- For Matrix rooms, only room IDs need to match (not session IDs)
- Each user has their own backend session ID, so checking session match was incorrectly blocking messages
- This allows messages from other users in the same Matrix room to display properly
- Log full sender details (userId, displayName, avatarUrl) when processing messages
- Log complete message object being sent to onMessageSync
- This will help debug if sender info is properly flowing through to display
- Moved processedMessages.current.add() to AFTER onMessageSync call
- Prevents messages from being marked as processed when they fail to display
- Fixes issue where messages were skipped due to premature deduplication
- Added sentToMatrixRef to track sent messages and prevent duplicates
- Only send messages when chatState is Idle (streaming complete)
- Format messages as goose-session-message: for proper parsing by receivers
- Prevents 429 Too Many Requests errors from sending during streaming
Check message_count from backend session to determine if chat
has existing messages. Only show loading indicator if messages
need to be loaded. New chats (message_count = 0) show empty
state immediately with popular topics.
This prevents showing a loading spinner for brand new Matrix
chats that have no message history to load.
When switching to an existing Matrix tab that's still loading,
ensure the backend session is created and loading state is cleared.
Previously, clicking 'Open Chat' would switch to an existing tab
but leave it in a loading/blank state if the async session creation
hadn't completed yet.
- Fix Goose assistant response spam: suppress role='assistant' notifications
- Fix stale tab state: use fresh shouldSuppressNotification calls
- Remove buggy legacy /pair suppression logic that checked sender ID
- Fix 'Open Chat' to check existing tabs before navigating
- Add Matrix room ID display in SessionListView
- Optimize MatrixSessionService to defer heavy loading until needed
- Add loading state for Matrix chat initialization
- Improve loading indicator visibility in BaseChat2
Fixes notification spam, incorrect suppression, and blank chat states.
- Updated TabbedChatContainer to show pending invites in all tabs (not just Matrix tabs)
- Added getPendingInvitedRooms() method to MatrixService to fetch invites directly from Matrix server
- Exposed getPendingInvitedRooms() in MatrixContext for easy component access
- Updated PendingInvitesInHistory to fetch from Matrix API and merge with local storage
- Matrix server data now takes precedence over local storage for accuracy
Fixes issue where pending collaboration invites weren't showing in regular chat tabs