feat: AI auto-fix bug tracker with real-time error monitoring

- Real-time error monitoring system with WebSocket
- Auto-fix agent that triggers on browser errors
- Bug tracker dashboard with floating button (🐛)
- Live activity stream showing AI thought process
- Fixed 4 JavaScript errors (SyntaxError, TypeError)
- Fixed SessionPicker API endpoint error
- Enhanced chat input with Monaco editor
- Session picker component for project management

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
uroma
2026-01-21 10:53:11 +00:00
Unverified
parent b765c537fc
commit efb3ecfb19
23 changed files with 7254 additions and 119 deletions

View File

@@ -30,22 +30,41 @@ document.addEventListener('DOMContentLoaded', () => {
function setupEventListeners() {
// Login form
loginForm.addEventListener('submit', handleLogin);
const loginForm = document.getElementById('login-form');
if (loginForm) {
loginForm.addEventListener('submit', handleLogin);
}
// Logout
logoutBtn.addEventListener('click', handleLogout);
const logoutBtn = document.getElementById('logout-btn');
if (logoutBtn) {
logoutBtn.addEventListener('click', handleLogout);
}
// Search
let searchTimeout;
searchInput.addEventListener('input', (e) => {
clearTimeout(searchTimeout);
searchTimeout = setTimeout(() => handleSearch(e.target.value), 300);
});
const searchInput = document.getElementById('search-input');
if (searchInput) {
let searchTimeout;
searchInput.addEventListener('input', (e) => {
clearTimeout(searchTimeout);
searchTimeout = setTimeout(() => handleSearch(e.target.value), 300);
});
}
// Edit/Save/Cancel buttons
editBtn.addEventListener('click', startEditing);
saveBtn.addEventListener('click', saveFile);
cancelBtn.addEventListener('click', stopEditing);
const editBtn = document.getElementById('edit-btn');
const saveBtn = document.getElementById('save-btn');
const cancelBtn = document.getElementById('cancel-btn');
if (editBtn) {
editBtn.addEventListener('click', startEditing);
}
if (saveBtn) {
saveBtn.addEventListener('click', saveFile);
}
if (cancelBtn) {
cancelBtn.addEventListener('click', stopEditing);
}
}
// Auth functions