- Fix window title hidden behind minibar when maximized
- Adjust window top position to account for 28px minibar height
- Adjust window height calculation to account for minibar
- Set maximized window z-index to 9998 (below minibar's 9999)
- Remove transparency from chat window
- Change window-header background from rgba to solid white
- Remove backdrop-filter blur effect
- Add explicit opacity rules to prevent transparency
- Hide background content when window is maximized
- Add 'window-maximized' class to body when window is maximized
- Add CSS rules to hide sidebar, desktop icons, and other background elements
- Hide initial suggestion buttons when dynamic suggestions displayed
- Add 'has-suggestions' class to footer when suggestions are rendered
- Add CSS rule to hide .quick-action-chip buttons when footer has 'has-suggestions' class
- Update CSS version parameter to force cache reload
The ui_server proxies WebSocket connections. It was accepting the client's WebSocket connection (ws.onopen triggered on the client), but if it couldn't connect to the backend (or if the backend disconnected), it would drop the client connection right away (ws.onclose triggered).
The issue was that reconnectAttempts was being reset to 0 inside the ws.onopen handler. Because the connection was briefly succeeding before failing, the reconnectAttempts counter was resetting to 0 on every attempt, completely circumventing the exponential backoff mechanism and causing a tight reconnection loop.
Modified the WebSocket logic across all relevant UI components to delay resetting reconnectAttempts = 0. Instead of resetting immediately upon the TCP socket opening, it now safely waits until a valid JSON payload {"type": "connected"} is successfully received from the backend.
- Add connection timeout (5s) to detect silent failures
- Log WebSocket close events with code and reason
- Prevent infinite reconnection loops after max attempts
- Clear connection timeout when WebSocket opens or closes
- Show user-friendly error after max reconnection attempts
This helps diagnose why WebSocket connections are failing
and prevents the infinite reconnection loop issue.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Modified chat auth failure handler to proceed with WebSocket connection
- Generates anonymous user_id and session_id using crypto.randomUUID()
- WebSocket handler already supports anonymous connections (creates UUIDs if not provided)
- Removes error notification and retry loop that prevented chat from working
This allows chat to work publicly without requiring authentication,
which is the expected behavior for public bots.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Reverted chat path from /suite/partials/chat.html to /suite/chat/chat.html (full app)
- Kept tasks path as /suite/tasks/tasks.html (full app, already correct)
- Kept vibe path as /suite/partials/vibe.html (no dedicated vibe directory exists yet)
- All other apps already using correct full app paths
The partials directory should only contain fragments for embedding in other pages,
not standalone apps. Desktop icons must load full apps into windows.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fixed tasks.html: replaced incomplete file with content from partials/tasks.html
- Fixed vibe icon: renamed from "Mantis (Vibe)" to "Vibe" and updated path to /suite/partials/vibe.html
- Fixed chat icon: updated path from /suite/chat/chat.html to /suite/partials/chat.html
- Fixed tasks icon: updated path from /suite/tasks/tasks.html to /suite/partials/tasks.html
- Verified all other app paths (terminal, drive, editor, browser) are correct
All desktop icons now point to the correct app fragment files for the Window Manager.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fixed 404 errors on desktop shell assets by explicitly routing to /suite/ absolute paths
- Replaced missing FontAwesome icons in window-manager.js with inline SVGs since CDNs are banned
- Built custom vanilla JS Window Manager (window-manager.js)
- Replaced default.gbui with new desktop.html featuring Windows 95 spatial metaphor + Tailwind aesthetics
- Redesigned icons, taskbar, sidebar, and workspace to exactly match the target PDF layout
- Migrated Chat, Tasks, and Terminal into pure HTMX fragments to load seamlessly inside floating panels
- Added missing CSS rules to handle window rendering without CDNs
Fixed issue where clicking a tool button sent the internal ID (e.g., "03-missa")
instead of the display text (e.g., "⛪ Agendar Missa") to the chat.
The bug was in chat.html where invoke_tool actions were sending action.tool
(the internal ID) instead of sugg.text (the user-friendly display text).
Now tool buttons work correctly on the first click without sending internal IDs.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This fixes the issue where theme changes required a page refresh to apply
to the chat client area. The body element's data-theme attribute was
applying base.css theme rules that overrode the inline styles set by the
theme manager.
Changes:
- Add data-theme="sentient" to html element in base.html
- Remove body's data-theme attribute when loading themes in theme-manager.js
- This prevents base.css [data-theme="*"] selectors from overriding inline styles
Now both header and body background update immediately when switching themes.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Hide omnibox search bar when user is not logged in
- Hide Drive, Tasks, CRM, and Calendar navigation items when logged out
- Update theme manager to use correct CSS path (/suite/public/themes/)
- Improve theme switching to update all color variables including --color1/--color2
- Fix bot config color override logic to respect user's theme selection
- Add disconnect notification flag to prevent duplicate notifications
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Update JS asset version from 20260207 to 20260215 to force
browser cache reload after theme/logo fixes.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Fix theme CSS path from /public/themes/ to /suite/public/themes/
- When user selects theme, update chat color variables to match
- Only apply bot config colors if user hasn't selected custom theme
- Add bot logo support to login page
- Add CSS styling for login logo image
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Increment CACHE_VERSION from v1 to v2
- Forces all users to fetch fresh translations from API
- Fixes issue where old cache with placeholders was overriding correct HTML
- Browser cache had stale translations from before i18n embed fix
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add CACHE_VERSION constant (v1)
- Include version in cache key to auto-invalidate old caches
- Update clearCache to handle versioned keys
- Add comment explaining when to increment version
- Remove chat header (logo and title) from chat window since logo
will be displayed in top bar from config.csv
- Update CSS to use --chat-color1 and --chat-color2 for all themed elements
- Remove hardcoded theme overrides that interfered with config colors
- Fix text contrast: bot messages now use color2 background with black text
- Update suggestion buttons to use theme colors from config.csv
- Clean up JavaScript to remove references to deleted header elements
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>