navada-edge-cli 2.1.1 → 2.2.1

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
@@ -1,145 +1,285 @@
1
1
  # navada-edge-cli
2
2
 
3
- Interactive CLI for the **NAVADA Edge Network**. Explore nodes, Cloudflare, AI services, Docker registry, MCP tools, and Postgres — all from your terminal.
3
+ An AI-powered terminal agent for the **NAVADA Edge Network**. Full computer access, distributed infrastructure control, and conversational AI — all from your terminal.
4
4
 
5
- ```
5
+ ```bash
6
6
  npm install -g navada-edge-cli
7
7
  ```
8
8
 
9
+ ```
10
+ ╭─────────────────────────────────────────────────────────╮
11
+ │ ███╗ ██╗ █████╗ ██╗ ██╗ █████╗ ██████╗ █████╗ │
12
+ │ ██╔██╗ ██║███████║██║ ██║███████║██║ ██║███████║ │
13
+ │ ██║ ╚████║██║ ██║ ╚████╔╝ ██║ ██║██████╔╝██║ ██║ │
14
+ │ E D G E N E T W O R K v2.1.1 │
15
+ ╰─────────────────────────────────────────────────────────╯
16
+ ```
17
+
18
+ ## What is this?
19
+
20
+ NAVADA Edge CLI is a **conversational AI agent** that runs in your terminal. It has full access to your local machine (files, shell, processes) and connects to the NAVADA Edge Network — a distributed infrastructure spanning 4 physical nodes, Cloudflare, Azure, and AI services.
21
+
22
+ **Just type naturally.** No commands needed.
23
+
24
+ ```
25
+ navada> what images are in the docker registry?
26
+ [docker_registry] {}
27
+
28
+ NAVADA
29
+ The private registry contains: my-api, navada-command-dashboard,
30
+ navada-edge-mcp, navada-opencode-serve, navada-opencode-server.
31
+ ```
32
+
33
+ ```
34
+ navada> check disk space on EC2
35
+ [lucas_ssh] {"node":"ec2","command":"df -h"}
36
+
37
+ NAVADA
38
+ EC2 disk usage: 45% used (12G/26G). /dev/xvda1 mounted at /.
39
+ ```
40
+
41
+ ```
42
+ navada> create a file called hello.txt with "Hello from NAVADA"
43
+ [write_file] {"path":"hello.txt","content":"Hello from NAVADA"}
44
+
45
+ NAVADA
46
+ ✓ Written: /Users/you/hello.txt
47
+ ```
48
+
9
49
  ## Network Architecture
10
50
 
11
- ![NAVADA Edge Network](https://cdn.jsdelivr.net/npm/navada-edge-sdk@1.1.0/network.svg)
51
+ ![NAVADA Edge Network](https://cdn.jsdelivr.net/npm/navada-edge-sdk@1.2.0/network.svg)
12
52
 
13
53
  ## Quick Start
14
54
 
15
55
  ```bash
16
- # Launch interactive mode
56
+ # Install
57
+ npm install -g navada-edge-cli
58
+
59
+ # Start the CLI
17
60
  navada
18
61
 
19
- # Or run commands directly
20
- navada status
21
- navada mcp tools
22
- navada registry
23
- navada chat "What is ISA allowance for 2026?"
62
+ # Login with your API key (Anthropic recommended for full agent mode)
63
+ /login sk-ant-your-key-here
64
+
65
+ # Start talking
66
+ hello, what can you do?
24
67
  ```
25
68
 
26
- ## Setup
69
+ The CLI accepts **any** API key:
27
70
 
28
- ```bash
29
- # Install globally
30
- npm install -g navada-edge-cli
71
+ | Key Type | Prefix | What You Get |
72
+ |----------|--------|-------------|
73
+ | **Anthropic** | `sk-ant-...` | Full agent with tool use — recommended |
74
+ | **OpenAI** | `sk-...` | GPT-4o chat |
75
+ | **HuggingFace** | `hf_...` | Qwen Coder (FREE) |
76
+ | **NAVADA Edge** | `nv_edge_...` | MCP server access + all network tools |
31
77
 
32
- # Set your API key
33
- navada login <your-api-key>
78
+ ## Features
34
79
 
35
- # Configure your nodes
36
- navada init asus 10.0.0.1
37
- navada init mcp http://10.0.0.1:8811
38
- navada init dashboard http://10.0.0.1:7900
39
- navada init registry http://10.0.0.1:5000
40
- ```
80
+ ### AI Agent with Tool Use
81
+
82
+ The CLI is powered by Claude Sonnet 4 with 13 tools. It doesn't just answer questions — it **executes tasks**:
41
83
 
42
- Config is saved to `~/.navada/config.json`. You can also use environment variables (see `navada-edge-sdk` docs).
84
+ | Tool | What it does |
85
+ |------|-------------|
86
+ | `shell` | Run any command on your local machine |
87
+ | `read_file` | Read files from your filesystem |
88
+ | `write_file` | Create or modify files |
89
+ | `list_files` | Browse directories |
90
+ | `system_info` | CPU, RAM, disk, hostname, OS |
91
+ | `network_status` | Ping all NAVADA Edge nodes |
92
+ | `lucas_exec` | Run bash on EC2 via Lucas CTO |
93
+ | `lucas_ssh` | SSH to any node via Lucas |
94
+ | `lucas_docker` | Docker exec in remote containers |
95
+ | `mcp_call` | Call any of 18 MCP server tools |
96
+ | `docker_registry` | Query the private Docker registry |
97
+ | `send_email` | Send email via SMTP or MCP |
98
+ | `generate_image` | Generate images (Flux FREE / DALL-E) |
43
99
 
44
- ## Interactive Mode
100
+ ### Two AI Agents
45
101
 
46
- Run `navada` with no arguments to enter the interactive TUI:
102
+ | Agent | Role | Access |
103
+ |-------|------|--------|
104
+ | **Lucas CTO** | Infrastructure agent on EC2 | bash, SSH, Docker, deploy, file operations |
105
+ | **Claude CoS** | Chief of Staff | Email, image gen, SMS, research, automation |
47
106
 
48
107
  ```
49
- ███╗ ██╗ █████╗ ██╗ ██╗ █████╗ ██████╗ █████╗
50
- ████╗ ██║██╔══██╗██║ ██║██╔══██╗██╔══██╗██╔══██╗
51
- ██╔██╗ ██║███████║██║ ██║███████║██║ ██║███████║
52
- ██║╚██╗██║██╔══██║╚██╗ ██╔╝██╔══██║██║ ██║██╔══██║
53
- ██║ ╚████║██║ ██║ ╚████╔╝ ██║ ██║██████╔╝██║ ██║
54
- ╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝
55
- ─────────────────────────────────────────────────────
56
- E D G E N E T W O R K v1.0.0
57
- ─────────────────────────────────────────────────────
108
+ navada> /agents
109
+ ● Lucas CTO ONLINE (MCP http://100.x.x.x:8820)
110
+ Tools: bash, ssh, docker_exec, deploy, read_file, write_file
58
111
 
59
- navada> /status
60
- ASUS ONLINE (HTTP 200)
61
- ● HP ONLINE (HTTP 401)
62
- EC2 ONLINE (HTTP 401)
63
- ORACLE ONLINE (HTTP 200)
64
- ○ AZURE OFFLINE (unreachable)
65
- ● CLOUDFLARE ONLINE (HTTP 200)
112
+ Claude CoS ONLINE (Dashboard http://100.x.x.x:7900)
113
+ Controls: Telegram, email, SMS, image gen, R2, cost tracking
114
+
115
+ MCP Server ONLINE (http://100.x.x.x:8811)
116
+ Version: 1.0.0
66
117
  ```
67
118
 
68
- ## Commands
119
+ ### 45+ Slash Commands
120
+
121
+ Use `/commands` for direct control, or just type naturally for the AI agent.
69
122
 
70
- ### Network
123
+ **Network**
71
124
  | Command | Description |
72
125
  |---------|-------------|
73
126
  | `/status` | Ping all nodes + cloud services |
74
127
  | `/nodes` | Show node configuration |
75
- | `/dashboard` | Get Command Dashboard status |
76
-
77
- ### MCP
78
- | Command | Description |
79
- |---------|-------------|
80
- | `/mcp tools` | List MCP tools |
81
- | `/mcp call <tool> [json]` | Call an MCP tool |
128
+ | `/doctor` | Validate all connections |
129
+ | `/ping` | Quick all-nodes ping |
130
+ | `/metrics` | CPU/RAM/disk for all nodes |
131
+ | `/health` | Deep health check |
132
+ | `/dashboard` | Command Dashboard status |
82
133
 
83
- ### Lucas CTO
134
+ **Agents**
84
135
  | Command | Description |
85
136
  |---------|-------------|
86
- | `/lucas exec <cmd>` | Run bash on EC2 |
137
+ | `/agents` | Show Lucas CTO + Claude CoS status |
138
+ | `/claude <msg>` | Send message to Claude CoS |
139
+ | `/lucas exec <cmd>` | Run bash on EC2 via Lucas |
87
140
  | `/lucas ssh <node> <cmd>` | SSH to node via Lucas |
88
141
  | `/lucas docker <ctr> <cmd>` | Docker exec via Lucas |
89
- | `/lucas status` | Lucas network status |
142
+ | `/lucas deploy <name> <node>` | Deploy container |
90
143
 
91
- ### Docker
144
+ **Docker**
92
145
  | Command | Description |
93
146
  |---------|-------------|
94
147
  | `/registry` | List images in private registry |
95
148
  | `/registry tags <image>` | List tags for an image |
149
+ | `/deploy <name> <node>` | Deploy container to node |
150
+ | `/logs <container>` | View container logs |
96
151
 
97
- ### Database
152
+ **AI**
98
153
  | Command | Description |
99
154
  |---------|-------------|
100
- | `/db <sql>` | Run a Postgres query |
155
+ | `/chat <msg>` | Chat with NAVADA Edge AI |
156
+ | `/qwen <prompt>` | Qwen Coder 32B (FREE) |
157
+ | `/yolo detect <img>` | Object detection |
158
+ | `/image <prompt>` | Generate image (Flux FREE) |
159
+ | `/image --dalle <prompt>` | Generate with DALL-E 3 |
160
+ | `/model` | Show/set AI model |
161
+ | `/research <query>` | RAG search via MCP |
101
162
 
102
- ### Cloudflare
163
+ **Cloudflare**
103
164
  | Command | Description |
104
165
  |---------|-------------|
105
166
  | `/r2 ls [prefix]` | List R2 objects |
106
- | `/r2 buckets` | List R2 buckets |
107
- | `/r2 upload <key> <file>` | Upload file to R2 |
167
+ | `/r2 upload <key> <file>` | Upload to R2 |
108
168
  | `/dns` | List DNS records |
109
- | `/dns create <type> <name> <content>` | Create DNS record |
169
+ | `/dns create <type> <name> <val>` | Create DNS record |
110
170
  | `/tunnel` | List Cloudflare tunnels |
111
171
  | `/stream` | List Stream videos |
112
172
  | `/flux <prompt>` | Generate image (FREE) |
113
- | `/trace <url>` | Trace through Cloudflare WAF |
173
+ | `/trace <url>` | Trace through WAF |
114
174
 
115
- ### AI
175
+ **Database**
116
176
  | Command | Description |
117
177
  |---------|-------------|
118
- | `/chat <message>` | Chat with GPT-4o |
119
- | `/qwen <prompt>` | Qwen Coder (FREE) |
120
- | `/yolo` | YOLO service status |
121
- | `/yolo detect <image>` | Run object detection |
178
+ | `/db <sql>` | Query Postgres |
122
179
 
123
- ### Azure
180
+ **System**
124
181
  | Command | Description |
125
182
  |---------|-------------|
126
- | `/n8n` | Check n8n health |
127
-
128
- ### System
129
- | Command | Description |
130
- |---------|-------------|
131
- | `/config` | Show current configuration |
132
- | `/login <api-key>` | Set API key |
133
- | `/init <key> <value>` | Set a config value |
183
+ | `/config` | Show all configuration |
184
+ | `/login <key>` | Set API key (auto-detects type) |
185
+ | `/setup` | Guided onboarding wizard |
186
+ | `/theme [name]` | Switch theme (dark/crow/matrix/light) |
187
+ | `/history` | Command history |
188
+ | `/alias <name> <cmd>` | Create shortcut |
189
+ | `/watch <cmd> <sec>` | Repeat command on interval |
190
+ | `/export <file>` | Save output to file |
191
+ | `/pipe` | Copy output to clipboard |
192
+ | `/email <to> <subj> <body>` | Send email (SMTP/MCP) |
193
+ | `/email setup` | Configure SMTP (Hotmail/Gmail/Zoho) |
194
+ | `/serve [port]` | Start mobile HTTP UI |
195
+ | `/version` | Version + tier info |
196
+ | `/upgrade` | Check for updates |
134
197
  | `/clear` | Clear screen |
135
198
  | `/exit` | Exit CLI |
136
199
 
200
+ ### 4 Themes
201
+
202
+ ```
203
+ navada> /theme crow # achromatic, minimal
204
+ navada> /theme matrix # green terminal
205
+ navada> /theme dark # default
206
+ navada> /theme light # blue + white
207
+ ```
208
+
209
+ ### Mobile Access
210
+
211
+ ```
212
+ navada> /serve 7800
213
+ MOBILE SERVER
214
+ Local http://localhost:7800
215
+ Network http://100.x.x.x:7800
216
+ [QR code displayed]
217
+ ```
218
+
219
+ Opens a web UI on your phone — same commands, same network access.
220
+
221
+ ### Email
222
+
223
+ ```bash
224
+ # Configure SMTP (Hotmail, Gmail, Zoho)
225
+ navada> /email setup
226
+
227
+ # Send directly
228
+ navada> /email user@example.com "Subject" "Body text"
229
+
230
+ # Or ask the agent naturally
231
+ navada> email lee the network status report
232
+ ```
233
+
234
+ ### Persistent History
235
+
236
+ Commands survive restarts. Search with `/history docker` to find previous Docker commands.
237
+
238
+ ### Docker
239
+
240
+ ```bash
241
+ # Run in Docker
242
+ docker run -it --env-file .env navada-edge-cli
243
+
244
+ # With mobile access
245
+ docker run -it -p 7800:7800 --env-file .env navada-edge-cli --serve
246
+ ```
247
+
248
+ ## Configuration
249
+
250
+ All config lives in `~/.navada/config.json`. Set values with:
251
+
252
+ ```bash
253
+ navada> /login sk-ant-your-key # API key
254
+ navada> /init asus 100.x.x.x # Node IP
255
+ navada> /init mcp http://x.x.x:8811 # MCP server
256
+ navada> /theme crow # Theme
257
+ navada> /alias s status # Alias
258
+ ```
259
+
260
+ Or use environment variables:
261
+
262
+ ```env
263
+ ANTHROPIC_API_KEY=sk-ant-...
264
+ NAVADA_ASUS=100.x.x.x
265
+ NAVADA_MCP=http://100.x.x.x:8811
266
+ NAVADA_DASHBOARD=http://100.x.x.x:7900
267
+ NAVADA_REGISTRY=http://100.x.x.x:5000
268
+ NAVADA_LUCAS=http://100.x.x.x:8820
269
+ ```
270
+
137
271
  ## NAVADA Edge Ecosystem
138
272
 
139
273
  | Package | Install | Purpose |
140
274
  |---------|---------|---------|
141
- | `navada-edge-sdk` | `npm i navada-edge-sdk` | SDK — use in your Node.js apps |
142
- | `navada-edge-cli` | `npm i -g navada-edge-cli` | CLI — interactive terminal tool |
275
+ | **navada-edge-sdk** | `npm i navada-edge-sdk` | SDK — use in your Node.js apps |
276
+ | **navada-edge-cli** | `npm i -g navada-edge-cli` | CLI — AI agent in your terminal |
277
+ | **MCP Server** | `POST /mcp` | JSON-RPC tool server (18 tools) |
278
+ | **Docker** | `docker pull navada-edge-cli` | Run CLI in a container |
279
+
280
+ ## Telemetry
281
+
282
+ The CLI reports anonymous usage events (install, session start, command counts) to the NAVADA Edge Dashboard for monitoring. No personal data or API keys are transmitted. Telemetry requires a configured dashboard endpoint.
143
283
 
144
284
  ## License
145
285
 
package/lib/registry.js CHANGED
@@ -59,7 +59,38 @@ async function execute(input) {
59
59
  return;
60
60
  }
61
61
 
62
- // No slash — treat as natural language route to AI agent
62
+ // No slash — check if first word is a known command anyway
63
+ const firstWord = trimmed.split(/\s+/)[0].toLowerCase();
64
+ const restArgs = trimmed.split(/\s+/).slice(1);
65
+
66
+ // Check built-in commands (login, setup, status, etc.)
67
+ if (commands[firstWord]) {
68
+ try {
69
+ await commands[firstWord].handler(restArgs);
70
+ } catch (e) {
71
+ const ui = require('./ui');
72
+ console.log(ui.error(e.message));
73
+ }
74
+ return;
75
+ }
76
+
77
+ // Check user aliases
78
+ const userAliases = config.getAliases();
79
+ if (userAliases[firstWord]) {
80
+ const expanded = userAliases[firstWord].split(/\s+/);
81
+ const aliasCmd = commands[expanded[0]];
82
+ if (aliasCmd) {
83
+ try {
84
+ await aliasCmd.handler([...expanded.slice(1), ...restArgs]);
85
+ } catch (e) {
86
+ const ui = require('./ui');
87
+ console.log(ui.error(e.message));
88
+ }
89
+ return;
90
+ }
91
+ }
92
+
93
+ // Not a command — treat as natural language → route to AI agent
63
94
  try {
64
95
  await commands['chat'].handler(trimmed.split(/\s+/));
65
96
  } catch (e) {
package/network.svg CHANGED
@@ -1,197 +1,207 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 980" font-family="'SF Mono','Cascadia Code','IBM Plex Mono',monospace">
2
- <rect width="1200" height="980" fill="#050505"/>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 720" font-family="'SF Mono','Cascadia Code','Courier New',monospace">
2
+ <defs>
3
+ <style>
4
+ .bg { fill: #050505; }
5
+ .card { fill: #0a0a0a; stroke: #1a1a1a; stroke-width: 1; }
6
+ .card-hdr { fill: #0f0f0f; }
7
+ .t-title { fill: #fff; font-size: 20px; font-weight: 700; letter-spacing: 3px; }
8
+ .t-sub { fill: #555; font-size: 10px; letter-spacing: 1.5px; }
9
+ .t-label { fill: #555; font-size: 8px; letter-spacing: 1px; text-transform: uppercase; }
10
+ .t-name { fill: #fff; font-size: 11px; font-weight: 600; }
11
+ .t-role { fill: #666; font-size: 9px; }
12
+ .t-svc { fill: #bbb; font-size: 9px; }
13
+ .t-port { fill: #555; font-size: 9px; }
14
+ .t-ip { fill: #444; font-size: 8px; }
15
+ .t-count { fill: #555; font-size: 8px; }
16
+ .t-pill { fill: #e0e0e0; font-size: 10px; }
17
+ .t-pill-sub { fill: #555; font-size: 8px; }
18
+ .t-footer { fill: #333; font-size: 9px; letter-spacing: 0.5px; }
19
+ .dot-on { fill: #22c55e; }
20
+ .dot-off { fill: #444; }
21
+ .line-v { stroke: #1a1a1a; stroke-width: 1; }
22
+ .line-accent { stroke: #fff; stroke-width: 2; }
23
+ .line-dim { stroke: #333; stroke-width: 2; }
24
+ .line-dark { stroke: #222; stroke-width: 2; }
25
+ .badge { fill: none; stroke: #222; stroke-width: 1; }
26
+ .badge-text { fill: #666; font-size: 7px; letter-spacing: 0.5px; }
27
+ .pill-box { fill: none; stroke: #1a1a1a; stroke-width: 1; }
28
+ .mesh-bar { fill: #080808; stroke: #1a1a1a; stroke-width: 1; }
29
+ .arrow { fill: #222; }
30
+ </style>
31
+ </defs>
32
+
33
+ <!-- Background -->
34
+ <rect width="900" height="720" class="bg"/>
3
35
 
4
36
  <!-- Title -->
5
- <text x="600" y="40" fill="#ffffff" font-size="22" font-weight="600" text-anchor="middle" letter-spacing="4">NAVADA EDGE NETWORK</text>
6
- <text x="600" y="58" fill="#555" font-size="11" text-anchor="middle" letter-spacing="2">Distributed AI Infrastructure — 4 Nodes | 25 Containers | 100% Docker</text>
7
-
8
- <!-- Clients -->
9
- <rect x="400" y="78" width="400" height="50" fill="#0a0a0a" stroke="#1a1a1a"/>
10
- <text x="470" y="100" fill="#e0e0e0" font-size="11">iPhone</text>
11
- <text x="470" y="115" fill="#444" font-size="9">Telegram</text>
12
- <text x="580" y="100" fill="#e0e0e0" font-size="11">Desktop</text>
13
- <text x="580" y="115" fill="#444" font-size="9">VS Code / Browser</text>
14
- <text x="700" y="100" fill="#e0e0e0" font-size="11">API Consumer</text>
15
- <text x="700" y="115" fill="#444" font-size="9">SDK / CLI / MCP</text>
16
-
17
- <!-- Arrow -->
18
- <line x1="600" y1="128" x2="600" y2="148" stroke="#333" stroke-width="1"/>
19
- <polygon points="596,148 604,148 600,155" fill="#333"/>
37
+ <text x="450" y="36" text-anchor="middle" class="t-title">NAVADA EDGE NETWORK</text>
38
+ <text x="450" y="52" text-anchor="middle" class="t-sub">Distributed AI Infrastructure</text>
20
39
 
21
40
  <!-- Mesh Bar -->
22
- <rect x="60" y="160" width="1080" height="44" fill="#0a0a0a" stroke="#1a1a1a"/>
23
- <text x="200" y="178" fill="#555" font-size="9" letter-spacing="1">VPN MESH</text>
24
- <text x="200" y="194" fill="#e0e0e0" font-size="11">Tailscale (WireGuard)</text>
25
- <text x="500" y="178" fill="#555" font-size="9" letter-spacing="1">TUNNEL</text>
26
- <text x="500" y="194" fill="#e0e0e0" font-size="11">Cloudflare *.navada-edge-server.uk</text>
27
- <text x="880" y="178" fill="#555" font-size="9" letter-spacing="1">REGISTRY</text>
28
- <text x="880" y="194" fill="#e0e0e0" font-size="11">Private Docker :5000</text>
41
+ <rect x="40" y="68" width="820" height="36" rx="0" class="mesh-bar"/>
42
+ <text x="140" y="82" class="t-label">VPN</text>
43
+ <text x="140" y="95" class="t-svc">Tailscale WireGuard</text>
44
+ <text x="370" y="82" class="t-label">TUNNEL</text>
45
+ <text x="370" y="95" class="t-svc">Cloudflare *.navada-edge-server.uk</text>
46
+ <text x="680" y="82" class="t-label">REGISTRY</text>
47
+ <text x="680" y="95" class="t-svc">Private Docker :5000</text>
29
48
 
30
49
  <!-- Arrow -->
31
- <line x1="600" y1="204" x2="600" y2="222" stroke="#333" stroke-width="1"/>
32
- <polygon points="596,222 604,222 600,229" fill="#333"/>
33
-
34
- <!-- Section: Nodes -->
35
- <text x="68" y="244" fill="#333" font-size="9" letter-spacing="2">TAILSCALE NODES</text>
36
-
37
- <!-- NODE 1: ASUS -->
38
- <rect x="60" y="255" width="265" height="235" fill="#0a0a0a" stroke="#1a1a1a"/>
39
- <rect x="60" y="255" width="3" height="32" fill="#fff"/>
40
- <rect x="60" y="255" width="265" height="32" fill="#0a0a0a" stroke="#1a1a1a"/>
41
- <text x="72" y="274" fill="#fff" font-size="12" font-weight="600">ASUS Zenbook Duo</text>
42
- <text x="72" y="282" fill="#555" font-size="9">Production Engine</text>
43
- <text x="310" y="271" fill="#444" font-size="9" text-anchor="end">100.88.118.128</text>
44
- <text x="310" y="282" fill="#555" font-size="9" text-anchor="end">7 containers</text>
45
- <circle cx="316" cy="277" r="4" fill="#22c55e"/>
46
- <!-- Services -->
47
- <text x="72" y="304" fill="#e0e0e0" font-size="10">MCP Server</text><text x="310" y="304" fill="#444" font-size="10" text-anchor="end">:8811</text>
48
- <line x1="72" y1="310" x2="310" y2="310" stroke="#111" stroke-width="0.5"/>
49
- <text x="72" y="324" fill="#e0e0e0" font-size="10">Command Dashboard</text><text x="310" y="324" fill="#444" font-size="10" text-anchor="end">:7900</text>
50
- <line x1="72" y1="330" x2="310" y2="330" stroke="#111" stroke-width="0.5"/>
51
- <text x="72" y="344" fill="#e0e0e0" font-size="10">Docker Registry</text><text x="310" y="344" fill="#444" font-size="10" text-anchor="end">:5000</text>
52
- <line x1="72" y1="350" x2="310" y2="350" stroke="#111" stroke-width="0.5"/>
53
- <text x="72" y="364" fill="#e0e0e0" font-size="10">OpenCode</text><text x="310" y="364" fill="#444" font-size="10" text-anchor="end">:3200</text>
54
- <line x1="72" y1="370" x2="310" y2="370" stroke="#111" stroke-width="0.5"/>
55
- <text x="72" y="384" fill="#e0e0e0" font-size="10">Portainer Agent</text><text x="310" y="384" fill="#444" font-size="10" text-anchor="end">:9001</text>
56
- <line x1="72" y1="390" x2="310" y2="390" stroke="#111" stroke-width="0.5"/>
57
- <text x="72" y="404" fill="#e0e0e0" font-size="10">Builder</text><text x="310" y="404" fill="#444" font-size="10" text-anchor="end">:4000</text>
58
- <line x1="72" y1="410" x2="310" y2="410" stroke="#111" stroke-width="0.5"/>
59
- <text x="72" y="424" fill="#e0e0e0" font-size="10">Sandbox</text><text x="310" y="424" fill="#444" font-size="10" text-anchor="end">:3100</text>
60
-
61
- <!-- NODE 2: EC2 -->
62
- <rect x="340" y="255" width="265" height="255" fill="#0a0a0a" stroke="#1a1a1a"/>
63
- <rect x="340" y="255" width="3" height="32" fill="#666"/>
64
- <rect x="340" y="255" width="265" height="32" fill="#0a0a0a" stroke="#1a1a1a"/>
65
- <text x="352" y="274" fill="#fff" font-size="12" font-weight="600">AWS EC2</text>
66
- <text x="352" y="282" fill="#555" font-size="9">Monitoring + Bots</text>
67
- <text x="590" y="271" fill="#444" font-size="9" text-anchor="end">100.98.118.33</text>
68
- <text x="590" y="282" fill="#555" font-size="9" text-anchor="end">8 containers</text>
69
- <circle cx="596" cy="277" r="4" fill="#22c55e"/>
70
- <text x="352" y="304" fill="#e0e0e0" font-size="10">Telegram Bot (Claude)</text><text x="590" y="304" fill="#444" font-size="10" text-anchor="end">:3456</text>
71
- <line x1="352" y1="310" x2="590" y2="310" stroke="#111" stroke-width="0.5"/>
72
- <text x="352" y="324" fill="#e0e0e0" font-size="10">Lucas CTO MCP</text><text x="590" y="324" fill="#444" font-size="10" text-anchor="end">:8820</text>
73
- <line x1="352" y1="330" x2="590" y2="330" stroke="#111" stroke-width="0.5"/>
74
- <text x="352" y="344" fill="#e0e0e0" font-size="10">Health Monitor</text><text x="590" y="344" fill="#444" font-size="10" text-anchor="end">—</text>
75
- <line x1="352" y1="350" x2="590" y2="350" stroke="#111" stroke-width="0.5"/>
76
- <text x="352" y="364" fill="#e0e0e0" font-size="10">Dashboard</text><text x="590" y="364" fill="#444" font-size="10" text-anchor="end">:9090</text>
77
- <line x1="352" y1="370" x2="590" y2="370" stroke="#111" stroke-width="0.5"/>
78
- <text x="352" y="384" fill="#e0e0e0" font-size="10">OpenCode</text><text x="590" y="384" fill="#444" font-size="10" text-anchor="end">:3200</text>
79
- <line x1="352" y1="390" x2="590" y2="390" stroke="#111" stroke-width="0.5"/>
80
- <text x="352" y="404" fill="#e0e0e0" font-size="10">WorldMonitor</text><text x="590" y="404" fill="#444" font-size="10" text-anchor="end">:4000</text>
81
- <line x1="352" y1="410" x2="590" y2="410" stroke="#111" stroke-width="0.5"/>
82
- <text x="352" y="424" fill="#e0e0e0" font-size="10">E2E Tests</text><text x="590" y="424" fill="#444" font-size="10" text-anchor="end">—</text>
83
- <line x1="352" y1="430" x2="590" y2="430" stroke="#111" stroke-width="0.5"/>
84
- <text x="352" y="444" fill="#e0e0e0" font-size="10">Portainer Agent</text><text x="590" y="444" fill="#444" font-size="10" text-anchor="end">:9001</text>
85
-
86
- <!-- NODE 3: Oracle -->
87
- <rect x="620" y="255" width="265" height="255" fill="#0a0a0a" stroke="#1a1a1a"/>
88
- <rect x="620" y="255" width="3" height="32" fill="#444"/>
89
- <rect x="620" y="255" width="265" height="32" fill="#0a0a0a" stroke="#1a1a1a"/>
90
- <text x="632" y="274" fill="#fff" font-size="12" font-weight="600">Oracle Cloud</text>
91
- <text x="632" y="282" fill="#555" font-size="9">Docker Infrastructure</text>
92
- <text x="870" y="271" fill="#444" font-size="9" text-anchor="end">100.77.206.9</text>
93
- <text x="870" y="282" fill="#555" font-size="9" text-anchor="end">8 containers</text>
94
- <circle cx="876" cy="277" r="4" fill="#22c55e"/>
95
- <text x="632" y="304" fill="#e0e0e0" font-size="10">Portainer</text><text x="870" y="304" fill="#444" font-size="10" text-anchor="end">:9000</text>
96
- <line x1="632" y1="310" x2="870" y2="310" stroke="#111" stroke-width="0.5"/>
97
- <text x="632" y="324" fill="#e0e0e0" font-size="10">Cloudflare Tunnel</text><text x="870" y="324" fill="#444" font-size="10" text-anchor="end">—</text>
98
- <line x1="632" y1="330" x2="870" y2="330" stroke="#111" stroke-width="0.5"/>
99
- <text x="632" y="344" fill="#e0e0e0" font-size="10">Nginx Proxy</text><text x="870" y="344" fill="#444" font-size="10" text-anchor="end">:80/443</text>
100
- <line x1="632" y1="350" x2="870" y2="350" stroke="#111" stroke-width="0.5"/>
101
- <text x="632" y="364" fill="#e0e0e0" font-size="10">Grafana</text><text x="870" y="364" fill="#444" font-size="10" text-anchor="end">:3000</text>
102
- <line x1="632" y1="370" x2="870" y2="370" stroke="#111" stroke-width="0.5"/>
103
- <text x="632" y="384" fill="#e0e0e0" font-size="10">Prometheus</text><text x="870" y="384" fill="#444" font-size="10" text-anchor="end">:9090</text>
104
- <line x1="632" y1="390" x2="870" y2="390" stroke="#111" stroke-width="0.5"/>
105
- <text x="632" y="404" fill="#e0e0e0" font-size="10">Uptime Kuma</text><text x="870" y="404" fill="#444" font-size="10" text-anchor="end">:3001</text>
106
- <line x1="632" y1="410" x2="870" y2="410" stroke="#111" stroke-width="0.5"/>
107
- <text x="632" y="424" fill="#e0e0e0" font-size="10">CloudBeaver</text><text x="870" y="424" fill="#444" font-size="10" text-anchor="end">:8978</text>
108
- <line x1="632" y1="430" x2="870" y2="430" stroke="#111" stroke-width="0.5"/>
109
- <text x="632" y="444" fill="#e0e0e0" font-size="10">Portainer Agent</text><text x="870" y="444" fill="#444" font-size="10" text-anchor="end">:9001</text>
110
-
111
- <!-- NODE 4: HP -->
112
- <rect x="900" y="255" width="240" height="145" fill="#0a0a0a" stroke="#1a1a1a"/>
113
- <rect x="900" y="255" width="3" height="32" fill="#333"/>
114
- <rect x="900" y="255" width="240" height="32" fill="#0a0a0a" stroke="#1a1a1a"/>
115
- <text x="912" y="274" fill="#fff" font-size="12" font-weight="600">HP EliteBook</text>
116
- <text x="912" y="282" fill="#555" font-size="9">Database Node</text>
117
- <text x="1126" y="271" fill="#444" font-size="9" text-anchor="end">100.121.187.67</text>
118
- <text x="1126" y="282" fill="#555" font-size="9" text-anchor="end">2 containers</text>
119
- <circle cx="1132" cy="277" r="4" fill="#22c55e"/>
120
- <text x="912" y="304" fill="#e0e0e0" font-size="10">PostgreSQL 17</text><text x="1126" y="304" fill="#444" font-size="10" text-anchor="end">:5433</text>
121
- <line x1="912" y1="310" x2="1126" y2="310" stroke="#111" stroke-width="0.5"/>
122
- <text x="912" y="324" fill="#e0e0e0" font-size="10">OpenCode</text><text x="1126" y="324" fill="#444" font-size="10" text-anchor="end">:3200</text>
123
- <line x1="912" y1="330" x2="1126" y2="330" stroke="#111" stroke-width="0.5"/>
124
- <text x="912" y="344" fill="#e0e0e0" font-size="10">Portainer Agent</text><text x="1126" y="344" fill="#444" font-size="10" text-anchor="end">:9001</text>
125
-
126
- <!-- Section: Cloud -->
127
- <text x="68" y="535" fill="#333" font-size="9" letter-spacing="2">CLOUD SERVICES</text>
50
+ <line x1="450" y1="104" x2="450" y2="118" class="line-v"/>
51
+ <polygon points="447,118 453,118 450,124" class="arrow"/>
52
+
53
+ <!-- ==================== 4 NODES ==================== -->
54
+ <text x="48" y="140" class="t-label">NODES</text>
55
+
56
+ <!-- ASUS -->
57
+ <rect x="40" y="148" width="200" height="184" class="card"/>
58
+ <rect x="40" y="148" width="200" height="26" class="card-hdr"/>
59
+ <rect x="40" y="148" width="3" height="26" class="line-accent" style="stroke:none;fill:#fff"/>
60
+ <circle cx="228" cy="161" r="3" class="dot-on"/>
61
+ <text x="52" y="163" class="t-name">ASUS Zenbook</text>
62
+ <text x="52" y="172" class="t-role">Production Engine</text>
63
+ <text x="210" y="172" text-anchor="end" class="t-ip">7 containers</text>
64
+ <text x="52" y="192" class="t-svc">MCP Server</text><text x="228" y="192" text-anchor="end" class="t-port">:8811</text>
65
+ <line x1="52" y1="197" x2="228" y2="197" style="stroke:#111;stroke-width:0.5"/>
66
+ <text x="52" y="209" class="t-svc">Command Dashboard</text><text x="228" y="209" text-anchor="end" class="t-port">:7900</text>
67
+ <line x1="52" y1="214" x2="228" y2="214" style="stroke:#111;stroke-width:0.5"/>
68
+ <text x="52" y="226" class="t-svc">Docker Registry</text><text x="228" y="226" text-anchor="end" class="t-port">:5000</text>
69
+ <line x1="52" y1="231" x2="228" y2="231" style="stroke:#111;stroke-width:0.5"/>
70
+ <text x="52" y="243" class="t-svc">OpenCode</text><text x="228" y="243" text-anchor="end" class="t-port">:3200</text>
71
+ <line x1="52" y1="248" x2="228" y2="248" style="stroke:#111;stroke-width:0.5"/>
72
+ <text x="52" y="260" class="t-svc">Portainer Agent</text><text x="228" y="260" text-anchor="end" class="t-port">:9001</text>
73
+ <line x1="52" y1="265" x2="228" y2="265" style="stroke:#111;stroke-width:0.5"/>
74
+ <text x="52" y="277" class="t-svc">Builder + Sandbox</text><text x="228" y="277" text-anchor="end" class="t-port">:4000 :3100</text>
75
+
76
+ <!-- EC2 -->
77
+ <rect x="250" y="148" width="200" height="184" class="card"/>
78
+ <rect x="250" y="148" width="200" height="26" class="card-hdr"/>
79
+ <rect x="250" y="148" width="3" height="26" style="fill:#666"/>
80
+ <circle cx="438" cy="161" r="3" class="dot-on"/>
81
+ <text x="262" y="163" class="t-name">AWS EC2</text>
82
+ <text x="262" y="172" class="t-role">Monitoring + Bots</text>
83
+ <text x="420" y="172" text-anchor="end" class="t-ip">8 containers</text>
84
+ <text x="262" y="192" class="t-svc">Telegram Bot (Claude)</text><text x="438" y="192" text-anchor="end" class="t-port">:3456</text>
85
+ <line x1="262" y1="197" x2="438" y2="197" style="stroke:#111;stroke-width:0.5"/>
86
+ <text x="262" y="209" class="t-svc">Lucas CTO MCP</text><text x="438" y="209" text-anchor="end" class="t-port">:8820</text>
87
+ <line x1="262" y1="214" x2="438" y2="214" style="stroke:#111;stroke-width:0.5"/>
88
+ <text x="262" y="226" class="t-svc">Health Monitor</text><text x="438" y="226" text-anchor="end" class="t-port">24/7</text>
89
+ <line x1="262" y1="231" x2="438" y2="231" style="stroke:#111;stroke-width:0.5"/>
90
+ <text x="262" y="243" class="t-svc">OpenCode + Dashboard</text><text x="438" y="243" text-anchor="end" class="t-port">:3200 :9090</text>
91
+ <line x1="262" y1="248" x2="438" y2="248" style="stroke:#111;stroke-width:0.5"/>
92
+ <text x="262" y="260" class="t-svc">WorldMonitor + E2E</text><text x="438" y="260" text-anchor="end" class="t-port">:4000</text>
93
+ <line x1="262" y1="265" x2="438" y2="265" style="stroke:#111;stroke-width:0.5"/>
94
+ <text x="262" y="277" class="t-svc">Portainer Agent</text><text x="438" y="277" text-anchor="end" class="t-port">:9001</text>
95
+
96
+ <!-- Oracle -->
97
+ <rect x="460" y="148" width="200" height="184" class="card"/>
98
+ <rect x="460" y="148" width="200" height="26" class="card-hdr"/>
99
+ <rect x="460" y="148" width="3" height="26" style="fill:#444"/>
100
+ <circle cx="648" cy="161" r="3" class="dot-on"/>
101
+ <text x="472" y="163" class="t-name">Oracle Cloud</text>
102
+ <text x="472" y="172" class="t-role">Docker Infrastructure</text>
103
+ <text x="630" y="172" text-anchor="end" class="t-ip">8 containers</text>
104
+ <text x="472" y="192" class="t-svc">Portainer</text><text x="648" y="192" text-anchor="end" class="t-port">:9000</text>
105
+ <line x1="472" y1="197" x2="648" y2="197" style="stroke:#111;stroke-width:0.5"/>
106
+ <text x="472" y="209" class="t-svc">Cloudflare Tunnel</text><text x="648" y="209" text-anchor="end" class="t-port">origin</text>
107
+ <line x1="472" y1="214" x2="648" y2="214" style="stroke:#111;stroke-width:0.5"/>
108
+ <text x="472" y="226" class="t-svc">Grafana + Prometheus</text><text x="648" y="226" text-anchor="end" class="t-port">:3000 :9090</text>
109
+ <line x1="472" y1="231" x2="648" y2="231" style="stroke:#111;stroke-width:0.5"/>
110
+ <text x="472" y="243" class="t-svc">Uptime Kuma</text><text x="648" y="243" text-anchor="end" class="t-port">:3001</text>
111
+ <line x1="472" y1="248" x2="648" y2="248" style="stroke:#111;stroke-width:0.5"/>
112
+ <text x="472" y="260" class="t-svc">CloudBeaver</text><text x="648" y="260" text-anchor="end" class="t-port">:8978</text>
113
+ <line x1="472" y1="265" x2="648" y2="265" style="stroke:#111;stroke-width:0.5"/>
114
+ <text x="472" y="277" class="t-svc">Nginx Proxy</text><text x="648" y="277" text-anchor="end" class="t-port">:80/443</text>
115
+
116
+ <!-- HP -->
117
+ <rect x="670" y="148" width="190" height="108" class="card"/>
118
+ <rect x="670" y="148" width="190" height="26" class="card-hdr"/>
119
+ <rect x="670" y="148" width="3" height="26" style="fill:#333"/>
120
+ <circle cx="848" cy="161" r="3" class="dot-on"/>
121
+ <text x="682" y="163" class="t-name">HP EliteBook</text>
122
+ <text x="682" y="172" class="t-role">Database Node</text>
123
+ <text x="838" y="172" text-anchor="end" class="t-ip">2 containers</text>
124
+ <text x="682" y="192" class="t-svc">PostgreSQL 17</text><text x="848" y="192" text-anchor="end" class="t-port">:5433</text>
125
+ <line x1="682" y1="197" x2="848" y2="197" style="stroke:#111;stroke-width:0.5"/>
126
+ <text x="682" y="209" class="t-svc">OpenCode</text><text x="848" y="209" text-anchor="end" class="t-port">:3200</text>
127
+ <line x1="682" y1="214" x2="848" y2="214" style="stroke:#111;stroke-width:0.5"/>
128
+ <text x="682" y="226" class="t-svc">Portainer Agent</text><text x="848" y="226" text-anchor="end" class="t-port">:9001</text>
129
+
130
+ <!-- ==================== CLOUD ==================== -->
131
+ <text x="48" y="352" class="t-label">CLOUD SERVICES</text>
128
132
 
129
133
  <!-- Cloudflare -->
130
- <rect x="60" y="546" width="370" height="160" fill="#0a0a0a" stroke="#1a1a1a"/>
131
- <rect x="60" y="546" width="3" height="30" fill="#333"/>
132
- <rect x="60" y="546" width="370" height="30" fill="#0a0a0a" stroke="#1a1a1a"/>
133
- <text x="72" y="564" fill="#fff" font-size="12" font-weight="600">Cloudflare</text>
134
- <text x="72" y="572" fill="#555" font-size="9">CDN + Storage + AI</text>
135
- <rect x="380" y="552" width="40" height="16" fill="none" stroke="#222"/>
136
- <text x="400" y="564" fill="#888" font-size="8" text-anchor="middle">EDGE</text>
137
- <text x="72" y="594" fill="#e0e0e0" font-size="10">R2 Object Storage</text><text x="416" y="594" fill="#444" font-size="10" text-anchor="end">navada-assets</text>
138
- <line x1="72" y1="600" x2="416" y2="600" stroke="#111" stroke-width="0.5"/>
139
- <text x="72" y="614" fill="#e0e0e0" font-size="10">Flux Image Gen (FREE)</text><text x="416" y="614" fill="#444" font-size="10" text-anchor="end">Workers AI</text>
140
- <line x1="72" y1="620" x2="416" y2="620" stroke="#111" stroke-width="0.5"/>
141
- <text x="72" y="634" fill="#e0e0e0" font-size="10">Stream Video CDN</text><text x="416" y="634" fill="#444" font-size="10" text-anchor="end">HLS</text>
142
- <line x1="72" y1="640" x2="416" y2="640" stroke="#111" stroke-width="0.5"/>
143
- <text x="72" y="654" fill="#e0e0e0" font-size="10">Tunnel (11 subdomains)</text><text x="416" y="654" fill="#444" font-size="10" text-anchor="end">navada-edge-server.uk</text>
144
- <line x1="72" y1="660" x2="416" y2="660" stroke="#111" stroke-width="0.5"/>
145
- <text x="72" y="674" fill="#e0e0e0" font-size="10">DNS</text><text x="416" y="674" fill="#444" font-size="10" text-anchor="end">navada-edge-server.uk</text>
134
+ <rect x="40" y="360" width="280" height="120" class="card"/>
135
+ <rect x="40" y="360" width="280" height="24" class="card-hdr"/>
136
+ <text x="52" y="375" class="t-name">Cloudflare</text>
137
+ <text x="160" y="375" class="t-role">CDN + Storage + AI</text>
138
+ <rect x="280" y="364" width="32" height="14" class="badge"/><text x="296" y="374" text-anchor="middle" class="badge-text">EDGE</text>
139
+ <text x="52" y="398" class="t-svc">R2 Object Storage</text>
140
+ <text x="52" y="412" class="t-svc">Flux Image Gen (FREE)</text>
141
+ <text x="52" y="426" class="t-svc">Stream Video CDN</text>
142
+ <text x="52" y="440" class="t-svc">Tunnel (11 subdomains)</text>
143
+ <text x="52" y="454" class="t-svc">DNS + WAF Trace</text>
144
+ <text x="308" y="398" text-anchor="end" class="t-port">navada-assets</text>
145
+ <text x="308" y="412" text-anchor="end" class="t-port">Workers AI</text>
146
+ <text x="308" y="426" text-anchor="end" class="t-port">HLS</text>
147
+ <text x="308" y="440" text-anchor="end" class="t-port">*.navada-edge-server.uk</text>
148
+
149
+ <!-- AI Services -->
150
+ <rect x="330" y="360" width="280" height="120" class="card"/>
151
+ <rect x="330" y="360" width="280" height="24" class="card-hdr"/>
152
+ <text x="342" y="375" class="t-name">AI Services</text>
153
+ <text x="440" y="375" class="t-role">Inference + Generation</text>
154
+ <rect x="570" y="364" width="32" height="14" class="badge"/><text x="586" y="374" text-anchor="middle" class="badge-text">API</text>
155
+ <text x="342" y="398" class="t-svc">YOLO v8 Detection</text><text x="598" y="398" text-anchor="end" class="t-port">ASUS :8765</text>
156
+ <text x="342" y="412" class="t-svc">Qwen Coder 32B</text><text x="598" y="412" text-anchor="end" class="t-port">FREE (HuggingFace)</text>
157
+ <text x="342" y="426" class="t-svc">GPT-4o / DALL-E 3</text><text x="598" y="426" text-anchor="end" class="t-port">OpenAI</text>
158
+ <text x="342" y="440" class="t-svc">Claude Sonnet 4</text><text x="598" y="440" text-anchor="end" class="t-port">Anthropic</text>
159
+ <text x="342" y="454" class="t-svc">Flux (FREE)</text><text x="598" y="454" text-anchor="end" class="t-port">Cloudflare Workers</text>
146
160
 
147
161
  <!-- Azure -->
148
- <rect x="445" y="546" width="250" height="80" fill="#0a0a0a" stroke="#1a1a1a"/>
149
- <rect x="445" y="546" width="3" height="30" fill="#333"/>
150
- <rect x="445" y="546" width="250" height="30" fill="#0a0a0a" stroke="#1a1a1a"/>
151
- <text x="457" y="564" fill="#fff" font-size="12" font-weight="600">Azure</text>
152
- <text x="457" y="572" fill="#555" font-size="9">Workflow Automation</text>
153
- <rect x="645" y="552" width="40" height="16" fill="none" stroke="#222"/>
154
- <text x="665" y="564" fill="#888" font-size="8" text-anchor="middle">UK S</text>
155
- <text x="457" y="594" fill="#e0e0e0" font-size="10">n8n (Container Apps)</text><text x="681" y="594" fill="#444" font-size="10" text-anchor="end">HTTPS</text>
156
-
157
- <!-- AI -->
158
- <rect x="710" y="546" width="430" height="160" fill="#0a0a0a" stroke="#1a1a1a"/>
159
- <rect x="710" y="546" width="3" height="30" fill="#333"/>
160
- <rect x="710" y="546" width="430" height="30" fill="#0a0a0a" stroke="#1a1a1a"/>
161
- <text x="722" y="564" fill="#fff" font-size="12" font-weight="600">AI Services</text>
162
- <text x="722" y="572" fill="#555" font-size="9">Inference + Generation</text>
163
- <rect x="1090" y="552" width="40" height="16" fill="none" stroke="#222"/>
164
- <text x="1110" y="564" fill="#888" font-size="8" text-anchor="middle">API</text>
165
- <text x="722" y="594" fill="#e0e0e0" font-size="10">YOLO v8 Object Detection</text><text x="1126" y="594" fill="#444" font-size="10" text-anchor="end">ASUS :8765</text>
166
- <line x1="722" y1="600" x2="1126" y2="600" stroke="#111" stroke-width="0.5"/>
167
- <text x="722" y="614" fill="#e0e0e0" font-size="10">Qwen Coder 32B (FREE)</text><text x="1126" y="614" fill="#444" font-size="10" text-anchor="end">HuggingFace</text>
168
- <line x1="722" y1="620" x2="1126" y2="620" stroke="#111" stroke-width="0.5"/>
169
- <text x="722" y="634" fill="#e0e0e0" font-size="10">GPT-4o / DALL-E 3</text><text x="1126" y="634" fill="#444" font-size="10" text-anchor="end">OpenAI</text>
170
- <line x1="722" y1="640" x2="1126" y2="640" stroke="#111" stroke-width="0.5"/>
171
- <text x="722" y="654" fill="#e0e0e0" font-size="10">Flux Image Gen (FREE)</text><text x="1126" y="654" fill="#444" font-size="10" text-anchor="end">Cloudflare Workers</text>
172
-
173
- <!-- SDK Access Bar -->
174
- <rect x="60" y="730" width="1080" height="70" fill="#0a0a0a" stroke="#1a1a1a"/>
175
- <text x="600" y="752" fill="#555" font-size="9" text-anchor="middle" letter-spacing="2">ACCESS THE NETWORK</text>
176
-
177
- <rect x="140" y="762" width="160" height="30" fill="none" stroke="#222"/>
178
- <text x="220" y="778" fill="#e0e0e0" font-size="11" text-anchor="middle">SDK</text>
179
- <text x="220" y="788" fill="#555" font-size="8" text-anchor="middle">npm i navada-edge-sdk</text>
180
-
181
- <rect x="330" y="762" width="170" height="30" fill="none" stroke="#222"/>
182
- <text x="415" y="778" fill="#e0e0e0" font-size="11" text-anchor="middle">CLI</text>
183
- <text x="415" y="788" fill="#555" font-size="8" text-anchor="middle">npm i -g navada-edge-cli</text>
184
-
185
- <rect x="530" y="762" width="170" height="30" fill="none" stroke="#222"/>
186
- <text x="615" y="778" fill="#e0e0e0" font-size="11" text-anchor="middle">MCP</text>
187
- <text x="615" y="788" fill="#555" font-size="8" text-anchor="middle">POST /mcp (JSON-RPC)</text>
188
-
189
- <rect x="730" y="762" width="170" height="30" fill="none" stroke="#222"/>
190
- <text x="815" y="778" fill="#e0e0e0" font-size="11" text-anchor="middle">REST API</text>
191
- <text x="815" y="788" fill="#555" font-size="8" text-anchor="middle">GET /api/v1/status</text>
162
+ <rect x="620" y="360" width="240" height="60" class="card"/>
163
+ <rect x="620" y="360" width="240" height="24" class="card-hdr"/>
164
+ <text x="632" y="375" class="t-name">Azure</text>
165
+ <text x="700" y="375" class="t-role">Automation</text>
166
+ <rect x="822" y="364" width="30" height="14" class="badge"/><text x="837" y="374" text-anchor="middle" class="badge-text">UK</text>
167
+ <text x="632" y="398" class="t-svc">n8n Workflows (Container Apps)</text>
168
+
169
+ <!-- ==================== AGENTS ==================== -->
170
+ <text x="48" y="502" class="t-label">AGENTS</text>
171
+
172
+ <rect x="40" y="510" width="410" height="56" class="card"/>
173
+ <rect x="40" y="510" width="410" height="24" class="card-hdr"/>
174
+ <text x="52" y="525" class="t-name">Lucas CTO</text>
175
+ <text x="160" y="525" class="t-role">EC2 :8820 — 8 tools</text>
176
+ <text x="52" y="548" class="t-svc">bash ssh docker_exec deploy read_file write_file list_files network_status</text>
177
+
178
+ <rect x="460" y="510" width="400" height="56" class="card"/>
179
+ <rect x="460" y="510" width="400" height="24" class="card-hdr"/>
180
+ <text x="472" y="525" class="t-name">Claude CoS</text>
181
+ <text x="580" y="525" class="t-role">EC2 :3456 Chief of Staff</text>
182
+ <text x="472" y="548" class="t-svc">email image_gen SMS voice R2 research automation cost_tracking</text>
183
+
184
+ <!-- ==================== ACCESS ==================== -->
185
+ <text x="48" y="590" class="t-label">ACCESS THE NETWORK</text>
186
+
187
+ <rect x="40" y="598" width="820" height="52" class="card"/>
188
+ <rect x="80" y="610" width="150" height="28" class="pill-box"/>
189
+ <text x="155" y="625" text-anchor="middle" class="t-pill">SDK</text>
190
+ <text x="155" y="634" text-anchor="middle" class="t-pill-sub">npm i navada-edge-sdk</text>
191
+
192
+ <rect x="250" y="610" width="150" height="28" class="pill-box"/>
193
+ <text x="325" y="625" text-anchor="middle" class="t-pill">CLI</text>
194
+ <text x="325" y="634" text-anchor="middle" class="t-pill-sub">npm i -g navada-edge-cli</text>
195
+
196
+ <rect x="420" y="610" width="150" height="28" class="pill-box"/>
197
+ <text x="495" y="625" text-anchor="middle" class="t-pill">MCP</text>
198
+ <text x="495" y="634" text-anchor="middle" class="t-pill-sub">POST /mcp (JSON-RPC)</text>
199
+
200
+ <rect x="590" y="610" width="150" height="28" class="pill-box"/>
201
+ <text x="665" y="625" text-anchor="middle" class="t-pill">Docker</text>
202
+ <text x="665" y="634" text-anchor="middle" class="t-pill-sub">docker pull navada-edge-cli</text>
192
203
 
193
204
  <!-- Footer -->
194
- <rect x="60" y="820" width="1080" height="36" fill="#0a0a0a" stroke="#1a1a1a"/>
195
- <text x="600" y="843" fill="#444" font-size="10" text-anchor="middle" letter-spacing="1">NAVADA EDGE NETWORK — March 2026 | 4 Nodes | 25 Containers | 100% Docker | MIT Open Source</text>
196
-
205
+ <rect x="40" y="664" width="820" height="30" class="card"/>
206
+ <text x="450" y="684" text-anchor="middle" class="t-footer">NAVADA EDGE NETWORK — 4 Nodes | 25 Containers | 100% Docker | 2 AI Agents | 5 AI Models | MIT Open Source</text>
197
207
  </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "navada-edge-cli",
3
- "version": "2.1.1",
3
+ "version": "2.2.1",
4
4
  "description": "Interactive CLI for the NAVADA Edge Network — explore nodes, agents, Cloudflare, AI, Docker, and MCP from your terminal",
5
5
  "main": "lib/cli.js",
6
6
  "bin": {