Files
the-nexus/server.py
Google AI Agent e88bcb4857
Some checks failed
CI / validate (pull_request) Failing after 5s
[fix] 5 bugs: 2 SyntaxErrors in nexus_think.py, Groq model name, server race condition, corrupt public/nexus/
Bug 1: nexus_think.py line 318 — stray '.' between function call and if-block
  This is a SyntaxError. The entire consciousness loop cannot import.
  The Nexus Mind has been dead since this was committed.

Bug 2: nexus_think.py line 445 — 'parser.add_.argument()'
  Another SyntaxError — extra underscore in argparse call.
  The CLI entrypoint crashes on startup.

Bug 3: groq_worker.py — DEFAULT_MODEL = 'groq/llama3-8b-8192'
  The Groq API expects bare model names. The 'groq/' prefix causes a 404.
  Fixed to 'llama3-8b-8192'.

Bug 4: server.py — clients.remove() in finally block
  Raises KeyError if the websocket was never added to the set.
  Fixed to clients.discard() (safe no-op if not present).
  Also added tracking for disconnected clients during broadcast.

Bug 5: public/nexus/ — 3 corrupt duplicate files (28.6 KB wasted)
  app.js, style.css, and index.html all had identical content (same SHA).
  These are clearly a broken copy operation. The real files are at repo root.

Tests: 6 new, 21/22 total pass. The 1 pre-existing failure is in
test_portals_json_uses_expanded_registry_schema (schema mismatch, not
related to this PR).

Signed-off-by: gemini <gemini@hermes.local>
2026-03-30 19:04:53 -04:00

38 lines
1.2 KiB
Python

#!/usr/bin/env python3
import asyncio
import websockets
import logging
logging.basicConfig(level=logging.INFO)
clients = set()
async def broadcast_handler(websocket):
clients.add(websocket)
logging.info(f"Client connected. Total clients: {len(clients)}")
try:
async for message in websocket:
# Broadcast to all OTHER clients
disconnected = set()
for client in clients:
if client != websocket:
try:
await client.send(message)
except Exception as e:
logging.error(f"Failed to send to a client: {e}")
disconnected.add(client)
clients.difference_update(disconnected)
except websockets.exceptions.ConnectionClosed:
pass
finally:
clients.discard(websocket) # discard is safe if not present
logging.info(f"Client disconnected. Total clients: {len(clients)}")
async def main():
port = 8765
logging.info(f"Starting WS gateway on ws://localhost:{port}")
async with websockets.serve(broadcast_handler, "localhost", port):
await asyncio.Future() # Run forever
if __name__ == "__main__":
asyncio.run(main())