omniwire 2.5.0 → 2.6.0

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,38 +1,20 @@
1
1
  <p align="center">
2
2
  <picture>
3
- <source media="(prefers-color-scheme: dark)" srcset="https://capsule-render.vercel.app/api?type=venom&color=0:0A0E14,50:0D1B2A,100:1B2838&height=220&section=header&text=OmniWire&fontSize=80&fontColor=59C2FF&animation=fadeIn&fontAlignY=32&desc=Multi-Agent%20Mesh%20Control%20%E2%80%94%2053%20MCP%20Tools%20%C2%B7%20A2A%20Protocol%20%C2%B7%20~80ms%20Latency&descSize=16&descColor=8B949E&descAlignY=58" />
4
- <source media="(prefers-color-scheme: light)" srcset="https://capsule-render.vercel.app/api?type=venom&color=0:E8EAED,50:D4D8DE,100:59C2FF&height=220&section=header&text=OmniWire&fontSize=80&fontColor=0A0E14&animation=fadeIn&fontAlignY=32&desc=Multi-Agent%20Mesh%20Control%20%E2%80%94%2053%20MCP%20Tools%20%C2%B7%20A2A%20Protocol%20%C2%B7%20~80ms%20Latency&descSize=16&descColor=586069&descAlignY=58" />
5
- <img alt="OmniWire" src="https://capsule-render.vercel.app/api?type=venom&color=0:0A0E14,50:0D1B2A,100:1B2838&height=220&section=header&text=OmniWire&fontSize=80&fontColor=59C2FF&animation=fadeIn&fontAlignY=32&desc=Multi-Agent%20Mesh%20Control%20%E2%80%94%2053%20MCP%20Tools%20%C2%B7%20A2A%20Protocol%20%C2%B7%20~80ms%20Latency&descSize=16&descColor=8B949E&descAlignY=58" />
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
- <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=0A0E14" alt="npm" /></a>
11
- <img src="https://img.shields.io/badge/MCP-53_tools-59C2FF?style=for-the-badge&labelColor=0A0E14" alt="tools" />
12
- <img src="https://img.shields.io/badge/A2A-protocol-00C853?style=for-the-badge&labelColor=0A0E14" alt="A2A" />
13
- <img src="https://img.shields.io/badge/latency-~80ms-FF6D00?style=for-the-badge&labelColor=0A0E14" alt="latency" />
14
- <img src="https://img.shields.io/badge/lz4-transfer-CC93E6?style=for-the-badge&labelColor=0A0E14" alt="lz4" />
15
- <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-8B949E?style=for-the-badge&labelColor=0A0E14" alt="license" /></a>
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-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
- <p align="center">
21
- <b>The infrastructure layer for AI agent swarms.</b>
22
- </p>
23
-
24
- <p align="center">
25
- 53 MCP tools &bull; Agent-to-Agent messaging &bull; Distributed task queues &bull; Capability routing<br/>
26
- AES-128-GCM SSH2 &bull; LZ4 transfers &bull; Circuit breakers &bull; Multi-path failover<br/>
27
- Session chaining &bull; Pipeline DAGs &bull; Blackboard architecture &bull; Event pub/sub
28
- </p>
29
-
30
- <br/>
31
-
32
- > **v2.5** &mdash; AES-128-GCM cipher preference, 2s keepalive, LZ4 compression, `shuf` port finder, SFTP-first reads, agent registry, blackboard, task queues, capability routing. See [changelog](#changelog).
33
-
34
- <br/>
35
-
36
18
  ---
37
19
 
38
20
  ## Quick Start
@@ -61,9 +43,9 @@ Add to your AI agent (Claude Code, Cursor, OpenCode, etc.):
61
43
  | Agents can't coordinate with each other | A2A messaging, events, semaphores |
62
44
  | Multi-step deploys need many round-trips | Pipelines chain steps in 1 call |
63
45
  | Flaky commands break agent loops | Built-in retry + assert + watch |
64
- | Long tasks block the agent | Background dispatch with task IDs |
46
+ | Long tasks block the agent | `background: true` on any tool |
65
47
  | Results lost between tool calls | Session store with `{{key}}` interpolation |
66
- | Different transfer methods for diff sizes | Auto-selects SFTP / netcat / aria2c |
48
+ | Different transfer methods for diff sizes | Auto-selects SFTP / netcat+LZ4 / aria2c |
67
49
  | SSH connections drop | Multi-path failover + circuit breaker |
68
50
 
69
51
  ---
@@ -83,9 +65,9 @@ graph TB
83
65
  direction TB
84
66
  MCP["MCP Protocol Layer<br/>stdio | SSE | REST"]
85
67
 
86
- subgraph tools["53 Tools"]
68
+ subgraph tools["55 Tools"]
87
69
  direction LR
88
- EXEC["Execution<br/>exec run batch<br/>broadcast pipeline"]
70
+ EXEC["Execution<br/>exec run batch<br/>broadcast pipeline bg"]
89
71
  AGENT["Agentic<br/>store watch task<br/>a2a events locks"]
90
72
  FILES["Files & Deploy<br/>read write transfer<br/>deploy find"]
91
73
  SYS["System & DevOps<br/>docker services<br/>cron env git syslog"]
@@ -95,7 +77,7 @@ graph TB
95
77
  subgraph engine["Core Engine"]
96
78
  direction LR
97
79
  POOL["SSH2 Pool<br/>persistent compressed<br/>circuit breaker"]
98
- XFER["Transfer Engine<br/>SFTP netcat+gzip<br/>aria2c 16-conn"]
80
+ XFER["Transfer Engine<br/>SFTP netcat+LZ4<br/>aria2c 16-conn"]
99
81
  CSYNC["Sync Engine<br/>PostgreSQL XChaCha20<br/>parallel reconcile"]
100
82
  end
101
83
  end
@@ -117,13 +99,13 @@ graph TB
117
99
  POOL -->|"local exec"| N4
118
100
  CSYNC --> DB
119
101
 
120
- style omniwire fill:#0A0E14,stroke:#59C2FF,stroke-width:2px,color:#C6D0E1
121
- style clients fill:#1A1F2E,stroke:#91B362,stroke-width:1px,color:#C6D0E1
122
- style mesh fill:#1A1F2E,stroke:#E6B450,stroke-width:1px,color:#C6D0E1
123
- style tools fill:#141922,stroke:#59C2FF,stroke-width:1px,color:#C6D0E1
124
- style engine fill:#141922,stroke:#CC93E6,stroke-width:1px,color:#C6D0E1
125
- style MCP fill:#1A1F2E,stroke:#59C2FF,color:#59C2FF
126
- style DB fill:#1A1F2E,stroke:#CC93E6,color:#CC93E6
102
+ style omniwire fill:#0D1117,stroke:#59C2FF,stroke-width:2px,color:#C6D0E1
103
+ style clients fill:#161B22,stroke:#91B362,stroke-width:1px,color:#C6D0E1
104
+ style mesh fill:#161B22,stroke:#E6B450,stroke-width:1px,color:#C6D0E1
105
+ style tools fill:#0D1117,stroke:#59C2FF,stroke-width:1px,color:#C6D0E1
106
+ style engine fill:#0D1117,stroke:#CC93E6,stroke-width:1px,color:#C6D0E1
107
+ style MCP fill:#162B44,stroke:#59C2FF,color:#59C2FF
108
+ style DB fill:#162B44,stroke:#CC93E6,color:#CC93E6
127
109
  ```
128
110
 
129
111
  ---
@@ -141,6 +123,7 @@ omniwire_run multi-line script (compact UI)
141
123
  omniwire_batch N commands, 1 tool call, chaining
142
124
  omniwire_broadcast parallel across all nodes
143
125
  omniwire_pipeline multi-step DAG with data flow
126
+ omniwire_bg poll/list background tasks
144
127
  ```
145
128
 
146
129
  </td>
@@ -164,7 +147,7 @@ omniwire_workflow reusable named DAGs
164
147
  ### Adaptive File Transfer
165
148
  ```
166
149
  < 10 MB SFTP native, 80ms
167
- 10M-1GB netcat+gzip compressed, 100ms
150
+ 10M-1GB netcat+LZ4 compressed, 100ms
168
151
  > 1 GB aria2c 16-parallel, max speed
169
152
  ```
170
153
 
@@ -178,9 +161,9 @@ Connected --> Health Ping (30s, parallel)
178
161
  Failure --> Multi-path Failover
179
162
  | WireGuard -> Tailscale -> Public IP
180
163
  |
181
- +--> Retry (500ms -> 1s -> ... -> 15s)
164
+ +--> Retry (300ms -> 600ms -> ... -> 10s)
182
165
  |
183
- 3 fails --> Circuit OPEN (20s) -> Auto-recover
166
+ 3 fails --> Circuit OPEN (15s) -> Auto-recover
184
167
  ```
185
168
 
186
169
  </td>
@@ -188,6 +171,18 @@ Failure --> Multi-path Failover
188
171
  <tr>
189
172
  <td>
190
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
+
191
186
  ### Agentic Chaining
192
187
  ```
193
188
  exec(store_as="ip") store result
@@ -198,38 +193,26 @@ exec(retry=3, assert="ok") resilient
198
193
  watch(assert="ready") poll until
199
194
  ```
200
195
 
201
- </td>
202
- <td>
203
-
204
- ### CyberSync + CyberBase
205
- ```
206
- Nodes --push--> PostgreSQL (cyberbase)
207
- | |
208
- | XChaCha20-Poly1305
209
- | encrypted at rest
210
- |
211
- +--mirror--> Obsidian Vault
212
- |
213
- Obsidian Sync (cloud)
214
- ```
215
-
216
196
  </td>
217
197
  </tr>
218
198
  </table>
219
199
 
220
200
  ---
221
201
 
222
- ## All 53 Tools
202
+ ## All 55 Tools
203
+
204
+ > **Every tool** supports `background: true` -- returns a task ID immediately. Poll with `omniwire_bg`.
223
205
 
224
- ### Execution (5)
206
+ ### Execution (6)
225
207
 
226
208
  | Tool | Description |
227
209
  |------|-------------|
228
- | `omniwire_exec` | Run command on any node. `retry`, `assert`, `store_as`, `format:"json"`, `{{key}}` interpolation. |
210
+ | `omniwire_exec` | Run command on any node. `retry`, `assert`, `store_as`, `format:"json"`, `{{key}}`, `via_vpn` for anonymous scanning. |
229
211
  | `omniwire_run` | Execute multi-line scripts via temp file. Keeps tool call UI clean. |
230
212
  | `omniwire_batch` | N commands in 1 call. Chaining with `{{prev}}`, `abort_on_fail`, parallel or sequential. |
231
213
  | `omniwire_broadcast` | Execute on all nodes simultaneously. JSON format support. |
232
214
  | `omniwire_pipeline` | Multi-step DAG. `{{prev}}`/`{{stepN}}` interpolation, per-step error handling, cross-node. |
215
+ | `omniwire_bg` | List, poll, or retrieve results from background tasks. |
233
216
 
234
217
  ### Agentic / A2A (13)
235
218
 
@@ -284,10 +267,11 @@ Nodes --push--> PostgreSQL (cyberbase)
284
267
  | `omniwire_git` | Git commands on repos on any node |
285
268
  | `omniwire_syslog` | Query journalctl with filters |
286
269
 
287
- ### Network & Misc (5)
270
+ ### Network & VPN (6)
288
271
 
289
272
  | Tool | Description |
290
273
  |------|-------------|
274
+ | `omniwire_vpn` | Manage VPN (Mullvad/OpenVPN/WireGuard/Tailscale). Split-tunnel + full-node modes. Mesh stays connected. |
291
275
  | `omniwire_port_forward` | Create/list/close SSH tunnels |
292
276
  | `omniwire_open_browser` | Open URL in browser on a node |
293
277
  | `omniwire_shell` | Persistent PTY session (preserves cwd/env) |
@@ -313,30 +297,33 @@ Nodes --push--> PostgreSQL (cyberbase)
313
297
 
314
298
  ## Performance
315
299
 
316
- | Operation | Latency | v2.5 Optimization |
317
- |-----------|---------|-------------------|
318
- | **Command exec** | **~80ms** | AES-128-GCM cipher, persistent SSH2 channel, zero-fork `:` ping |
319
- | **Mesh status** | **~100ms** | Parallel probes, 5s cache, single `/proc` read (no pipes) |
320
- | **File read (<1MB)** | **~60ms** | SFTP-first path (skips `cat` shell fork) |
321
- | **Transfer (10MB)** | **~120ms** | LZ4 compression (10x faster than gzip), 50ms bind delay |
322
- | **Transfer (1GB)** | **~8s** | aria2c 16-connection parallel, 150ms server startup |
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 |
323
307
  | **Pipeline (5 steps)** | **~400ms** | `{{prev}}` interpolation, no extra tool calls |
324
- | **Health check (all)** | **~90ms** | Parallel Promise.allSettled, structured JSON |
308
+ | **Health check (all)** | **~90ms** | Parallel Promise.allSettled |
325
309
  | **A2A message** | **~85ms** | File-append queue, atomic dequeue |
326
- | **Config push** | **~150ms** | Parallel deploy + Obsidian mirror |
327
- | **Reconnect** | **~300ms** | 300ms initial delay (was 500ms), 2s keepalive detection |
328
-
329
- **Optimizations in v2.5:**
330
- - **Cipher**: AES-128-GCM (AES-NI accelerated) preferred over default negotiation
331
- - **Key exchange**: curve25519-sha256 preferred (fastest modern KEX)
332
- - **Keepalive**: 2s interval, 2 retries = 4s dead detection (was 6s)
333
- - **Port finder**: `shuf` (pure bash) replaces `python3 -c socket` (saves ~30ms per transfer)
334
- - **Compression**: LZ4-1 for transfers (10x faster than gzip, ~same ratio for mixed data)
335
- - **Buffer**: Array push + join replaces string concatenation (O(n) vs O(n^2) for large outputs)
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)
336
321
  - **Status**: Single `/proc` read replaces multiple piped commands
337
- - **Health ping**: `:` builtin replaces `true` (no hash lookup, no fork)
338
- - **Reads**: SFTP subsystem tried first, falls back to `cat` only on failure
339
- - **Circuit breaker**: 15s recovery (was 20s), 10s reconnect cap (was 15s)
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>
340
327
 
341
328
  ---
342
329
 
@@ -348,7 +335,7 @@ Nodes --push--> PostgreSQL (cyberbase)
348
335
  - XChaCha20-Poly1305 at-rest encryption for synced configs
349
336
  - 2MB output guard prevents memory exhaustion
350
337
  - 4KB auto-truncation prevents context window bloat
351
- - Circuit breaker with 20s auto-recovery isolates failing nodes
338
+ - Circuit breaker isolates failing nodes
352
339
  - CORS restricted to localhost on REST API
353
340
 
354
341
  ---
@@ -388,56 +375,59 @@ Create `~/.omniwire/mesh.json`:
388
375
  ## Changelog
389
376
 
390
377
  <details>
391
- <summary><b>v2.5.0 -- Performance Overhaul, A2A Protocol Expansion</b></summary>
378
+ <summary><b>v2.6.0 -- VPN Integration, Mesh-Safe Anonymous Scanning</b></summary>
392
379
 
393
- **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.
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.
394
381
 
395
- **4 new A2A tools** (49 -> 53): agent_registry (capability discovery), blackboard (swarm collaboration), task_queue (distributed work), capability (node routing).
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.
396
383
 
397
- **Connectivity**: Always-on 2s keepalive with 4s dead detection. 5s connect timeout. 10s reconnect cap. 15s circuit recovery.
384
+ **Modes**: `connect` (split-tunnel), `full-on` (node-wide with mesh exclusions), `rotate` (new exit IP), `status`, `list`, `ip`.
398
385
 
399
386
  </details>
400
387
 
401
388
  <details>
402
- <summary><b>v2.4.0 -- Agentic Loop, A2A, Multi-Agent Orchestration</b></summary>
389
+ <summary><b>v2.5.1 -- Universal Background Dispatch</b></summary>
390
+
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.
403
392
 
404
- **9 new agentic tools** (40 -> 49): store, pipeline, watch, healthcheck, agent_task, a2a_message, semaphore, event, workflow
393
+ </details>
405
394
 
406
- **Agentic upgrades to existing tools**: `format:"json"`, `retry`, `assert`, `store_as`, `{{key}}` interpolation on exec/broadcast/batch
395
+ <details>
396
+ <summary><b>v2.5.0 -- Performance Overhaul, A2A Protocol Expansion</b></summary>
407
397
 
408
- **Dynamic response processing**: Structured JSON output, step-to-step data flow, session result store, abort-on-fail chains
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).
409
401
 
410
402
  </details>
411
403
 
412
404
  <details>
413
- <summary><b>v2.3.0 -- Compact Output, Speed, New Tools</b></summary>
405
+ <summary><b>v2.4.0 -- Agentic Loop, A2A, Multi-Agent Orchestration</b></summary>
414
406
 
415
- Output overhaul (auto-truncation, smart time, tabular multi-node). Performance (parallel health pings, 3s keepalive, 20s circuit breaker, 6s connect timeout). 6 new DevOps tools (cron, env, network, clipboard, git, syslog).
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.
416
408
 
417
409
  </details>
418
410
 
419
411
  <details>
420
- <summary><b>v2.2.1 -- Security & Bug Fixes</b></summary>
412
+ <summary><b>v2.3.0 -- Compact Output, Speed, New Tools</b></summary>
421
413
 
422
- Fixed script-only exec, shell race condition, transfer size guard, CORS restriction, input validation.
414
+ Output overhaul (auto-truncation, smart time, tabular multi-node). 6 new DevOps tools (cron, env, network, clipboard, git, syslog).
423
415
 
424
416
  </details>
425
417
 
426
418
  <details>
427
- <summary><b>v2.1.0 -- Multi-Path Failover & Performance</b></summary>
419
+ <summary><b>v2.2.1 -- v2.1.0</b></summary>
428
420
 
429
- Multi-path SSH (WireGuard/Tailscale/Public), SSH key caching, CyberBase integration, VaultBridge Obsidian mirror.
421
+ Security fixes, multi-path SSH failover, CyberBase integration, VaultBridge Obsidian mirror.
430
422
 
431
423
  </details>
432
424
 
433
425
  ---
434
426
 
435
- ## Architecture
436
-
437
427
  ```
438
428
  omniwire/
439
429
  src/
440
- mcp/ MCP server (53 tools, 3 transports)
430
+ mcp/ MCP server (55 tools, 3 transports)
441
431
  nodes/ SSH2 pool, transfer engine, PTY, tunnels
442
432
  sync/ CyberSync + CyberBase (PostgreSQL, Obsidian, encryption)
443
433
  protocol/ Mesh config, types, path parsing
@@ -445,23 +435,20 @@ omniwire/
445
435
  ui/ Terminal formatting
446
436
  ```
447
437
 
448
- ## Requirements
449
-
450
- - **Node.js** >= 20
451
- - **SSH access** to remote nodes (key-based auth)
452
- - **PostgreSQL** (only for CyberSync)
453
- - **WireGuard + Tailscale** recommended (multi-path failover)
438
+ **Requirements:** Node.js >= 20 &bull; SSH key access to nodes &bull; PostgreSQL (CyberSync only) &bull; WireGuard recommended
454
439
 
455
440
  ---
456
441
 
457
- <p align="center">
458
- <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-E6B450?style=flat-square&labelColor=0A0E14" alt="MIT License" /></a>
459
- </p>
442
+ <br/>
443
+
444
+ <div align="center">
445
+ <sub>Built for the machines that build for us.</sub>
446
+ </div>
460
447
 
461
448
  <p align="center">
462
449
  <picture>
463
- <source media="(prefers-color-scheme: dark)" srcset="https://capsule-render.vercel.app/api?type=waving&color=0:0A0E14,50:1A1F2E,100:59C2FF&height=100&section=footer" />
464
- <source media="(prefers-color-scheme: light)" srcset="https://capsule-render.vercel.app/api?type=waving&color=0:E8EAED,50:D4D8DE,100:59C2FF&height=100&section=footer" />
465
- <img alt="footer" src="https://capsule-render.vercel.app/api?type=waving&color=0:0A0E14,50:1A1F2E,100:59C2FF&height=100&section=footer" />
450
+ <source media="(prefers-color-scheme: dark)" srcset="https://capsule-render.vercel.app/api?type=waving&color=0:59C2FF,50:162B44,100:0D1117&height=120&section=footer" />
451
+ <source media="(prefers-color-scheme: light)" srcset="https://capsule-render.vercel.app/api?type=waving&color=0:59C2FF,50:B8CCE0,100:FFFFFF&height=120&section=footer" />
452
+ <img alt="footer" src="https://capsule-render.vercel.app/api?type=waving&color=0:59C2FF,50:162B44,100:0D1117&height=120&section=footer" />
466
453
  </picture>
467
454
  </p>
@@ -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)">&#x26A1;</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">&#x26A1;</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>