From 0bd80118a1ebf71b0176130edcbc98fee88a12bb Mon Sep 17 00:00:00 2001 From: Arpandeep Khatua Date: Sat, 21 Dec 2024 11:58:12 +0400 Subject: [PATCH 1/2] Moving server.js to backend --- .gitignore | 37 +++++++++++++++++++-- backend/package.json | 17 ++++++++++ {frontend => backend/src}/server.js | 46 ++++++++++++++------------ frontend/bun.lockb | Bin 235645 -> 235645 bytes frontend/context/loading-provider.tsx | 2 +- frontend/package.json | 4 +-- package.json | 12 +++++++ 7 files changed, 92 insertions(+), 26 deletions(-) create mode 100644 backend/package.json rename {frontend => backend/src}/server.js (85%) create mode 100644 package.json diff --git a/.gitignore b/.gitignore index 0839842..6173fda 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,10 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies -/node_modules +node_modules/ /.pnp .pnp.js +.yarn/install-state.gz # testing /coverage @@ -41,4 +42,36 @@ yarn-error.log* .vercel #used files -_* \ No newline at end of file +_* +*.pem +*.tsbuildinfo +next-env.d.ts +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +.env +.venv +env/ +venv/ +ENV/ +.python-version +.ruff_cache/ +.mypy_cache/ + +# IDE +.idea/ +.vscode/ +*.swp +*.swo + +# Logs +logs/ +*.log + +# Lock files +package-lock.json +yarn.lock +bun.lockb +uv.lock \ No newline at end of file diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..8c36515 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,17 @@ +{ + "name": "cotomata-backend", + "version": "1.0.0", + "description": "Backend server for Cotomata", + "main": "src/server.js", + "type": "module", + "scripts": { + "start": "bun src/server.js", + "dev": "bun --watch src/server.js" + }, + "dependencies": { + "cors": "^2.8.5", + "express": "^4.18.2", + "redis": "^4.6.12", + "socket.io": "^4.8.1" + } +} \ No newline at end of file diff --git a/frontend/server.js b/backend/src/server.js similarity index 85% rename from frontend/server.js rename to backend/src/server.js index 3d8a79d..3295304 100644 --- a/frontend/server.js +++ b/backend/src/server.js @@ -1,11 +1,6 @@ -import { createServer } from 'http'; import { Server } from 'socket.io'; import { createClient } from 'redis'; -import next from 'next'; - -const dev = process.env.NODE_ENV !== 'production'; -const app = next({ dev }); -const handle = app.getRequestHandler(); +import { createServer } from 'http'; // Redis client configuration const redisClient = createClient({ @@ -15,19 +10,28 @@ const redisClient = createClient({ // Allowed channels for Redis pub/sub const allowedChannels = ['Scene:Jack', 'Scene:Jane', 'Human:Jack', 'Jack:Human', 'Agent:Runtime', 'Runtime:Agent']; -app.prepare().then(async () => { - // Connect Redis client - redisClient.on('error', (err) => { - console.error('Redis error:', err); - }); +// Connect Redis client +redisClient.on('error', (err) => { + console.error('Redis error:', err); +}); + +const init = async () => { await redisClient.connect(); // Create HTTP server - const server = createServer((req, res) => { - handle(req, res); + const httpServer = createServer((req, res) => { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.writeHead(200); + res.end('Socket.IO server running'); + }); + + // Initialize Socket.IO server with CORS + const io = new Server(httpServer, { + cors: { + origin: "http://localhost:3000", + methods: ["GET", "POST"] + } }); - // Initialize Socket.IO server - const io = new Server(server); // Redis subscriber setup const subscriber = redisClient.duplicate(); @@ -107,6 +111,7 @@ app.prepare().then(async () => { // Handle process initialization socket.on('init_process', async () => { + console.log('Received init_process request'); try { const initParams = { node_name: "openhands_node", @@ -149,11 +154,10 @@ app.prepare().then(async () => { }); // Start the server - const port = process.env.PORT || 3000; - server.listen(port, (err) => { - if (err) throw err; - console.log(`> Ready on http://localhost:3000`); + const port = process.env.PORT || 8000; + httpServer.listen(port, () => { + console.log(`> Backend server ready on http://localhost:${port}`); }); -}); +}; -export default app; +init().catch(console.error); \ No newline at end of file diff --git a/frontend/bun.lockb b/frontend/bun.lockb index fcc7f52c00877b19eda57d12021b1a974aa06098..1c26f9cda38875e39ba201e3b9491d6f0b271eeb 100755 GIT binary patch delta 33 ocmeynf$#4IzJ?aYElhzSoQ!dXhI)pkdIs%LAxzt&LYS3Z0Mda9nE(I) delta 33 jcmeynf$#4IzJ?aYElhzSoJj`Sv^^?>S=j{uxn2n9 diff --git a/frontend/context/loading-provider.tsx b/frontend/context/loading-provider.tsx index 362df02..4dded91 100644 --- a/frontend/context/loading-provider.tsx +++ b/frontend/context/loading-provider.tsx @@ -28,7 +28,7 @@ export function LoadingProvider({ children }: { children: React.ReactNode }) { const initialize = async () => { try { console.log('Creating socket instance...'); - socketInstance = io('http://localhost:3000', { + socketInstance = io('http://localhost:8000', { transports: ['websocket'], reconnection: true, autoConnect: true diff --git a/frontend/package.json b/frontend/package.json index f32ba1e..f6101f2 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,9 +3,9 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "bun server.js", + "dev": "next dev", "build": "next build", - "start": "BUN_ENV=production bun server.js", + "start": "next start", "lint": "next lint" }, "dependencies": { diff --git a/package.json b/package.json new file mode 100644 index 0000000..8ff7710 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "name": "cotomata-root", + "version": "1.0.0", + "private": true, + "scripts": { + "dev": "concurrently \"cd backend && bun run dev\" \"cd frontend && bun run dev\"", + "install:all": "cd backend && bun install && cd ../frontend && bun install" + }, + "devDependencies": { + "concurrently": "^8.2.2" + } +} \ No newline at end of file From bf406197f86485318cf0c3ace87bc324dfcd6881 Mon Sep 17 00:00:00 2001 From: Arpandeep Khatua Date: Sat, 21 Dec 2024 12:17:50 +0400 Subject: [PATCH 2/2] Added a refresh button to refresh within a session --- frontend/components/sidebar.tsx | 42 +++++++++++++-------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/frontend/components/sidebar.tsx b/frontend/components/sidebar.tsx index 288a3de..cbec85b 100644 --- a/frontend/components/sidebar.tsx +++ b/frontend/components/sidebar.tsx @@ -15,30 +15,8 @@ // */ import React from 'react'; -import { Cog, FolderOpen } from 'lucide-react'; // Import the file icon - -// Define the props for the Sidebar component -interface SidebarProps { - onSelect: (option: 'fileSystem' | 'sceneContext') => void; // Callback for selecting a panel -} - -// // Main Sidebar component definition -// export const Sidebar: React.FC = ({ onSelect }) => { -// return ( -//
-// {/* Button to select the file system panel */} -// -// {/* Button to select the scene context panel */} -// -// {/* Add more icons as needed */} -//
-// ); -// }; - +import { Cog, FolderOpen, Home, RefreshCcw } from 'lucide-react'; +import Link from 'next/link'; import { Sidebar, @@ -65,11 +43,10 @@ const items = [ }, ] - export function AppSidebar() { return ( - + @@ -86,6 +63,19 @@ export function AppSidebar() { + + {/* Refresh button at the bottom */} +
+ + + + + + + + + +
)