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 +99 -112
- package/assets/banner-dark.svg +82 -0
- package/assets/banner-light.svg +75 -0
- package/dist/mcp/server.js +294 -8
- package/dist/mcp/server.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,38 +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
|
-
<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=
|
|
11
|
-
<img src="https://img.shields.io/badge/
|
|
12
|
-
<img src="https://img.shields.io/badge/A2A-
|
|
13
|
-
<img src="https://img.shields.io/badge/
|
|
14
|
-
<img src="https://img.shields.io/badge/
|
|
15
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/license-
|
|
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 • Agent-to-Agent messaging • Distributed task queues • Capability routing<br/>
|
|
26
|
-
AES-128-GCM SSH2 • LZ4 transfers • Circuit breakers • Multi-path failover<br/>
|
|
27
|
-
Session chaining • Pipeline DAGs • Blackboard architecture • Event pub/sub
|
|
28
|
-
</p>
|
|
29
|
-
|
|
30
|
-
<br/>
|
|
31
|
-
|
|
32
|
-
> **v2.5** — 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 |
|
|
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["
|
|
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+
|
|
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:#
|
|
121
|
-
style clients fill:#
|
|
122
|
-
style mesh fill:#
|
|
123
|
-
style tools fill:#
|
|
124
|
-
style engine fill:#
|
|
125
|
-
style MCP fill:#
|
|
126
|
-
style DB fill:#
|
|
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+
|
|
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 (
|
|
164
|
+
+--> Retry (300ms -> 600ms -> ... -> 10s)
|
|
182
165
|
|
|
|
183
|
-
3 fails --> Circuit OPEN (
|
|
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
|
|
202
|
+
## All 55 Tools
|
|
203
|
+
|
|
204
|
+
> **Every tool** supports `background: true` -- returns a task ID immediately. Poll with `omniwire_bg`.
|
|
223
205
|
|
|
224
|
-
### Execution (
|
|
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}}`
|
|
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 &
|
|
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 |
|
|
317
|
-
|
|
318
|
-
| **Command exec** | **~80ms** | AES-128-GCM cipher, persistent SSH2
|
|
319
|
-
| **Mesh status** | **~100ms** | Parallel probes, 5s cache, single `/proc` read
|
|
320
|
-
| **File read (<1MB)** | **~60ms** | SFTP-first
|
|
321
|
-
| **Transfer (10MB)** | **~120ms** | LZ4 compression (10x faster than gzip)
|
|
322
|
-
| **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 |
|
|
323
307
|
| **Pipeline (5 steps)** | **~400ms** | `{{prev}}` interpolation, no extra tool calls |
|
|
324
|
-
| **Health check (all)** | **~90ms** | Parallel Promise.allSettled
|
|
308
|
+
| **Health check (all)** | **~90ms** | Parallel Promise.allSettled |
|
|
325
309
|
| **A2A message** | **~85ms** | File-append queue, atomic dequeue |
|
|
326
|
-
| **
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
- **
|
|
332
|
-
- **
|
|
333
|
-
- **
|
|
334
|
-
- **
|
|
335
|
-
- **
|
|
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
|
|
338
|
-
- **Reads**: SFTP
|
|
339
|
-
- **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>
|
|
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
|
|
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.
|
|
378
|
+
<summary><b>v2.6.0 -- VPN Integration, Mesh-Safe Anonymous Scanning</b></summary>
|
|
392
379
|
|
|
393
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
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.
|
|
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
|
-
|
|
393
|
+
</details>
|
|
405
394
|
|
|
406
|
-
|
|
395
|
+
<details>
|
|
396
|
+
<summary><b>v2.5.0 -- Performance Overhaul, A2A Protocol Expansion</b></summary>
|
|
407
397
|
|
|
408
|
-
**
|
|
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.
|
|
405
|
+
<summary><b>v2.4.0 -- Agentic Loop, A2A, Multi-Agent Orchestration</b></summary>
|
|
414
406
|
|
|
415
|
-
|
|
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.
|
|
412
|
+
<summary><b>v2.3.0 -- Compact Output, Speed, New Tools</b></summary>
|
|
421
413
|
|
|
422
|
-
|
|
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
|
|
419
|
+
<summary><b>v2.2.1 -- v2.1.0</b></summary>
|
|
428
420
|
|
|
429
|
-
|
|
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 (
|
|
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
|
-
|
|
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 • SSH key access to nodes • PostgreSQL (CyberSync only) • WireGuard recommended
|
|
454
439
|
|
|
455
440
|
---
|
|
456
441
|
|
|
457
|
-
<
|
|
458
|
-
|
|
459
|
-
|
|
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:
|
|
464
|
-
<source media="(prefers-color-scheme: light)" srcset="https://capsule-render.vercel.app/api?type=waving&color=0:
|
|
465
|
-
<img alt="footer" src="https://capsule-render.vercel.app/api?type=waving&color=0:
|
|
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§ion=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§ion=footer" />
|
|
452
|
+
<img alt="footer" src="https://capsule-render.vercel.app/api?type=waving&color=0:59C2FF,50:162B44,100:0D1117&height=120§ion=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)">⚡</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>
|