omniwire 2.5.1 → 2.6.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 +80 -109
- package/assets/banner-dark.svg +82 -0
- package/assets/banner-light.svg +75 -0
- package/dist/mcp/server.js +345 -4
- package/dist/mcp/server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,49 +1,20 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<picture>
|
|
3
|
-
<source media="(prefers-color-scheme: dark)" srcset="
|
|
4
|
-
<source media="(prefers-color-scheme: light)" srcset="
|
|
5
|
-
<img alt="OmniWire" src="
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/banner-dark.svg" />
|
|
4
|
+
<source media="(prefers-color-scheme: light)" srcset="assets/banner-light.svg" />
|
|
5
|
+
<img alt="OmniWire — The infrastructure layer for AI agent swarms" src="assets/banner-dark.svg" width="900" />
|
|
6
6
|
</picture>
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
10
|
<a href="https://www.npmjs.com/package/omniwire"><img src="https://img.shields.io/npm/v/omniwire?style=for-the-badge&logo=npm&color=CB3837&labelColor=0D1117" alt="npm" /></a>
|
|
11
|
-
<img src="https://img.shields.io/badge/MCP_Tools-
|
|
12
|
-
<img src="https://img.shields.io/badge/A2A-Protocol-00C853?style=for-the-badge&
|
|
13
|
-
<img src="https://img.shields.io/badge/Latency-~80ms-FF6D00?style=for-the-badge&
|
|
14
|
-
<img src="https://img.shields.io/badge/
|
|
15
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/
|
|
11
|
+
<img src="https://img.shields.io/badge/MCP_Tools-55-59C2FF?style=for-the-badge&labelColor=0D1117" alt="tools" />
|
|
12
|
+
<img src="https://img.shields.io/badge/A2A-Protocol-00C853?style=for-the-badge&labelColor=0D1117" alt="A2A" />
|
|
13
|
+
<img src="https://img.shields.io/badge/Latency-~80ms-FF6D00?style=for-the-badge&labelColor=0D1117" alt="latency" />
|
|
14
|
+
<img src="https://img.shields.io/badge/Background-Dispatch-CC93E6?style=for-the-badge&labelColor=0D1117" alt="background" />
|
|
15
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/GPL--3.0-license-8B949E?style=for-the-badge&labelColor=0D1117" alt="license" /></a>
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
|
-
<br/>
|
|
19
|
-
|
|
20
|
-
<div align="center">
|
|
21
|
-
|
|
22
|
-
**54 MCP tools** · **Agent-to-Agent messaging** · **Distributed task queues** · **Capability routing**
|
|
23
|
-
|
|
24
|
-
AES-128-GCM SSH2 · LZ4 transfers · Circuit breakers · Multi-path failover · Pipeline DAGs · Blackboard architecture
|
|
25
|
-
|
|
26
|
-
</div>
|
|
27
|
-
|
|
28
|
-
<br/>
|
|
29
|
-
|
|
30
|
-
<div align="center">
|
|
31
|
-
<table>
|
|
32
|
-
<tr>
|
|
33
|
-
<td align="center">⚡ <b>~80ms</b><br/><sub>exec latency</sub></td>
|
|
34
|
-
<td align="center">🔧 <b>54</b><br/><sub>MCP tools</sub></td>
|
|
35
|
-
<td align="center">🔗 <b>A2A</b><br/><sub>agent protocol</sub></td>
|
|
36
|
-
<td align="center">📦 <b>LZ4</b><br/><sub>fast transfer</sub></td>
|
|
37
|
-
<td align="center">🛡️ <b>AES-128</b><br/><sub>GCM cipher</sub></td>
|
|
38
|
-
<td align="center">🔄 <b>300ms</b><br/><sub>reconnect</sub></td>
|
|
39
|
-
</tr>
|
|
40
|
-
</table>
|
|
41
|
-
</div>
|
|
42
|
-
|
|
43
|
-
> **v2.5** — AES-128-GCM cipher, 2s keepalive, LZ4 compression, SFTP-first reads, agent registry, blackboard, task queues, capability routing. [Changelog →](#changelog)
|
|
44
|
-
|
|
45
|
-
<br/>
|
|
46
|
-
|
|
47
18
|
---
|
|
48
19
|
|
|
49
20
|
## Quick Start
|
|
@@ -72,9 +43,9 @@ Add to your AI agent (Claude Code, Cursor, OpenCode, etc.):
|
|
|
72
43
|
| Agents can't coordinate with each other | A2A messaging, events, semaphores |
|
|
73
44
|
| Multi-step deploys need many round-trips | Pipelines chain steps in 1 call |
|
|
74
45
|
| Flaky commands break agent loops | Built-in retry + assert + watch |
|
|
75
|
-
| Long tasks block the agent |
|
|
46
|
+
| Long tasks block the agent | `background: true` on any tool |
|
|
76
47
|
| Results lost between tool calls | Session store with `{{key}}` interpolation |
|
|
77
|
-
| Different transfer methods for diff sizes | Auto-selects SFTP / netcat / aria2c |
|
|
48
|
+
| Different transfer methods for diff sizes | Auto-selects SFTP / netcat+LZ4 / aria2c |
|
|
78
49
|
| SSH connections drop | Multi-path failover + circuit breaker |
|
|
79
50
|
|
|
80
51
|
---
|
|
@@ -94,9 +65,9 @@ graph TB
|
|
|
94
65
|
direction TB
|
|
95
66
|
MCP["MCP Protocol Layer<br/>stdio | SSE | REST"]
|
|
96
67
|
|
|
97
|
-
subgraph tools["
|
|
68
|
+
subgraph tools["55 Tools"]
|
|
98
69
|
direction LR
|
|
99
|
-
EXEC["Execution<br/>exec run batch<br/>broadcast pipeline"]
|
|
70
|
+
EXEC["Execution<br/>exec run batch<br/>broadcast pipeline bg"]
|
|
100
71
|
AGENT["Agentic<br/>store watch task<br/>a2a events locks"]
|
|
101
72
|
FILES["Files & Deploy<br/>read write transfer<br/>deploy find"]
|
|
102
73
|
SYS["System & DevOps<br/>docker services<br/>cron env git syslog"]
|
|
@@ -106,7 +77,7 @@ graph TB
|
|
|
106
77
|
subgraph engine["Core Engine"]
|
|
107
78
|
direction LR
|
|
108
79
|
POOL["SSH2 Pool<br/>persistent compressed<br/>circuit breaker"]
|
|
109
|
-
XFER["Transfer Engine<br/>SFTP netcat+
|
|
80
|
+
XFER["Transfer Engine<br/>SFTP netcat+LZ4<br/>aria2c 16-conn"]
|
|
110
81
|
CSYNC["Sync Engine<br/>PostgreSQL XChaCha20<br/>parallel reconcile"]
|
|
111
82
|
end
|
|
112
83
|
end
|
|
@@ -152,6 +123,7 @@ omniwire_run multi-line script (compact UI)
|
|
|
152
123
|
omniwire_batch N commands, 1 tool call, chaining
|
|
153
124
|
omniwire_broadcast parallel across all nodes
|
|
154
125
|
omniwire_pipeline multi-step DAG with data flow
|
|
126
|
+
omniwire_bg poll/list background tasks
|
|
155
127
|
```
|
|
156
128
|
|
|
157
129
|
</td>
|
|
@@ -175,7 +147,7 @@ omniwire_workflow reusable named DAGs
|
|
|
175
147
|
### Adaptive File Transfer
|
|
176
148
|
```
|
|
177
149
|
< 10 MB SFTP native, 80ms
|
|
178
|
-
10M-1GB netcat+
|
|
150
|
+
10M-1GB netcat+LZ4 compressed, 100ms
|
|
179
151
|
> 1 GB aria2c 16-parallel, max speed
|
|
180
152
|
```
|
|
181
153
|
|
|
@@ -189,9 +161,9 @@ Connected --> Health Ping (30s, parallel)
|
|
|
189
161
|
Failure --> Multi-path Failover
|
|
190
162
|
| WireGuard -> Tailscale -> Public IP
|
|
191
163
|
|
|
|
192
|
-
+--> Retry (
|
|
164
|
+
+--> Retry (300ms -> 600ms -> ... -> 10s)
|
|
193
165
|
|
|
|
194
|
-
3 fails --> Circuit OPEN (
|
|
166
|
+
3 fails --> Circuit OPEN (15s) -> Auto-recover
|
|
195
167
|
```
|
|
196
168
|
|
|
197
169
|
</td>
|
|
@@ -199,6 +171,18 @@ Failure --> Multi-path Failover
|
|
|
199
171
|
<tr>
|
|
200
172
|
<td>
|
|
201
173
|
|
|
174
|
+
### Background Dispatch
|
|
175
|
+
```
|
|
176
|
+
# Any tool supports background: true
|
|
177
|
+
exec(background=true) -> "bg-abc123"
|
|
178
|
+
bg(action="poll", id=..) -> "RUNNING (3.2s)"
|
|
179
|
+
bg(action="result", id=..) -> full output
|
|
180
|
+
bg(action="list") -> all tasks + status
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
</td>
|
|
184
|
+
<td>
|
|
185
|
+
|
|
202
186
|
### Agentic Chaining
|
|
203
187
|
```
|
|
204
188
|
exec(store_as="ip") store result
|
|
@@ -209,36 +193,21 @@ exec(retry=3, assert="ok") resilient
|
|
|
209
193
|
watch(assert="ready") poll until
|
|
210
194
|
```
|
|
211
195
|
|
|
212
|
-
</td>
|
|
213
|
-
<td>
|
|
214
|
-
|
|
215
|
-
### CyberSync + CyberBase
|
|
216
|
-
```
|
|
217
|
-
Nodes --push--> PostgreSQL (cyberbase)
|
|
218
|
-
| |
|
|
219
|
-
| XChaCha20-Poly1305
|
|
220
|
-
| encrypted at rest
|
|
221
|
-
|
|
|
222
|
-
+--mirror--> Obsidian Vault
|
|
223
|
-
|
|
|
224
|
-
Obsidian Sync (cloud)
|
|
225
|
-
```
|
|
226
|
-
|
|
227
196
|
</td>
|
|
228
197
|
</tr>
|
|
229
198
|
</table>
|
|
230
199
|
|
|
231
200
|
---
|
|
232
201
|
|
|
233
|
-
## All
|
|
202
|
+
## All 55 Tools
|
|
234
203
|
|
|
235
|
-
> **Every tool** supports `background: true`
|
|
204
|
+
> **Every tool** supports `background: true` -- returns a task ID immediately. Poll with `omniwire_bg`.
|
|
236
205
|
|
|
237
206
|
### Execution (6)
|
|
238
207
|
|
|
239
208
|
| Tool | Description |
|
|
240
209
|
|------|-------------|
|
|
241
|
-
| `omniwire_exec` | Run command on any node. `retry`, `assert`, `store_as`, `format:"json"`, `{{key}}`
|
|
210
|
+
| `omniwire_exec` | Run command on any node. `retry`, `assert`, `store_as`, `format:"json"`, `{{key}}`, `via_vpn` for anonymous scanning. |
|
|
242
211
|
| `omniwire_run` | Execute multi-line scripts via temp file. Keeps tool call UI clean. |
|
|
243
212
|
| `omniwire_batch` | N commands in 1 call. Chaining with `{{prev}}`, `abort_on_fail`, parallel or sequential. |
|
|
244
213
|
| `omniwire_broadcast` | Execute on all nodes simultaneously. JSON format support. |
|
|
@@ -298,10 +267,11 @@ Nodes --push--> PostgreSQL (cyberbase)
|
|
|
298
267
|
| `omniwire_git` | Git commands on repos on any node |
|
|
299
268
|
| `omniwire_syslog` | Query journalctl with filters |
|
|
300
269
|
|
|
301
|
-
### Network &
|
|
270
|
+
### Network & VPN (6)
|
|
302
271
|
|
|
303
272
|
| Tool | Description |
|
|
304
273
|
|------|-------------|
|
|
274
|
+
| `omniwire_vpn` | Manage VPN (Mullvad/OpenVPN/WireGuard/Tailscale). Split-tunnel + full-node modes. Mesh stays connected. |
|
|
305
275
|
| `omniwire_port_forward` | Create/list/close SSH tunnels |
|
|
306
276
|
| `omniwire_open_browser` | Open URL in browser on a node |
|
|
307
277
|
| `omniwire_shell` | Persistent PTY session (preserves cwd/env) |
|
|
@@ -327,30 +297,33 @@ Nodes --push--> PostgreSQL (cyberbase)
|
|
|
327
297
|
|
|
328
298
|
## Performance
|
|
329
299
|
|
|
330
|
-
| Operation | Latency |
|
|
331
|
-
|
|
332
|
-
| **Command exec** | **~80ms** | AES-128-GCM cipher, persistent SSH2
|
|
333
|
-
| **Mesh status** | **~100ms** | Parallel probes, 5s cache, single `/proc` read
|
|
334
|
-
| **File read (<1MB)** | **~60ms** | SFTP-first
|
|
335
|
-
| **Transfer (10MB)** | **~120ms** | LZ4 compression (10x faster than gzip)
|
|
336
|
-
| **Transfer (1GB)** | **~8s** | aria2c 16-connection parallel
|
|
300
|
+
| Operation | Latency | Optimization |
|
|
301
|
+
|-----------|---------|-------------|
|
|
302
|
+
| **Command exec** | **~80ms** | AES-128-GCM cipher, persistent SSH2, zero-fork `:` ping |
|
|
303
|
+
| **Mesh status** | **~100ms** | Parallel probes, 5s cache, single `/proc` read |
|
|
304
|
+
| **File read (<1MB)** | **~60ms** | SFTP-first (skips `cat` fork) |
|
|
305
|
+
| **Transfer (10MB)** | **~120ms** | LZ4 compression (10x faster than gzip) |
|
|
306
|
+
| **Transfer (1GB)** | **~8s** | aria2c 16-connection parallel |
|
|
337
307
|
| **Pipeline (5 steps)** | **~400ms** | `{{prev}}` interpolation, no extra tool calls |
|
|
338
|
-
| **Health check (all)** | **~90ms** | Parallel Promise.allSettled
|
|
308
|
+
| **Health check (all)** | **~90ms** | Parallel Promise.allSettled |
|
|
339
309
|
| **A2A message** | **~85ms** | File-append queue, atomic dequeue |
|
|
340
|
-
| **
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
- **
|
|
346
|
-
- **
|
|
347
|
-
- **
|
|
348
|
-
- **
|
|
349
|
-
- **
|
|
310
|
+
| **Reconnect** | **~300ms** | 300ms initial, 2s keepalive, 15s circuit breaker |
|
|
311
|
+
|
|
312
|
+
<details>
|
|
313
|
+
<summary><b>Optimization details</b></summary>
|
|
314
|
+
|
|
315
|
+
- **Cipher**: AES-128-GCM (AES-NI hardware accelerated)
|
|
316
|
+
- **Key exchange**: curve25519-sha256 (fastest modern KEX)
|
|
317
|
+
- **Keepalive**: 2s interval, 2 retries = 4s dead detection
|
|
318
|
+
- **Port finder**: `shuf` (pure bash) replaces `python3 -c socket` (-30ms)
|
|
319
|
+
- **Compression**: LZ4-1 for transfers (10x faster than gzip)
|
|
320
|
+
- **Buffer**: Array push + join (O(n) vs O(n^2) string concat)
|
|
350
321
|
- **Status**: Single `/proc` read replaces multiple piped commands
|
|
351
|
-
- **Health ping**: `:` builtin
|
|
352
|
-
- **Reads**: SFTP
|
|
353
|
-
- **Circuit breaker**: 15s recovery
|
|
322
|
+
- **Health ping**: `:` builtin (no hash lookup, no fork)
|
|
323
|
+
- **Reads**: SFTP tried first, `cat` fallback only on failure
|
|
324
|
+
- **Circuit breaker**: 15s recovery, 10s reconnect cap
|
|
325
|
+
|
|
326
|
+
</details>
|
|
354
327
|
|
|
355
328
|
---
|
|
356
329
|
|
|
@@ -362,7 +335,7 @@ Nodes --push--> PostgreSQL (cyberbase)
|
|
|
362
335
|
- XChaCha20-Poly1305 at-rest encryption for synced configs
|
|
363
336
|
- 2MB output guard prevents memory exhaustion
|
|
364
337
|
- 4KB auto-truncation prevents context window bloat
|
|
365
|
-
- Circuit breaker
|
|
338
|
+
- Circuit breaker isolates failing nodes
|
|
366
339
|
- CORS restricted to localhost on REST API
|
|
367
340
|
|
|
368
341
|
---
|
|
@@ -402,56 +375,59 @@ Create `~/.omniwire/mesh.json`:
|
|
|
402
375
|
## Changelog
|
|
403
376
|
|
|
404
377
|
<details>
|
|
405
|
-
<summary><b>v2.
|
|
378
|
+
<summary><b>v2.6.0 -- VPN Integration, Mesh-Safe Anonymous Scanning</b></summary>
|
|
406
379
|
|
|
407
|
-
|
|
380
|
+
**`omniwire_vpn`** tool: Mullvad, OpenVPN, WireGuard, Tailscale. Split-tunnel (per-command) + full-node modes. Mesh connectivity (wg0, wg1, Tailscale) always preserved via route exclusions and network namespace isolation.
|
|
408
381
|
|
|
409
|
-
|
|
382
|
+
**`via_vpn` on exec**: Route any command through VPN using Linux network namespaces. Only the command's traffic goes through VPN — SSH/WireGuard mesh stays on real interface.
|
|
410
383
|
|
|
411
|
-
**
|
|
384
|
+
**Modes**: `connect` (split-tunnel), `full-on` (node-wide with mesh exclusions), `rotate` (new exit IP), `status`, `list`, `ip`.
|
|
412
385
|
|
|
413
386
|
</details>
|
|
414
387
|
|
|
415
388
|
<details>
|
|
416
|
-
<summary><b>v2.
|
|
389
|
+
<summary><b>v2.5.1 -- Universal Background Dispatch</b></summary>
|
|
417
390
|
|
|
418
|
-
|
|
391
|
+
**`background: true`** auto-injected into all 55 tools via server-level wrapper. Returns task ID, poll with `omniwire_bg`. New `omniwire_bg` tool for list/poll/result.
|
|
419
392
|
|
|
420
|
-
|
|
393
|
+
</details>
|
|
394
|
+
|
|
395
|
+
<details>
|
|
396
|
+
<summary><b>v2.5.0 -- Performance Overhaul, A2A Protocol Expansion</b></summary>
|
|
421
397
|
|
|
422
|
-
**
|
|
398
|
+
**Performance**: AES-128-GCM cipher, curve25519-sha256 KEX, 2s keepalive, LZ4 transfers (10x faster), `shuf` port finder (-30ms), SFTP-first reads, array buffer concat, `/proc` single-read status, `:` builtin health ping, 300ms reconnect start, 15s circuit breaker.
|
|
399
|
+
|
|
400
|
+
**4 new A2A tools** (49 -> 53): agent_registry (capability discovery), blackboard (swarm collaboration), task_queue (distributed work), capability (node routing).
|
|
423
401
|
|
|
424
402
|
</details>
|
|
425
403
|
|
|
426
404
|
<details>
|
|
427
|
-
<summary><b>v2.
|
|
405
|
+
<summary><b>v2.4.0 -- Agentic Loop, A2A, Multi-Agent Orchestration</b></summary>
|
|
428
406
|
|
|
429
|
-
|
|
407
|
+
9 new agentic tools (40 -> 49): store, pipeline, watch, healthcheck, agent_task, a2a_message, semaphore, event, workflow. Agentic upgrades: `format:"json"`, `retry`, `assert`, `store_as`, `{{key}}` interpolation.
|
|
430
408
|
|
|
431
409
|
</details>
|
|
432
410
|
|
|
433
411
|
<details>
|
|
434
|
-
<summary><b>v2.
|
|
412
|
+
<summary><b>v2.3.0 -- Compact Output, Speed, New Tools</b></summary>
|
|
435
413
|
|
|
436
|
-
|
|
414
|
+
Output overhaul (auto-truncation, smart time, tabular multi-node). 6 new DevOps tools (cron, env, network, clipboard, git, syslog).
|
|
437
415
|
|
|
438
416
|
</details>
|
|
439
417
|
|
|
440
418
|
<details>
|
|
441
|
-
<summary><b>v2.1
|
|
419
|
+
<summary><b>v2.2.1 -- v2.1.0</b></summary>
|
|
442
420
|
|
|
443
|
-
|
|
421
|
+
Security fixes, multi-path SSH failover, CyberBase integration, VaultBridge Obsidian mirror.
|
|
444
422
|
|
|
445
423
|
</details>
|
|
446
424
|
|
|
447
425
|
---
|
|
448
426
|
|
|
449
|
-
## Architecture
|
|
450
|
-
|
|
451
427
|
```
|
|
452
428
|
omniwire/
|
|
453
429
|
src/
|
|
454
|
-
mcp/ MCP server (
|
|
430
|
+
mcp/ MCP server (55 tools, 3 transports)
|
|
455
431
|
nodes/ SSH2 pool, transfer engine, PTY, tunnels
|
|
456
432
|
sync/ CyberSync + CyberBase (PostgreSQL, Obsidian, encryption)
|
|
457
433
|
protocol/ Mesh config, types, path parsing
|
|
@@ -459,12 +435,7 @@ omniwire/
|
|
|
459
435
|
ui/ Terminal formatting
|
|
460
436
|
```
|
|
461
437
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
- **Node.js** >= 20
|
|
465
|
-
- **SSH access** to remote nodes (key-based auth)
|
|
466
|
-
- **PostgreSQL** (only for CyberSync)
|
|
467
|
-
- **WireGuard + Tailscale** recommended (multi-path failover)
|
|
438
|
+
**Requirements:** Node.js >= 20 • SSH key access to nodes • PostgreSQL (CyberSync only) • WireGuard recommended
|
|
468
439
|
|
|
469
440
|
---
|
|
470
441
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<svg width="900" height="220" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" style="stop-color:#0D1117"/>
|
|
5
|
+
<stop offset="40%" style="stop-color:#0D1B2A"/>
|
|
6
|
+
<stop offset="70%" style="stop-color:#162B44"/>
|
|
7
|
+
<stop offset="100%" style="stop-color:#1A3A5C"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<linearGradient id="textGrad" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
10
|
+
<stop offset="0%" style="stop-color:#59C2FF"/>
|
|
11
|
+
<stop offset="50%" style="stop-color:#7DD3FC"/>
|
|
12
|
+
<stop offset="100%" style="stop-color:#59C2FF"/>
|
|
13
|
+
</linearGradient>
|
|
14
|
+
<filter id="glow">
|
|
15
|
+
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
16
|
+
<feMerge>
|
|
17
|
+
<feMergeNode in="blur"/>
|
|
18
|
+
<feMergeNode in="SourceGraphic"/>
|
|
19
|
+
</feMerge>
|
|
20
|
+
</filter>
|
|
21
|
+
<filter id="softGlow">
|
|
22
|
+
<feGaussianBlur stdDeviation="8" result="blur"/>
|
|
23
|
+
<feMerge>
|
|
24
|
+
<feMergeNode in="blur"/>
|
|
25
|
+
<feMergeNode in="SourceGraphic"/>
|
|
26
|
+
</feMerge>
|
|
27
|
+
</filter>
|
|
28
|
+
</defs>
|
|
29
|
+
|
|
30
|
+
<!-- Background -->
|
|
31
|
+
<rect width="900" height="220" fill="url(#bg)" rx="0"/>
|
|
32
|
+
|
|
33
|
+
<!-- Decorative dots/grid pattern -->
|
|
34
|
+
<g opacity="0.08" fill="#59C2FF">
|
|
35
|
+
<circle cx="50" cy="30" r="1.5"/>
|
|
36
|
+
<circle cx="100" cy="50" r="1"/>
|
|
37
|
+
<circle cx="150" cy="25" r="1.5"/>
|
|
38
|
+
<circle cx="200" cy="60" r="1"/>
|
|
39
|
+
<circle cx="250" cy="35" r="1.5"/>
|
|
40
|
+
<circle cx="700" cy="40" r="1.5"/>
|
|
41
|
+
<circle cx="750" cy="55" r="1"/>
|
|
42
|
+
<circle cx="800" cy="30" r="1.5"/>
|
|
43
|
+
<circle cx="850" cy="65" r="1"/>
|
|
44
|
+
<circle cx="120" cy="180" r="1"/>
|
|
45
|
+
<circle cx="780" cy="185" r="1.5"/>
|
|
46
|
+
<circle cx="400" cy="195" r="1"/>
|
|
47
|
+
<circle cx="550" cy="190" r="1.5"/>
|
|
48
|
+
</g>
|
|
49
|
+
|
|
50
|
+
<!-- Accent line -->
|
|
51
|
+
<line x1="300" y1="105" x2="600" y2="105" stroke="#59C2FF" stroke-width="1" opacity="0.15"/>
|
|
52
|
+
|
|
53
|
+
<!-- Main title -->
|
|
54
|
+
<text x="450" y="80" font-family="'Segoe UI', system-ui, -apple-system, sans-serif" font-size="72" font-weight="700" fill="url(#textGrad)" text-anchor="middle" filter="url(#glow)">OmniWire</text>
|
|
55
|
+
|
|
56
|
+
<!-- Lightning bolt accent -->
|
|
57
|
+
<text x="248" y="78" font-size="40" fill="#59C2FF" opacity="0.6" filter="url(#softGlow)">⚡</text>
|
|
58
|
+
|
|
59
|
+
<!-- Tagline -->
|
|
60
|
+
<text x="450" y="130" font-family="'Segoe UI', system-ui, -apple-system, sans-serif" font-size="20" font-weight="400" fill="#8B949E" text-anchor="middle">The infrastructure layer for AI agent swarms</text>
|
|
61
|
+
|
|
62
|
+
<!-- Stats bar -->
|
|
63
|
+
<g font-family="'Segoe UI Mono', 'SF Mono', monospace" font-size="13" fill="#59C2FF" opacity="0.7">
|
|
64
|
+
<text x="175" y="175" text-anchor="middle">55 MCP Tools</text>
|
|
65
|
+
<text x="325" y="175" text-anchor="middle">A2A Protocol</text>
|
|
66
|
+
<text x="450" y="175" text-anchor="middle">~80ms Latency</text>
|
|
67
|
+
<text x="575" y="175" text-anchor="middle">LZ4 Transfer</text>
|
|
68
|
+
<text x="725" y="175" text-anchor="middle">AES-128-GCM</text>
|
|
69
|
+
</g>
|
|
70
|
+
|
|
71
|
+
<!-- Separator dots between stats -->
|
|
72
|
+
<g fill="#59C2FF" opacity="0.3">
|
|
73
|
+
<circle cx="250" cy="172" r="2"/>
|
|
74
|
+
<circle cx="387" cy="172" r="2"/>
|
|
75
|
+
<circle cx="513" cy="172" r="2"/>
|
|
76
|
+
<circle cx="650" cy="172" r="2"/>
|
|
77
|
+
</g>
|
|
78
|
+
|
|
79
|
+
<!-- Bottom wave -->
|
|
80
|
+
<path d="M0,200 Q150,185 300,200 Q450,215 600,200 Q750,185 900,200 L900,220 L0,220 Z" fill="#59C2FF" opacity="0.08"/>
|
|
81
|
+
<path d="M0,205 Q200,190 400,205 Q600,220 900,205 L900,220 L0,220 Z" fill="#59C2FF" opacity="0.05"/>
|
|
82
|
+
</svg>
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<svg width="900" height="220" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" style="stop-color:#FFFFFF"/>
|
|
5
|
+
<stop offset="40%" style="stop-color:#F0F4F8"/>
|
|
6
|
+
<stop offset="70%" style="stop-color:#D8E2EE"/>
|
|
7
|
+
<stop offset="100%" style="stop-color:#B8CCE0"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<linearGradient id="textGrad" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
10
|
+
<stop offset="0%" style="stop-color:#0D1117"/>
|
|
11
|
+
<stop offset="50%" style="stop-color:#1A3A5C"/>
|
|
12
|
+
<stop offset="100%" style="stop-color:#0D1117"/>
|
|
13
|
+
</linearGradient>
|
|
14
|
+
<filter id="glow">
|
|
15
|
+
<feGaussianBlur stdDeviation="2" result="blur"/>
|
|
16
|
+
<feMerge>
|
|
17
|
+
<feMergeNode in="blur"/>
|
|
18
|
+
<feMergeNode in="SourceGraphic"/>
|
|
19
|
+
</feMerge>
|
|
20
|
+
</filter>
|
|
21
|
+
</defs>
|
|
22
|
+
|
|
23
|
+
<!-- Background -->
|
|
24
|
+
<rect width="900" height="220" fill="url(#bg)" rx="0"/>
|
|
25
|
+
|
|
26
|
+
<!-- Decorative dots -->
|
|
27
|
+
<g opacity="0.1" fill="#1A3A5C">
|
|
28
|
+
<circle cx="50" cy="30" r="1.5"/>
|
|
29
|
+
<circle cx="100" cy="50" r="1"/>
|
|
30
|
+
<circle cx="150" cy="25" r="1.5"/>
|
|
31
|
+
<circle cx="200" cy="60" r="1"/>
|
|
32
|
+
<circle cx="250" cy="35" r="1.5"/>
|
|
33
|
+
<circle cx="700" cy="40" r="1.5"/>
|
|
34
|
+
<circle cx="750" cy="55" r="1"/>
|
|
35
|
+
<circle cx="800" cy="30" r="1.5"/>
|
|
36
|
+
<circle cx="850" cy="65" r="1"/>
|
|
37
|
+
<circle cx="120" cy="180" r="1"/>
|
|
38
|
+
<circle cx="780" cy="185" r="1.5"/>
|
|
39
|
+
<circle cx="400" cy="195" r="1"/>
|
|
40
|
+
<circle cx="550" cy="190" r="1.5"/>
|
|
41
|
+
</g>
|
|
42
|
+
|
|
43
|
+
<!-- Accent line -->
|
|
44
|
+
<line x1="300" y1="105" x2="600" y2="105" stroke="#1A3A5C" stroke-width="1" opacity="0.12"/>
|
|
45
|
+
|
|
46
|
+
<!-- Main title -->
|
|
47
|
+
<text x="450" y="80" font-family="'Segoe UI', system-ui, -apple-system, sans-serif" font-size="72" font-weight="700" fill="url(#textGrad)" text-anchor="middle" filter="url(#glow)">OmniWire</text>
|
|
48
|
+
|
|
49
|
+
<!-- Lightning bolt accent -->
|
|
50
|
+
<text x="248" y="78" font-size="40" fill="#1A3A5C" opacity="0.5">⚡</text>
|
|
51
|
+
|
|
52
|
+
<!-- Tagline -->
|
|
53
|
+
<text x="450" y="130" font-family="'Segoe UI', system-ui, -apple-system, sans-serif" font-size="20" font-weight="400" fill="#586069" text-anchor="middle">The infrastructure layer for AI agent swarms</text>
|
|
54
|
+
|
|
55
|
+
<!-- Stats bar -->
|
|
56
|
+
<g font-family="'Segoe UI Mono', 'SF Mono', monospace" font-size="13" fill="#1A3A5C" opacity="0.6">
|
|
57
|
+
<text x="175" y="175" text-anchor="middle">55 MCP Tools</text>
|
|
58
|
+
<text x="325" y="175" text-anchor="middle">A2A Protocol</text>
|
|
59
|
+
<text x="450" y="175" text-anchor="middle">~80ms Latency</text>
|
|
60
|
+
<text x="575" y="175" text-anchor="middle">LZ4 Transfer</text>
|
|
61
|
+
<text x="725" y="175" text-anchor="middle">AES-128-GCM</text>
|
|
62
|
+
</g>
|
|
63
|
+
|
|
64
|
+
<!-- Separator dots between stats -->
|
|
65
|
+
<g fill="#1A3A5C" opacity="0.25">
|
|
66
|
+
<circle cx="250" cy="172" r="2"/>
|
|
67
|
+
<circle cx="387" cy="172" r="2"/>
|
|
68
|
+
<circle cx="513" cy="172" r="2"/>
|
|
69
|
+
<circle cx="650" cy="172" r="2"/>
|
|
70
|
+
</g>
|
|
71
|
+
|
|
72
|
+
<!-- Bottom wave -->
|
|
73
|
+
<path d="M0,200 Q150,185 300,200 Q450,215 600,200 Q750,185 900,200 L900,220 L0,220 Z" fill="#59C2FF" opacity="0.12"/>
|
|
74
|
+
<path d="M0,205 Q200,190 400,205 Q600,220 900,205 L900,220 L0,220 Z" fill="#59C2FF" opacity="0.08"/>
|
|
75
|
+
</svg>
|