feat: add forgejo_error_reporter plugin for automatic error reporting to Forgejo issues

This commit is contained in:
Agent Zero
2026-07-26 12:49:39 +02:00
parent b9d05e2198
commit c3e41906bf
16 changed files with 608 additions and 14 deletions
+6 -1
View File
@@ -364,9 +364,14 @@ export function useAIUIControl() {
}
};
ws.onclose = () => {
ws.onclose = (event) => {
setConnected(false);
console.log('AI UI Control WebSocket disconnected');
// Don't reconnect on 403 (forbidden) — user lacks permission
if (event.code === 3003 || event.code === 1008) {
console.warn('AI UI Control WebSocket closed with forbidden code — not reconnecting');
return;
}
const delay = Math.min(1000 * Math.pow(2, reconnectAttempts), maxReconnectDelay);
reconnectAttempts++;
reconnectTimeout.current = window.setTimeout(connect, delay);
+6 -1
View File
@@ -98,8 +98,13 @@ export function useCommWebSocket() {
}
};
ws.onclose = () => {
ws.onclose = (event) => {
console.log('Comm WebSocket disconnected');
// Don't reconnect on 403 (forbidden) — user lacks permission
if (event.code === 3003 || event.code === 1008) {
console.warn('Comm WebSocket closed with forbidden code — not reconnecting');
return;
}
const delay = Math.min(1000 * Math.pow(2, reconnectAttempts), maxReconnectDelay);
reconnectAttempts++;
reconnectTimeout.current = window.setTimeout(connect, delay);
+18
View File
@@ -0,0 +1,18 @@
import { useState, useEffect } from 'react';
export function useOnlineStatus() {
const [isOnline, setIsOnline] = useState(navigator.onLine);
useEffect(() => {
const goOnline = () => setIsOnline(true);
const goOffline = () => setIsOnline(false);
window.addEventListener('online', goOnline);
window.addEventListener('offline', goOffline);
return () => {
window.removeEventListener('online', goOnline);
window.removeEventListener('offline', goOffline);
};
}, []);
return isOnline;
}