vortix 1.2.1 → 1.2.2

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/README.md CHANGED
@@ -141,7 +141,15 @@ Execute the same command across multiple connected devices simultaneously.
141
141
  - Report issues on [GitHub](https://github.com/Vaibhav262610/vortix/issues)
142
142
  - Contact support: vaibhavrajpoot2626@gmail.com
143
143
 
144
- ## What's New in v1.2.1
144
+ ## What's New in v1.2.2
145
+
146
+ - **Streamlined Dashboard** - Removed screen sharing and auto-start features for
147
+ cleaner UI
148
+ - **Focus on Core Features** - Simplified interface focused on command execution
149
+ and monitoring
150
+ - **Updated Components** - Latest agent and backend files included
151
+
152
+ ### Previous Updates (v1.2.1)
145
153
 
146
154
  - **Improved Documentation** - More professional README with better formatting
147
155
  - **Enhanced Readability** - Cleaner structure and natural tone
@@ -9,9 +9,174 @@
9
9
  "version": "1.0.0",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
+ "screenshot-desktop": "^1.15.0",
12
13
  "ws": "^8.19.0"
13
14
  }
14
15
  },
16
+ "node_modules/balanced-match": {
17
+ "version": "1.0.2",
18
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
19
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
20
+ "license": "MIT"
21
+ },
22
+ "node_modules/brace-expansion": {
23
+ "version": "1.1.12",
24
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
25
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
26
+ "license": "MIT",
27
+ "dependencies": {
28
+ "balanced-match": "^1.0.0",
29
+ "concat-map": "0.0.1"
30
+ }
31
+ },
32
+ "node_modules/concat-map": {
33
+ "version": "0.0.1",
34
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
35
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
36
+ "license": "MIT"
37
+ },
38
+ "node_modules/fs.realpath": {
39
+ "version": "1.0.0",
40
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
41
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
42
+ "license": "ISC"
43
+ },
44
+ "node_modules/glob": {
45
+ "version": "7.2.3",
46
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
47
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
48
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
49
+ "license": "ISC",
50
+ "dependencies": {
51
+ "fs.realpath": "^1.0.0",
52
+ "inflight": "^1.0.4",
53
+ "inherits": "2",
54
+ "minimatch": "^3.1.1",
55
+ "once": "^1.3.0",
56
+ "path-is-absolute": "^1.0.0"
57
+ },
58
+ "engines": {
59
+ "node": "*"
60
+ },
61
+ "funding": {
62
+ "url": "https://github.com/sponsors/isaacs"
63
+ }
64
+ },
65
+ "node_modules/inflight": {
66
+ "version": "1.0.6",
67
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
68
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
69
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
70
+ "license": "ISC",
71
+ "dependencies": {
72
+ "once": "^1.3.0",
73
+ "wrappy": "1"
74
+ }
75
+ },
76
+ "node_modules/inherits": {
77
+ "version": "2.0.4",
78
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
79
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
80
+ "license": "ISC"
81
+ },
82
+ "node_modules/minimatch": {
83
+ "version": "3.1.3",
84
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.3.tgz",
85
+ "integrity": "sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==",
86
+ "license": "ISC",
87
+ "dependencies": {
88
+ "brace-expansion": "^1.1.7"
89
+ },
90
+ "engines": {
91
+ "node": "*"
92
+ }
93
+ },
94
+ "node_modules/minimist": {
95
+ "version": "1.2.8",
96
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
97
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
98
+ "license": "MIT",
99
+ "funding": {
100
+ "url": "https://github.com/sponsors/ljharb"
101
+ }
102
+ },
103
+ "node_modules/mkdirp": {
104
+ "version": "0.5.6",
105
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
106
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
107
+ "license": "MIT",
108
+ "dependencies": {
109
+ "minimist": "^1.2.6"
110
+ },
111
+ "bin": {
112
+ "mkdirp": "bin/cmd.js"
113
+ }
114
+ },
115
+ "node_modules/once": {
116
+ "version": "1.4.0",
117
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
118
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
119
+ "license": "ISC",
120
+ "dependencies": {
121
+ "wrappy": "1"
122
+ }
123
+ },
124
+ "node_modules/path-is-absolute": {
125
+ "version": "1.0.1",
126
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
127
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
128
+ "license": "MIT",
129
+ "engines": {
130
+ "node": ">=0.10.0"
131
+ }
132
+ },
133
+ "node_modules/rimraf": {
134
+ "version": "2.6.3",
135
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
136
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
137
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
138
+ "license": "ISC",
139
+ "dependencies": {
140
+ "glob": "^7.1.3"
141
+ },
142
+ "bin": {
143
+ "rimraf": "bin.js"
144
+ }
145
+ },
146
+ "node_modules/screenshot-desktop": {
147
+ "version": "1.15.3",
148
+ "resolved": "https://registry.npmjs.org/screenshot-desktop/-/screenshot-desktop-1.15.3.tgz",
149
+ "integrity": "sha512-bHztitCmaa+A+ssxRa3LDNepQzCHEEAkz1FaJjoZx2yDMkHIkHLKKcc5xMgkGNas97wSGboSB2BoO0c4RnjlJw==",
150
+ "funding": [
151
+ {
152
+ "type": "github",
153
+ "url": "https://github.com/sponsors/bencevans"
154
+ }
155
+ ],
156
+ "license": "MIT",
157
+ "dependencies": {
158
+ "temp": "^0.9.4"
159
+ }
160
+ },
161
+ "node_modules/temp": {
162
+ "version": "0.9.4",
163
+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz",
164
+ "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==",
165
+ "license": "MIT",
166
+ "dependencies": {
167
+ "mkdirp": "^0.5.1",
168
+ "rimraf": "~2.6.2"
169
+ },
170
+ "engines": {
171
+ "node": ">=6.0.0"
172
+ }
173
+ },
174
+ "node_modules/wrappy": {
175
+ "version": "1.0.2",
176
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
177
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
178
+ "license": "ISC"
179
+ },
15
180
  "node_modules/ws": {
16
181
  "version": "8.19.0",
17
182
  "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
@@ -0,0 +1,3 @@
1
+ @echo off
2
+ set BACKEND_URL=ws://localhost:8080
3
+ node agent.js start
@@ -0,0 +1,3 @@
1
+ @echo off
2
+ set BACKEND_URL=ws://localhost:8080
3
+ node agent.js start
@@ -0,0 +1,19 @@
1
+ // Test script to verify screenshot-desktop works
2
+ const screenshot = require('screenshot-desktop');
3
+
4
+ console.log('Testing screenshot capture...');
5
+
6
+ screenshot({ format: 'jpg' })
7
+ .then((img) => {
8
+ console.log('✅ Screenshot captured successfully!');
9
+ console.log(` Size: ${img.length} bytes`);
10
+ console.log(` Base64 length: ${img.toString('base64').length} characters`);
11
+ console.log('\nScreen sharing should work! 🎉');
12
+ })
13
+ .catch((err) => {
14
+ console.error('❌ Screenshot failed:', err.message);
15
+ console.error('\nTroubleshooting:');
16
+ console.error('- Windows: Make sure you have permissions');
17
+ console.error('- macOS: Grant Screen Recording permission in System Preferences');
18
+ console.error('- Linux: Install scrot or imagemagick');
19
+ });
@@ -0,0 +1,261 @@
1
+ # Backend Deployment Guide
2
+
3
+ ## ✅ Pre-Deployment Checklist
4
+
5
+ - [x] Fixed package.json main file (server.js)
6
+ - [x] Fixed PORT configuration
7
+ - [x] Removed unused dependencies (openai, uuid)
8
+ - [x] Cleaned up imports
9
+ - [x] No diagnostic errors
10
+
11
+ ## 🚀 Deploy to Railway (Recommended)
12
+
13
+ ### Step 1: Install Railway CLI
14
+
15
+ ```bash
16
+ npm install -g @railway/cli
17
+ ```
18
+
19
+ ### Step 2: Login
20
+
21
+ ```bash
22
+ railway login
23
+ ```
24
+
25
+ ### Step 3: Initialize and Deploy
26
+
27
+ ```bash
28
+ cd backend
29
+ railway init
30
+ railway up
31
+ ```
32
+
33
+ ### Step 4: Get Your URL
34
+
35
+ ```bash
36
+ railway domain
37
+ ```
38
+
39
+ Example output: `vortix-backend.railway.app`
40
+
41
+ ### Step 5: Test Connection
42
+
43
+ ```bash
44
+ # Install wscat
45
+ npm install -g wscat
46
+
47
+ # Test connection
48
+ wscat -c wss://vortix-backend.railway.app?token=test
49
+ ```
50
+
51
+ ## 🔧 Alternative: Deploy to Render
52
+
53
+ ### Step 1: Go to Render.com
54
+
55
+ https://render.com
56
+
57
+ ### Step 2: Create Web Service
58
+
59
+ - Click "New +" → "Web Service"
60
+ - Connect your GitHub repository
61
+
62
+ ### Step 3: Configure
63
+
64
+ - **Name**: vortix-backend
65
+ - **Root Directory**: `backend`
66
+ - **Environment**: Node
67
+ - **Build Command**: `npm install`
68
+ - **Start Command**: `npm start`
69
+
70
+ ### Step 4: Deploy
71
+
72
+ Click "Create Web Service"
73
+
74
+ ### Step 5: Get URL
75
+
76
+ Your service will be at: `https://vortix-backend.onrender.com`
77
+
78
+ ## 🔧 Alternative: Deploy to Heroku
79
+
80
+ ### Step 1: Install Heroku CLI
81
+
82
+ https://devcenter.heroku.com/articles/heroku-cli
83
+
84
+ ### Step 2: Login
85
+
86
+ ```bash
87
+ heroku login
88
+ ```
89
+
90
+ ### Step 3: Create App
91
+
92
+ ```bash
93
+ cd backend
94
+ heroku create vortix-backend
95
+ ```
96
+
97
+ ### Step 4: Deploy
98
+
99
+ ```bash
100
+ git push heroku main
101
+ ```
102
+
103
+ ### Step 5: Get URL
104
+
105
+ ```bash
106
+ heroku open
107
+ ```
108
+
109
+ ## 📝 Post-Deployment
110
+
111
+ ### 1. Save Your Backend URL
112
+
113
+ ```
114
+ Backend URL: wss://your-backend-url.railway.app
115
+ ```
116
+
117
+ ### 2. Update Agent
118
+
119
+ Edit `agent/agent.js` (line ~30):
120
+
121
+ ```javascript
122
+ const ws = new WebSocket(`wss://your-backend-url.railway.app?token=${token}`);
123
+ ```
124
+
125
+ ### 3. Update Dashboard
126
+
127
+ Create `dashboard/.env.local`:
128
+
129
+ ```
130
+ NEXT_PUBLIC_BACKEND_WS=wss://your-backend-url.railway.app
131
+ ```
132
+
133
+ ### 4. Test Everything
134
+
135
+ ```bash
136
+ # Test WebSocket connection
137
+ wscat -c wss://your-backend-url.railway.app?token=test
138
+
139
+ # Should connect without errors
140
+ ```
141
+
142
+ ## 🔍 Monitoring
143
+
144
+ ### Railway
145
+
146
+ ```bash
147
+ # View logs
148
+ railway logs --tail
149
+
150
+ # Check status
151
+ railway status
152
+
153
+ # View variables
154
+ railway variables
155
+ ```
156
+
157
+ ### Render
158
+
159
+ - Check logs in Render dashboard
160
+ - Monitor at: https://dashboard.render.com
161
+
162
+ ### Heroku
163
+
164
+ ```bash
165
+ # View logs
166
+ heroku logs --tail
167
+
168
+ # Check status
169
+ heroku ps
170
+ ```
171
+
172
+ ## 🐛 Troubleshooting
173
+
174
+ ### Connection Refused
175
+
176
+ - Check if backend is running
177
+ - Verify PORT is set correctly
178
+ - Check firewall settings
179
+
180
+ ### WebSocket Upgrade Failed
181
+
182
+ - Ensure using `wss://` (not `ws://`) in production
183
+ - Check if hosting provider supports WebSocket
184
+
185
+ ### AI Planning Not Working
186
+
187
+ - Ollama must be running locally (not on cloud)
188
+ - Consider switching to OpenAI API for cloud deployment
189
+ - Or remove AI planning feature
190
+
191
+ ### Port Already in Use
192
+
193
+ ```bash
194
+ # Railway/Render handle this automatically
195
+ # For local testing, change PORT in .env
196
+ ```
197
+
198
+ ## 🔐 Security Notes
199
+
200
+ ### Current Setup
201
+
202
+ - Basic token authentication (hostname-based)
203
+ - No rate limiting
204
+ - No command validation
205
+
206
+ ### For Production
207
+
208
+ 1. Implement JWT authentication
209
+ 2. Add rate limiting
210
+ 3. Validate all commands
211
+ 4. Use environment variables for secrets
212
+ 5. Enable CORS properly
213
+ 6. Add request logging
214
+
215
+ ## 📊 Expected Behavior
216
+
217
+ ### Successful Deployment
218
+
219
+ ```
220
+ ✅ Backend running on port 8080
221
+ ✅ WebSocket server accepting connections
222
+ ✅ Devices can connect
223
+ ✅ Dashboard can connect
224
+ ✅ Commands route correctly
225
+ ```
226
+
227
+ ### Logs Should Show
228
+
229
+ ```
230
+ Backend running on port 8080
231
+ Type: send <DeviceName> <command>
232
+ Registered device: Test-Device
233
+ Token: device-test-device
234
+ Registered device: VAIBHAV-PC
235
+ Token: device-vaibhav-pc
236
+ ```
237
+
238
+ ## 🎯 Success Criteria
239
+
240
+ - [ ] Backend deployed to cloud
241
+ - [ ] WebSocket connections work
242
+ - [ ] URL saved and documented
243
+ - [ ] Agent updated with new URL
244
+ - [ ] Dashboard updated with new URL
245
+ - [ ] End-to-end test successful
246
+
247
+ ## 💰 Costs
248
+
249
+ - **Railway**: Free tier (500 hrs/month)
250
+ - **Render**: Free tier (750 hrs/month)
251
+ - **Heroku**: Free tier discontinued, starts at $7/month
252
+
253
+ ## 📞 Support
254
+
255
+ - Railway: https://railway.app/help
256
+ - Render: https://render.com/docs
257
+ - Heroku: https://help.heroku.com
258
+
259
+ ---
260
+
261
+ **Your backend is ready to deploy!** 🚀
@@ -0,0 +1 @@
1
+ web: node server.js
@@ -0,0 +1,80 @@
1
+ # Vortix Backend
2
+
3
+ WebSocket server for coordinating devices and dashboard.
4
+
5
+ ## Features
6
+
7
+ - WebSocket server for real-time communication
8
+ - Device registration and management
9
+ - Command routing between dashboard and agents
10
+ - AI-powered command planning (Ollama integration)
11
+ - Heartbeat monitoring
12
+
13
+ ## Environment Variables
14
+
15
+ - `PORT` - Server port (default: 8080)
16
+
17
+ ## Local Development
18
+
19
+ ```bash
20
+ # Install dependencies
21
+ npm install
22
+
23
+ # Start server
24
+ npm start
25
+ ```
26
+
27
+ Server will run on `ws://localhost:8080`
28
+
29
+ ## Deployment
30
+
31
+ ### Railway
32
+
33
+ ```bash
34
+ railway up
35
+ ```
36
+
37
+ ### Render
38
+
39
+ 1. Connect GitHub repo
40
+ 2. Set build command: `npm install`
41
+ 3. Set start command: `npm start`
42
+
43
+ ### Heroku
44
+
45
+ ```bash
46
+ heroku create
47
+ git push heroku main
48
+ ```
49
+
50
+ ## API
51
+
52
+ ### WebSocket Endpoints
53
+
54
+ **Agent Connection**
55
+
56
+ ```
57
+ ws://backend-url?token=device-hostname
58
+ ```
59
+
60
+ **Dashboard Connection**
61
+
62
+ ```
63
+ ws://backend-url?type=dashboard
64
+ ```
65
+
66
+ ## Message Types
67
+
68
+ See [ARCHITECTURE.md](../docs/ARCHITECTURE.md) for complete message
69
+ documentation.
70
+
71
+ ## Requirements
72
+
73
+ - Node.js >= 14.0.0
74
+ - Ollama running on localhost:11434 (for AI planning)
75
+
76
+ ## Notes
77
+
78
+ - AI planning requires Ollama with qwen2.5:7b model
79
+ - Can be modified to use OpenAI instead
80
+ - Supports multiple simultaneous device connections