omniwire 2.3.0 → 2.5.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 +467 -485
- package/dist/mcp/server.js +684 -39
- package/dist/mcp/server.js.map +1 -1
- package/dist/nodes/manager.js +67 -122
- package/dist/nodes/manager.js.map +1 -1
- package/dist/nodes/transfer.d.ts +1 -1
- package/dist/nodes/transfer.js +59 -51
- package/dist/nodes/transfer.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,485 +1,467 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<picture>
|
|
3
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://capsule-render.vercel.app/api?type=
|
|
4
|
-
<source media="(prefers-color-scheme: light)" srcset="https://capsule-render.vercel.app/api?type=
|
|
5
|
-
<img alt="OmniWire" src="https://capsule-render.vercel.app/api?type=
|
|
6
|
-
</picture>
|
|
7
|
-
</p>
|
|
8
|
-
|
|
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-
|
|
12
|
-
<img src="https://img.shields.io/badge/
|
|
13
|
-
<img src="https://img.shields.io/badge/
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
<
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
<
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
<
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
</
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
<
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
</
|
|
187
|
-
|
|
188
|
-
<
|
|
189
|
-
<
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
|
208
|
-
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
| `
|
|
229
|
-
| `
|
|
230
|
-
| `
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
| `
|
|
240
|
-
| `
|
|
241
|
-
| `
|
|
242
|
-
| `
|
|
243
|
-
| `
|
|
244
|
-
| `
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
|
254
|
-
|
|
255
|
-
| `
|
|
256
|
-
| `
|
|
257
|
-
| `
|
|
258
|
-
| `
|
|
259
|
-
| `
|
|
260
|
-
| `
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
|
324
|
-
|
|
325
|
-
| **
|
|
326
|
-
| **
|
|
327
|
-
| **
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
---
|
|
355
|
-
|
|
356
|
-
##
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
**
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
- **SSH access** to remote nodes (key-based auth)
|
|
469
|
-
- **PostgreSQL** (only for CyberSync)
|
|
470
|
-
- **WireGuard + Tailscale** recommended (multi-path failover uses both)
|
|
471
|
-
- **Obsidian** (optional) for CyberBase vault browsing + Obsidian Sync cloud backup
|
|
472
|
-
|
|
473
|
-
---
|
|
474
|
-
|
|
475
|
-
<p align="center">
|
|
476
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-E6B450?style=flat-square&labelColor=0A0E14" alt="MIT License" /></a>
|
|
477
|
-
</p>
|
|
478
|
-
|
|
479
|
-
<p align="center">
|
|
480
|
-
<picture>
|
|
481
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://capsule-render.vercel.app/api?type=waving&color=0:0A0E14,50:1A1F2E,100:59C2FF&height=100§ion=footer" />
|
|
482
|
-
<source media="(prefers-color-scheme: light)" srcset="https://capsule-render.vercel.app/api?type=waving&color=0:E8EAED,50:D4D8DE,100:59C2FF&height=100§ion=footer" />
|
|
483
|
-
<img alt="footer" src="https://capsule-render.vercel.app/api?type=waving&color=0:0A0E14,50:1A1F2E,100:59C2FF&height=100§ion=footer" />
|
|
484
|
-
</picture>
|
|
485
|
-
</p>
|
|
1
|
+
<p align="center">
|
|
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§ion=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§ion=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§ion=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" />
|
|
6
|
+
</picture>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
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>
|
|
16
|
+
</p>
|
|
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
|
+
---
|
|
37
|
+
|
|
38
|
+
## Quick Start
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install -g omniwire
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Add to your AI agent (Claude Code, Cursor, OpenCode, etc.):
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"mcpServers": {
|
|
49
|
+
"omniwire": { "command": "omniwire", "args": ["--stdio"] }
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Why OmniWire?
|
|
57
|
+
|
|
58
|
+
| Problem | OmniWire Solution |
|
|
59
|
+
|---------|-------------------|
|
|
60
|
+
| Managing multiple servers manually | One tool call controls any node |
|
|
61
|
+
| Agents can't coordinate with each other | A2A messaging, events, semaphores |
|
|
62
|
+
| Multi-step deploys need many round-trips | Pipelines chain steps in 1 call |
|
|
63
|
+
| Flaky commands break agent loops | Built-in retry + assert + watch |
|
|
64
|
+
| Long tasks block the agent | Background dispatch with task IDs |
|
|
65
|
+
| Results lost between tool calls | Session store with `{{key}}` interpolation |
|
|
66
|
+
| Different transfer methods for diff sizes | Auto-selects SFTP / netcat / aria2c |
|
|
67
|
+
| SSH connections drop | Multi-path failover + circuit breaker |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Architecture
|
|
72
|
+
|
|
73
|
+
```mermaid
|
|
74
|
+
graph TB
|
|
75
|
+
subgraph clients["AI Agents"]
|
|
76
|
+
CC["Claude Code"]
|
|
77
|
+
OC["OpenCode / OpenClaw"]
|
|
78
|
+
CU["Cursor / Any MCP Client"]
|
|
79
|
+
A2["Other Agents (A2A)"]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
subgraph omniwire["OmniWire MCP Server"]
|
|
83
|
+
direction TB
|
|
84
|
+
MCP["MCP Protocol Layer<br/>stdio | SSE | REST"]
|
|
85
|
+
|
|
86
|
+
subgraph tools["53 Tools"]
|
|
87
|
+
direction LR
|
|
88
|
+
EXEC["Execution<br/>exec run batch<br/>broadcast pipeline"]
|
|
89
|
+
AGENT["Agentic<br/>store watch task<br/>a2a events locks"]
|
|
90
|
+
FILES["Files & Deploy<br/>read write transfer<br/>deploy find"]
|
|
91
|
+
SYS["System & DevOps<br/>docker services<br/>cron env git syslog"]
|
|
92
|
+
SYNC["CyberSync<br/>sync diff search<br/>secrets knowledge"]
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
subgraph engine["Core Engine"]
|
|
96
|
+
direction LR
|
|
97
|
+
POOL["SSH2 Pool<br/>persistent compressed<br/>circuit breaker"]
|
|
98
|
+
XFER["Transfer Engine<br/>SFTP netcat+gzip<br/>aria2c 16-conn"]
|
|
99
|
+
CSYNC["Sync Engine<br/>PostgreSQL XChaCha20<br/>parallel reconcile"]
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
subgraph mesh["Infrastructure Mesh"]
|
|
104
|
+
direction LR
|
|
105
|
+
N1["Node A<br/>storage"]
|
|
106
|
+
N2["Node B<br/>compute"]
|
|
107
|
+
N3["Node C<br/>GPU"]
|
|
108
|
+
N4["Node D<br/>local"]
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
DB[("PostgreSQL<br/>CyberBase")]
|
|
112
|
+
|
|
113
|
+
CC & OC & CU & A2 -->|MCP| MCP
|
|
114
|
+
MCP --> tools
|
|
115
|
+
tools --> engine
|
|
116
|
+
POOL -->|"SSH2 multi-path"| N1 & N2 & N3
|
|
117
|
+
POOL -->|"local exec"| N4
|
|
118
|
+
CSYNC --> DB
|
|
119
|
+
|
|
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
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Key Capabilities
|
|
132
|
+
|
|
133
|
+
<table>
|
|
134
|
+
<tr>
|
|
135
|
+
<td width="50%">
|
|
136
|
+
|
|
137
|
+
### Execution
|
|
138
|
+
```
|
|
139
|
+
omniwire_exec single command + retry + assert
|
|
140
|
+
omniwire_run multi-line script (compact UI)
|
|
141
|
+
omniwire_batch N commands, 1 tool call, chaining
|
|
142
|
+
omniwire_broadcast parallel across all nodes
|
|
143
|
+
omniwire_pipeline multi-step DAG with data flow
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
</td>
|
|
147
|
+
<td width="50%">
|
|
148
|
+
|
|
149
|
+
### Multi-Agent (A2A)
|
|
150
|
+
```
|
|
151
|
+
omniwire_store session key-value store
|
|
152
|
+
omniwire_a2a_message agent-to-agent queues
|
|
153
|
+
omniwire_event pub/sub event bus
|
|
154
|
+
omniwire_semaphore distributed locking
|
|
155
|
+
omniwire_agent_task async background dispatch
|
|
156
|
+
omniwire_workflow reusable named DAGs
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
</td>
|
|
160
|
+
</tr>
|
|
161
|
+
<tr>
|
|
162
|
+
<td>
|
|
163
|
+
|
|
164
|
+
### Adaptive File Transfer
|
|
165
|
+
```
|
|
166
|
+
< 10 MB SFTP native, 80ms
|
|
167
|
+
10M-1GB netcat+gzip compressed, 100ms
|
|
168
|
+
> 1 GB aria2c 16-parallel, max speed
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
</td>
|
|
172
|
+
<td>
|
|
173
|
+
|
|
174
|
+
### Connection Resilience
|
|
175
|
+
```
|
|
176
|
+
Connected --> Health Ping (30s, parallel)
|
|
177
|
+
|
|
|
178
|
+
Failure --> Multi-path Failover
|
|
179
|
+
| WireGuard -> Tailscale -> Public IP
|
|
180
|
+
|
|
|
181
|
+
+--> Retry (500ms -> 1s -> ... -> 15s)
|
|
182
|
+
|
|
|
183
|
+
3 fails --> Circuit OPEN (20s) -> Auto-recover
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
</td>
|
|
187
|
+
</tr>
|
|
188
|
+
<tr>
|
|
189
|
+
<td>
|
|
190
|
+
|
|
191
|
+
### Agentic Chaining
|
|
192
|
+
```
|
|
193
|
+
exec(store_as="ip") store result
|
|
194
|
+
exec(command="ping {{ip}}") interpolate
|
|
195
|
+
batch(abort_on_fail=true) fail-fast
|
|
196
|
+
exec(format="json") structured output
|
|
197
|
+
exec(retry=3, assert="ok") resilient
|
|
198
|
+
watch(assert="ready") poll until
|
|
199
|
+
```
|
|
200
|
+
|
|
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
|
+
</td>
|
|
217
|
+
</tr>
|
|
218
|
+
</table>
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## All 53 Tools
|
|
223
|
+
|
|
224
|
+
### Execution (5)
|
|
225
|
+
|
|
226
|
+
| Tool | Description |
|
|
227
|
+
|------|-------------|
|
|
228
|
+
| `omniwire_exec` | Run command on any node. `retry`, `assert`, `store_as`, `format:"json"`, `{{key}}` interpolation. |
|
|
229
|
+
| `omniwire_run` | Execute multi-line scripts via temp file. Keeps tool call UI clean. |
|
|
230
|
+
| `omniwire_batch` | N commands in 1 call. Chaining with `{{prev}}`, `abort_on_fail`, parallel or sequential. |
|
|
231
|
+
| `omniwire_broadcast` | Execute on all nodes simultaneously. JSON format support. |
|
|
232
|
+
| `omniwire_pipeline` | Multi-step DAG. `{{prev}}`/`{{stepN}}` interpolation, per-step error handling, cross-node. |
|
|
233
|
+
|
|
234
|
+
### Agentic / A2A (13)
|
|
235
|
+
|
|
236
|
+
| Tool | Description |
|
|
237
|
+
|------|-------------|
|
|
238
|
+
| `omniwire_store` | Session key-value store. Persist results across tool calls for chaining. |
|
|
239
|
+
| `omniwire_watch` | Poll command until assert pattern matches. For deploys, builds, service readiness. |
|
|
240
|
+
| `omniwire_healthcheck` | Parallel health probe across all nodes (connectivity, disk, mem, load, docker). Single call. |
|
|
241
|
+
| `omniwire_agent_task` | Dispatch background tasks. Get task IDs, poll status, retrieve results. A2A async. |
|
|
242
|
+
| `omniwire_a2a_message` | Agent-to-agent message queues. Send/receive/peek on named channels. |
|
|
243
|
+
| `omniwire_semaphore` | Distributed locking. Atomic acquire/release to prevent race conditions. |
|
|
244
|
+
| `omniwire_event` | Pub/sub events. Emit/poll timestamped events per topic. ACP/A2A/ACPX compatible. |
|
|
245
|
+
| `omniwire_workflow` | Define and run reusable named workflows (DAGs). Stored on disk, triggered by any agent. |
|
|
246
|
+
| `omniwire_agent_registry` | Register/discover agents by capabilities. Dynamic A2A routing. Heartbeat. |
|
|
247
|
+
| `omniwire_blackboard` | Shared blackboard for agent swarms. Post findings, read, search across topics. |
|
|
248
|
+
| `omniwire_task_queue` | Distributed task queue. Enqueue/dequeue with priorities. Complete/fail reporting. |
|
|
249
|
+
| `omniwire_capability` | Query node capabilities (tools, runtimes, GPU). Intelligent task routing. |
|
|
250
|
+
|
|
251
|
+
### Files & Transfer (6)
|
|
252
|
+
|
|
253
|
+
| Tool | Description |
|
|
254
|
+
|------|-------------|
|
|
255
|
+
| `omniwire_read_file` | Read file from any node. `node:/path` format. |
|
|
256
|
+
| `omniwire_write_file` | Write/create file on any node. |
|
|
257
|
+
| `omniwire_list_files` | List directory contents. |
|
|
258
|
+
| `omniwire_find_files` | Glob search across all nodes. |
|
|
259
|
+
| `omniwire_transfer_file` | Copy between nodes. Auto-selects SFTP/netcat/aria2c. |
|
|
260
|
+
| `omniwire_deploy` | Deploy file from one node to all others in parallel. |
|
|
261
|
+
|
|
262
|
+
### Monitoring (3)
|
|
263
|
+
|
|
264
|
+
| Tool | Description |
|
|
265
|
+
|------|-------------|
|
|
266
|
+
| `omniwire_mesh_status` | Health, latency, CPU/mem/disk for all nodes. Tabular output. |
|
|
267
|
+
| `omniwire_node_info` | Detailed info for a specific node. |
|
|
268
|
+
| `omniwire_live_monitor` | Snapshot metrics: cpu, memory, disk, network. |
|
|
269
|
+
|
|
270
|
+
### System & DevOps (12)
|
|
271
|
+
|
|
272
|
+
| Tool | Description |
|
|
273
|
+
|------|-------------|
|
|
274
|
+
| `omniwire_process_list` | List/filter processes across nodes |
|
|
275
|
+
| `omniwire_disk_usage` | Disk usage for all nodes |
|
|
276
|
+
| `omniwire_tail_log` | Last N lines of a log file |
|
|
277
|
+
| `omniwire_install_package` | Install via apt/npm/pip |
|
|
278
|
+
| `omniwire_service_control` | systemd start/stop/restart/status |
|
|
279
|
+
| `omniwire_docker` | Docker commands on any node |
|
|
280
|
+
| `omniwire_kernel` | dmesg, sysctl, modprobe, lsmod, strace, perf |
|
|
281
|
+
| `omniwire_cron` | List/add/remove cron jobs |
|
|
282
|
+
| `omniwire_env` | Get/set persistent environment variables |
|
|
283
|
+
| `omniwire_network` | ping, traceroute, dns, ports, speed, connections |
|
|
284
|
+
| `omniwire_git` | Git commands on repos on any node |
|
|
285
|
+
| `omniwire_syslog` | Query journalctl with filters |
|
|
286
|
+
|
|
287
|
+
### Network & Misc (5)
|
|
288
|
+
|
|
289
|
+
| Tool | Description |
|
|
290
|
+
|------|-------------|
|
|
291
|
+
| `omniwire_port_forward` | Create/list/close SSH tunnels |
|
|
292
|
+
| `omniwire_open_browser` | Open URL in browser on a node |
|
|
293
|
+
| `omniwire_shell` | Persistent PTY session (preserves cwd/env) |
|
|
294
|
+
| `omniwire_stream` | Capture streaming output (tail -f, watch) |
|
|
295
|
+
| `omniwire_clipboard` | Shared clipboard buffer across mesh |
|
|
296
|
+
|
|
297
|
+
### CyberSync (9)
|
|
298
|
+
|
|
299
|
+
| Tool | Description |
|
|
300
|
+
|------|-------------|
|
|
301
|
+
| `cybersync_status` | Sync status, item counts, pending syncs |
|
|
302
|
+
| `cybersync_sync_now` | Trigger immediate reconciliation |
|
|
303
|
+
| `cybersync_diff` | Show local vs database differences |
|
|
304
|
+
| `cybersync_history` | Query sync event log |
|
|
305
|
+
| `cybersync_search_knowledge` | Full-text search unified knowledge base |
|
|
306
|
+
| `cybersync_get_memory` | Retrieve Claude memory from PostgreSQL |
|
|
307
|
+
| `cybersync_manifest` | Show tracked files per tool |
|
|
308
|
+
| `cybersync_force_push` | Force push file to all nodes |
|
|
309
|
+
| `omniwire_secrets` | Get/set/delete/list/sync secrets (1Password, file, env) |
|
|
310
|
+
| `omniwire_update` | Self-update OmniWire |
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## Performance
|
|
315
|
+
|
|
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 |
|
|
323
|
+
| **Pipeline (5 steps)** | **~400ms** | `{{prev}}` interpolation, no extra tool calls |
|
|
324
|
+
| **Health check (all)** | **~90ms** | Parallel Promise.allSettled, structured JSON |
|
|
325
|
+
| **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)
|
|
336
|
+
- **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)
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## Security
|
|
344
|
+
|
|
345
|
+
- All remote execution via `ssh2.Client.exec()` -- never `child_process.exec()`
|
|
346
|
+
- Key-based auth only, no passwords stored, SSH key caching
|
|
347
|
+
- Multi-path failover: WireGuard -> Tailscale -> Public IP
|
|
348
|
+
- XChaCha20-Poly1305 at-rest encryption for synced configs
|
|
349
|
+
- 2MB output guard prevents memory exhaustion
|
|
350
|
+
- 4KB auto-truncation prevents context window bloat
|
|
351
|
+
- Circuit breaker with 20s auto-recovery isolates failing nodes
|
|
352
|
+
- CORS restricted to localhost on REST API
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## Transport Modes
|
|
357
|
+
|
|
358
|
+
| Mode | Port | Use Case |
|
|
359
|
+
|------|------|----------|
|
|
360
|
+
| `--stdio` | -- | Claude Code, Cursor, MCP subprocess |
|
|
361
|
+
| `--sse-port=N` | 3200 | OpenCode, remote HTTP MCP clients |
|
|
362
|
+
| `--rest-port=N` | 3201 | Scripts, dashboards, non-MCP |
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
omniwire --stdio # MCP mode (default)
|
|
366
|
+
omniwire --sse-port=3200 --rest-port=3201 # HTTP mode
|
|
367
|
+
omniwire --stdio --no-sync # MCP without CyberSync
|
|
368
|
+
omniwire # or: ow # Interactive REPL
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## Configure Mesh
|
|
374
|
+
|
|
375
|
+
Create `~/.omniwire/mesh.json`:
|
|
376
|
+
|
|
377
|
+
```json
|
|
378
|
+
{
|
|
379
|
+
"nodes": [
|
|
380
|
+
{ "id": "server1", "host": "10.0.0.1", "user": "root", "identityFile": "id_ed25519", "role": "storage" },
|
|
381
|
+
{ "id": "server2", "host": "10.0.0.2", "user": "root", "identityFile": "id_ed25519", "role": "compute" }
|
|
382
|
+
]
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## Changelog
|
|
389
|
+
|
|
390
|
+
<details>
|
|
391
|
+
<summary><b>v2.5.0 -- Performance Overhaul, A2A Protocol Expansion</b></summary>
|
|
392
|
+
|
|
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.
|
|
394
|
+
|
|
395
|
+
**4 new A2A tools** (49 -> 53): agent_registry (capability discovery), blackboard (swarm collaboration), task_queue (distributed work), capability (node routing).
|
|
396
|
+
|
|
397
|
+
**Connectivity**: Always-on 2s keepalive with 4s dead detection. 5s connect timeout. 10s reconnect cap. 15s circuit recovery.
|
|
398
|
+
|
|
399
|
+
</details>
|
|
400
|
+
|
|
401
|
+
<details>
|
|
402
|
+
<summary><b>v2.4.0 -- Agentic Loop, A2A, Multi-Agent Orchestration</b></summary>
|
|
403
|
+
|
|
404
|
+
**9 new agentic tools** (40 -> 49): store, pipeline, watch, healthcheck, agent_task, a2a_message, semaphore, event, workflow
|
|
405
|
+
|
|
406
|
+
**Agentic upgrades to existing tools**: `format:"json"`, `retry`, `assert`, `store_as`, `{{key}}` interpolation on exec/broadcast/batch
|
|
407
|
+
|
|
408
|
+
**Dynamic response processing**: Structured JSON output, step-to-step data flow, session result store, abort-on-fail chains
|
|
409
|
+
|
|
410
|
+
</details>
|
|
411
|
+
|
|
412
|
+
<details>
|
|
413
|
+
<summary><b>v2.3.0 -- Compact Output, Speed, New Tools</b></summary>
|
|
414
|
+
|
|
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).
|
|
416
|
+
|
|
417
|
+
</details>
|
|
418
|
+
|
|
419
|
+
<details>
|
|
420
|
+
<summary><b>v2.2.1 -- Security & Bug Fixes</b></summary>
|
|
421
|
+
|
|
422
|
+
Fixed script-only exec, shell race condition, transfer size guard, CORS restriction, input validation.
|
|
423
|
+
|
|
424
|
+
</details>
|
|
425
|
+
|
|
426
|
+
<details>
|
|
427
|
+
<summary><b>v2.1.0 -- Multi-Path Failover & Performance</b></summary>
|
|
428
|
+
|
|
429
|
+
Multi-path SSH (WireGuard/Tailscale/Public), SSH key caching, CyberBase integration, VaultBridge Obsidian mirror.
|
|
430
|
+
|
|
431
|
+
</details>
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## Architecture
|
|
436
|
+
|
|
437
|
+
```
|
|
438
|
+
omniwire/
|
|
439
|
+
src/
|
|
440
|
+
mcp/ MCP server (53 tools, 3 transports)
|
|
441
|
+
nodes/ SSH2 pool, transfer engine, PTY, tunnels
|
|
442
|
+
sync/ CyberSync + CyberBase (PostgreSQL, Obsidian, encryption)
|
|
443
|
+
protocol/ Mesh config, types, path parsing
|
|
444
|
+
commands/ Interactive REPL
|
|
445
|
+
ui/ Terminal formatting
|
|
446
|
+
```
|
|
447
|
+
|
|
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)
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
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>
|
|
460
|
+
|
|
461
|
+
<p align="center">
|
|
462
|
+
<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§ion=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§ion=footer" />
|
|
465
|
+
<img alt="footer" src="https://capsule-render.vercel.app/api?type=waving&color=0:0A0E14,50:1A1F2E,100:59C2FF&height=100§ion=footer" />
|
|
466
|
+
</picture>
|
|
467
|
+
</p>
|