1. Fix Ollama 504 Gateway Timeout - add 30s timeout to prevent long hangs
2. Add Ollama to provider error classification for proper fallback handling
3. Show model selector when proceed with build modal opens
These fixes ensure Ollama failures are handled gracefully with proper fallback
to Groq, and users can select their model before starting the build.
This document describes the architecture and functionality of the PluginCompass AI provider management system, including:
- Admin panel structure and authentication
- Provider management with supported providers (OpenRouter, Mistral, Google, Groq, NVIDIA, Chutes, Ollama)
- Rate limiting system with per-provider and per-model limits
- Fallback system architecture with multi-level fallback chains
- Usage tracking and monitoring capabilities
The documentation covers both technical implementation details and operational guidance for managing the provider infrastructure.
- Add pattern matching to detect clarification requests in plan responses
- Hide Proceed with Build button when AI asks questions about missing details
- Button will still show for complete plans that are ready to build
- Changed getUserSession to getAdminSession for all contact message endpoints
- Admin panel now properly authenticates and displays contact messages
- Fixed list, mark-read, and delete operations
- Added Tailwind CSS and matching navigation from home.html
- Implemented glass-morphism navigation with mobile menu
- Added navbar scroll effects and responsive design
- Verified backend contact form functionality exists and works correctly
The scripts were hardcoded to look for OpenSMTPD at a custom workspace
path, but the Dockerfile installs it via apt to /usr/sbin/smtpd. This
change adds fallback logic to check multiple locations:
1. Custom workspace path (for backward compatibility)
2. System path /usr/sbin/smtpd
3. Anywhere in PATH
Also adds graceful handling when OpenSMTPD is not installed, logging
an informative message instead of failing with "No such file or directory".
- Change openrouter/pony-alpha model status from 'alpha' to 'beta' to prevent deletion
- Fix ReferenceError where heartbeat was used before initialization in cleanupStream
- Declare heartbeat and streamTimeout with let before cleanupStream function
- Change const assignments to let assignments for timer variables
- Simplified scrollChatToBottom() with more reliable techniques
- Added scrollIntoView on last message as fallback
- Added additional scroll with direct scrollTop assignment after delay
- Added CSS optimizations for scrolling behavior (-webkit-overflow-scrolling, transform, will-change)
- Added more robust scroll attempts in renderMessages after DOM updates
The scroll-to-bottom functionality wasn't working properly on page load because
messages take time to load and render. This fix adds:
- Enhanced scrollChatToBottom() with image load detection
- ResizeObserver to detect content height changes
- Multiple scroll attempts with increasing delays (up to 2s)
- Additional scroll calls in selectSessionById with proper delays
- Scroll calls at end of initBuilder initialization
This ensures the chat area properly scrolls to the bottom even when content
loads asynchronously or images take time to render.
Add detailed logging to provider initialization to help debug why Chutes
and other providers aren't loading:
- Log all providers found in database
- Log API key env vars detected
- Log custom loader results with autoload status
- Log final loaded providers count
This will help identify if the issue is:
1. Database not loading correctly
2. Missing env vars
3. Custom loaders not being called
4. Providers being filtered out
- Add openrouter/pony-alpha model to models-api.json fixture
- Fix getModel() to lookup models with provider prefix (e.g., openrouter/pony-alpha)
When user specifies openrouter/pony-alpha, the code now correctly looks for
the full model ID including prefix in the provider's models object
This fixes the 'ModelNotFoundError' when using OpenRouter models that have
prefixed IDs in the database.
- Update regex to handle both periods and colons as sentence separators
- Properly separate sentences followed by uppercase letters with double newlines
- Fixes issue where OpenCode response text wasn't properly line-separated
- Detailed error classification system for tool errors, early termination, and provider errors
- Provider-specific error mappings for 11 LLM providers (OpenAI, Anthropic, OpenRouter, Chutes, NVIDIA, Together, Fireworks, Mistral, Groq, Google)
- Continue message system with 3-attempt limit before model switch
- 30-second wait for transient/rate limit errors before switching
- Distinguishes tool errors (return to user) from provider errors (switch model)
- Implementation plan with code examples for server.js and processor.ts
- Capture todowrite tool events and store todos on messages
- Add API endpoint GET /api/sessions/:sessionId/todos
- Clear todos on message finish, undo, and redo
- Create renderStructuredTodos function with status icons
- Integrate todo display into message rendering
- Add CSS styling for todo items by status and priority