nothumanallowed 6.4.3 → 6.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -2
- package/src/commands/ui.mjs +10 -35
- package/src/constants.mjs +1 -1
- package/src/services/web-ui.mjs +9 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nothumanallowed",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.5.0",
|
|
4
4
|
"description": "NotHumanAllowed — 38 AI agents for security, code, DevOps, data & daily ops. Per-agent memory, Telegram + Discord auto-responder, proactive intelligence daemon, voice chat, plugin system.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -46,5 +46,8 @@
|
|
|
46
46
|
"type": "git",
|
|
47
47
|
"url": "https://github.com/adoslabsproject-gif/nothumanallowed"
|
|
48
48
|
},
|
|
49
|
-
"homepage": "https://nothumanallowed.com"
|
|
49
|
+
"homepage": "https://nothumanallowed.com",
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"ws": "^8.18.0"
|
|
52
|
+
}
|
|
50
53
|
}
|
package/src/commands/ui.mjs
CHANGED
|
@@ -490,11 +490,6 @@ export async function cmdUI(args) {
|
|
|
490
490
|
// ── Route Handlers ──────────────────────────────────────────────────────
|
|
491
491
|
|
|
492
492
|
async function handleRequest(req, res) {
|
|
493
|
-
// Skip WebSocket upgrade requests — handled by server.on('upgrade')
|
|
494
|
-
if (req.headers.upgrade && req.headers.upgrade.toLowerCase() === 'websocket') {
|
|
495
|
-
return; // Don't respond — let the upgrade event handle it
|
|
496
|
-
}
|
|
497
|
-
|
|
498
493
|
const start = Date.now();
|
|
499
494
|
const url = new URL(req.url, `http://${HOST}:${port}`);
|
|
500
495
|
const pathname = url.pathname;
|
|
@@ -892,37 +887,17 @@ export async function cmdUI(args) {
|
|
|
892
887
|
|
|
893
888
|
const server = http.createServer(handleRequest);
|
|
894
889
|
|
|
895
|
-
// ── WebSocket
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
const acceptKey = crypto
|
|
903
|
-
.createHash('sha1')
|
|
904
|
-
.update(key + '258EAFA5-E914-47DA-95CA-5AB5DC86C11B')
|
|
905
|
-
.digest('base64');
|
|
906
|
-
|
|
907
|
-
socket.write(
|
|
908
|
-
'HTTP/1.1 101 Switching Protocols\r\n' +
|
|
909
|
-
'Upgrade: websocket\r\n' +
|
|
910
|
-
'Connection: Upgrade\r\n' +
|
|
911
|
-
`Sec-WebSocket-Accept: ${acceptKey}\r\n` +
|
|
912
|
-
'\r\n'
|
|
913
|
-
);
|
|
914
|
-
|
|
915
|
-
wsClients.add(socket);
|
|
916
|
-
|
|
917
|
-
socket.on('data', (buf) => {
|
|
918
|
-
if (buf.length < 2) return;
|
|
919
|
-
const opcode = buf[0] & 0x0f;
|
|
920
|
-
if (opcode === 0x08) { wsClients.delete(socket); socket.end(); }
|
|
921
|
-
if (opcode === 0x09) { socket.write(Buffer.from([0x8a, 0])); }
|
|
890
|
+
// ── WebSocket via ws package (compatible with Node.js 20-24+) ──────
|
|
891
|
+
let wss = null;
|
|
892
|
+
try {
|
|
893
|
+
const { WebSocketServer } = await import('ws');
|
|
894
|
+
wss = new WebSocketServer({ server });
|
|
895
|
+
wss.on('connection', (ws) => {
|
|
896
|
+
ws.on('error', () => {});
|
|
922
897
|
});
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
}
|
|
898
|
+
} catch {
|
|
899
|
+
// ws package not available — WS disabled, everything else works
|
|
900
|
+
}
|
|
926
901
|
|
|
927
902
|
server.on('error', (err) => {
|
|
928
903
|
if (err.code === 'EADDRINUSE') {
|
package/src/constants.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { fileURLToPath } from 'url';
|
|
|
5
5
|
const __filename = fileURLToPath(import.meta.url);
|
|
6
6
|
const __dirname = path.dirname(__filename);
|
|
7
7
|
|
|
8
|
-
export const VERSION = '6.
|
|
8
|
+
export const VERSION = '6.5.0';
|
|
9
9
|
export const BASE_URL = 'https://nothumanallowed.com/cli';
|
|
10
10
|
export const API_BASE = 'https://nothumanallowed.com/api/v1';
|
|
11
11
|
|
package/src/services/web-ui.mjs
CHANGED
|
@@ -878,14 +878,18 @@ function showToast(type, title, body, durationMs) {
|
|
|
878
878
|
// ---- WEBSOCKET (connect to daemon for real-time events) ----
|
|
879
879
|
var ws = null;
|
|
880
880
|
var wsReconnectTimer = null;
|
|
881
|
+
var wsRetryCount = 0;
|
|
882
|
+
var wsMaxRetries = 3;
|
|
881
883
|
function connectWebSocket() {
|
|
884
|
+
if (wsRetryCount >= wsMaxRetries) return; // Stop trying after 3 failures
|
|
882
885
|
try {
|
|
883
886
|
ws = new WebSocket('ws://' + window.location.host);
|
|
884
887
|
} catch(e) { return; }
|
|
885
888
|
|
|
886
889
|
ws.onopen = function() {
|
|
890
|
+
wsRetryCount = 0;
|
|
887
891
|
var indicator = document.getElementById('wsIndicator');
|
|
888
|
-
if (indicator) indicator.style.color = 'var(--green)';
|
|
892
|
+
if (indicator) { indicator.style.color = 'var(--green)'; indicator.title = 'Live updates: connected'; }
|
|
889
893
|
};
|
|
890
894
|
|
|
891
895
|
ws.onmessage = function(event) {
|
|
@@ -897,14 +901,14 @@ function connectWebSocket() {
|
|
|
897
901
|
|
|
898
902
|
ws.onclose = function() {
|
|
899
903
|
var indicator = document.getElementById('wsIndicator');
|
|
900
|
-
if (indicator) indicator.style.color = 'var(--dim)';
|
|
904
|
+
if (indicator) { indicator.style.color = 'var(--dim)'; indicator.title = 'Live updates: disconnected'; }
|
|
901
905
|
ws = null;
|
|
902
|
-
|
|
903
|
-
if (!wsReconnectTimer) {
|
|
906
|
+
wsRetryCount++;
|
|
907
|
+
if (wsRetryCount < wsMaxRetries && !wsReconnectTimer) {
|
|
904
908
|
wsReconnectTimer = setTimeout(function() {
|
|
905
909
|
wsReconnectTimer = null;
|
|
906
910
|
connectWebSocket();
|
|
907
|
-
},
|
|
911
|
+
}, 30000); // 30s between retries
|
|
908
912
|
}
|
|
909
913
|
};
|
|
910
914
|
|