elo-node 0.4.5__tar.gz → 0.4.6__tar.gz
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.
- {elo_node-0.4.5 → elo_node-0.4.6}/PKG-INFO +16 -20
- {elo_node-0.4.5 → elo_node-0.4.6}/README.md +15 -19
- {elo_node-0.4.5 → elo_node-0.4.6}/elo/__init__.py +1 -1
- {elo_node-0.4.5 → elo_node-0.4.6}/elo/node.py +1 -1
- {elo_node-0.4.5 → elo_node-0.4.6}/elo_node.egg-info/PKG-INFO +16 -20
- {elo_node-0.4.5 → elo_node-0.4.6}/pyproject.toml +1 -1
- {elo_node-0.4.5 → elo_node-0.4.6}/tests/test_unit.py +1 -1
- {elo_node-0.4.5 → elo_node-0.4.6}/elo/__main__.py +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo/security.py +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo/transport/__init__.py +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo/transport/protocol.py +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo/transport/routing.py +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo/transport/tcp.py +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo/transport/tracker.py +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo/types.py +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo_node.egg-info/SOURCES.txt +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo_node.egg-info/dependency_links.txt +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo_node.egg-info/entry_points.txt +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo_node.egg-info/requires.txt +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/elo_node.egg-info/top_level.txt +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/setup.cfg +0 -0
- {elo_node-0.4.5 → elo_node-0.4.6}/tests/test_security.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: elo-node
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.6
|
|
4
4
|
Summary: Elo — malha P2P de mensagens para agentes de IA. Zero infraestrutura.
|
|
5
5
|
Author: Elo Contributors
|
|
6
6
|
License: MIT
|
|
@@ -35,7 +35,7 @@ import asyncio
|
|
|
35
35
|
from elo import Node
|
|
36
36
|
|
|
37
37
|
async def main():
|
|
38
|
-
node = Node("my-agent", port=7878)
|
|
38
|
+
node = Node("my-agent", port=7878, peers=["100.91.215.113:7878"])
|
|
39
39
|
await node.connect()
|
|
40
40
|
await node.register(agents=["analyst"], tools=["web-search"])
|
|
41
41
|
|
|
@@ -53,6 +53,7 @@ asyncio.run(main())
|
|
|
53
53
|
- **Decentralized P2P** — discovery via public tracker or Kademlia DHT
|
|
54
54
|
- **ed25519 signatures** — cryptographic identity, authenticated messages
|
|
55
55
|
- **Capabilities** — publish/subscribe of agent skills across the mesh
|
|
56
|
+
- **Relay via tracker** — nodes behind NAT/Docker can communicate through a tracker
|
|
56
57
|
- **Zero infra** — no Kafka, Redis, NATS, or central server
|
|
57
58
|
- **Native CLI** — `python -m elo serve`, `status`, `init`, `id`
|
|
58
59
|
|
|
@@ -66,26 +67,21 @@ python -m elo init # Generate persistent identity
|
|
|
66
67
|
python -m elo serve # Start an interactive node
|
|
67
68
|
```
|
|
68
69
|
|
|
69
|
-
##
|
|
70
|
+
## Key Concepts
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
└──────────────────┘ └──────────────────┘
|
|
78
|
-
│ │
|
|
79
|
-
│ Tracker (optional) │
|
|
80
|
-
└────────────── DHT ───────────────┘
|
|
81
|
-
```
|
|
72
|
+
- **`peers=` is required** for outbound connections. Without it the node only listens.
|
|
73
|
+
- **`send_task()` auto-fallback:** direct → InterestTable → QUERY → **tracker relay** → NO_PEER
|
|
74
|
+
- **HELLO_ACK with known_peers:** tracker shares all peers on handshake (v0.4.4+)
|
|
75
|
+
- **`discover_peers_network()`** — QUERY broadcast across the mesh
|
|
76
|
+
|
|
77
|
+
## Changelog
|
|
82
78
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
4.
|
|
88
|
-
|
|
79
|
+
| Version | Highlights |
|
|
80
|
+
|---------|------------|
|
|
81
|
+
| 0.4.5 | Multi-response discover, tracker returns all peers on query |
|
|
82
|
+
| 0.4.4 | HELLO_ACK with known_peers, send_task auto-fallback tracker |
|
|
83
|
+
| 0.4.3 | Relay via tracker, send_task_via_tracker() |
|
|
84
|
+
| 0.4.0 | Initial release |
|
|
89
85
|
|
|
90
86
|
## Compatibility
|
|
91
87
|
|
|
@@ -13,7 +13,7 @@ import asyncio
|
|
|
13
13
|
from elo import Node
|
|
14
14
|
|
|
15
15
|
async def main():
|
|
16
|
-
node = Node("my-agent", port=7878)
|
|
16
|
+
node = Node("my-agent", port=7878, peers=["100.91.215.113:7878"])
|
|
17
17
|
await node.connect()
|
|
18
18
|
await node.register(agents=["analyst"], tools=["web-search"])
|
|
19
19
|
|
|
@@ -31,6 +31,7 @@ asyncio.run(main())
|
|
|
31
31
|
- **Decentralized P2P** — discovery via public tracker or Kademlia DHT
|
|
32
32
|
- **ed25519 signatures** — cryptographic identity, authenticated messages
|
|
33
33
|
- **Capabilities** — publish/subscribe of agent skills across the mesh
|
|
34
|
+
- **Relay via tracker** — nodes behind NAT/Docker can communicate through a tracker
|
|
34
35
|
- **Zero infra** — no Kafka, Redis, NATS, or central server
|
|
35
36
|
- **Native CLI** — `python -m elo serve`, `status`, `init`, `id`
|
|
36
37
|
|
|
@@ -44,26 +45,21 @@ python -m elo init # Generate persistent identity
|
|
|
44
45
|
python -m elo serve # Start an interactive node
|
|
45
46
|
```
|
|
46
47
|
|
|
47
|
-
##
|
|
48
|
+
## Key Concepts
|
|
48
49
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
└──────────────────┘ └──────────────────┘
|
|
56
|
-
│ │
|
|
57
|
-
│ Tracker (optional) │
|
|
58
|
-
└────────────── DHT ───────────────┘
|
|
59
|
-
```
|
|
50
|
+
- **`peers=` is required** for outbound connections. Without it the node only listens.
|
|
51
|
+
- **`send_task()` auto-fallback:** direct → InterestTable → QUERY → **tracker relay** → NO_PEER
|
|
52
|
+
- **HELLO_ACK with known_peers:** tracker shares all peers on handshake (v0.4.4+)
|
|
53
|
+
- **`discover_peers_network()`** — QUERY broadcast across the mesh
|
|
54
|
+
|
|
55
|
+
## Changelog
|
|
60
56
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
4.
|
|
66
|
-
|
|
57
|
+
| Version | Highlights |
|
|
58
|
+
|---------|------------|
|
|
59
|
+
| 0.4.5 | Multi-response discover, tracker returns all peers on query |
|
|
60
|
+
| 0.4.4 | HELLO_ACK with known_peers, send_task auto-fallback tracker |
|
|
61
|
+
| 0.4.3 | Relay via tracker, send_task_via_tracker() |
|
|
62
|
+
| 0.4.0 | Initial release |
|
|
67
63
|
|
|
68
64
|
## Compatibility
|
|
69
65
|
|
|
@@ -78,7 +78,7 @@ class Node:
|
|
|
78
78
|
peers: list[str] | None = None,
|
|
79
79
|
tracker: str = "public",
|
|
80
80
|
allowlist: list[str] | None = None,
|
|
81
|
-
version: str = "0.4.
|
|
81
|
+
version: str = "0.4.6",
|
|
82
82
|
identity: EphemeralIdentity | None = None,
|
|
83
83
|
verify_peers: bool = True,
|
|
84
84
|
heartbeat_interval_s: int = 30,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: elo-node
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.6
|
|
4
4
|
Summary: Elo — malha P2P de mensagens para agentes de IA. Zero infraestrutura.
|
|
5
5
|
Author: Elo Contributors
|
|
6
6
|
License: MIT
|
|
@@ -35,7 +35,7 @@ import asyncio
|
|
|
35
35
|
from elo import Node
|
|
36
36
|
|
|
37
37
|
async def main():
|
|
38
|
-
node = Node("my-agent", port=7878)
|
|
38
|
+
node = Node("my-agent", port=7878, peers=["100.91.215.113:7878"])
|
|
39
39
|
await node.connect()
|
|
40
40
|
await node.register(agents=["analyst"], tools=["web-search"])
|
|
41
41
|
|
|
@@ -53,6 +53,7 @@ asyncio.run(main())
|
|
|
53
53
|
- **Decentralized P2P** — discovery via public tracker or Kademlia DHT
|
|
54
54
|
- **ed25519 signatures** — cryptographic identity, authenticated messages
|
|
55
55
|
- **Capabilities** — publish/subscribe of agent skills across the mesh
|
|
56
|
+
- **Relay via tracker** — nodes behind NAT/Docker can communicate through a tracker
|
|
56
57
|
- **Zero infra** — no Kafka, Redis, NATS, or central server
|
|
57
58
|
- **Native CLI** — `python -m elo serve`, `status`, `init`, `id`
|
|
58
59
|
|
|
@@ -66,26 +67,21 @@ python -m elo init # Generate persistent identity
|
|
|
66
67
|
python -m elo serve # Start an interactive node
|
|
67
68
|
```
|
|
68
69
|
|
|
69
|
-
##
|
|
70
|
+
## Key Concepts
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
└──────────────────┘ └──────────────────┘
|
|
78
|
-
│ │
|
|
79
|
-
│ Tracker (optional) │
|
|
80
|
-
└────────────── DHT ───────────────┘
|
|
81
|
-
```
|
|
72
|
+
- **`peers=` is required** for outbound connections. Without it the node only listens.
|
|
73
|
+
- **`send_task()` auto-fallback:** direct → InterestTable → QUERY → **tracker relay** → NO_PEER
|
|
74
|
+
- **HELLO_ACK with known_peers:** tracker shares all peers on handshake (v0.4.4+)
|
|
75
|
+
- **`discover_peers_network()`** — QUERY broadcast across the mesh
|
|
76
|
+
|
|
77
|
+
## Changelog
|
|
82
78
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
4.
|
|
88
|
-
|
|
79
|
+
| Version | Highlights |
|
|
80
|
+
|---------|------------|
|
|
81
|
+
| 0.4.5 | Multi-response discover, tracker returns all peers on query |
|
|
82
|
+
| 0.4.4 | HELLO_ACK with known_peers, send_task auto-fallback tracker |
|
|
83
|
+
| 0.4.3 | Relay via tracker, send_task_via_tracker() |
|
|
84
|
+
| 0.4.0 | Initial release |
|
|
89
85
|
|
|
90
86
|
## Compatibility
|
|
91
87
|
|
|
@@ -136,7 +136,7 @@ class TestNodeConstruction:
|
|
|
136
136
|
node = Node("test-node")
|
|
137
137
|
assert node._name == "test-node"
|
|
138
138
|
assert node._port == 7878
|
|
139
|
-
assert node._version == "0.4.
|
|
139
|
+
assert node._version == "0.4.6"
|
|
140
140
|
assert node.connected is False
|
|
141
141
|
assert node.node_id is not None
|
|
142
142
|
assert len(node.node_id) > 20
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|