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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: elo-node
3
- Version: 0.4.5
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
- ## Architecture
70
+ ## Key Concepts
70
71
 
71
- ```
72
- ┌──────────────────┐ TCP/JSON ┌──────────────────┐
73
- │ Node A │◄──────────────►│ Node B │
74
- │ ed25519 key │ │ ed25519 key │
75
- │ Capabilities │ │ Capabilities │
76
- │ Interests │ │ Interests │
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
- Each node:
84
- 1. Generates an ed25519 identity on first run
85
- 2. Listens on a TCP port
86
- 3. Announces capabilities (e.g. "analyst", "web-search")
87
- 4. Discovers other nodes via shared tracker or manual peers
88
- 5. Exchanges signed messages (tasks, results, events)
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
- ## Architecture
48
+ ## Key Concepts
48
49
 
49
- ```
50
- ┌──────────────────┐ TCP/JSON ┌──────────────────┐
51
- │ Node A │◄──────────────►│ Node B │
52
- │ ed25519 key │ │ ed25519 key │
53
- │ Capabilities │ │ Capabilities │
54
- │ Interests │ │ Interests │
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
- Each node:
62
- 1. Generates an ed25519 identity on first run
63
- 2. Listens on a TCP port
64
- 3. Announces capabilities (e.g. "analyst", "web-search")
65
- 4. Discovers other nodes via shared tracker or manual peers
66
- 5. Exchanges signed messages (tasks, results, events)
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
 
@@ -26,4 +26,4 @@ __all__ = [
26
26
  "Node", "Task", "Result", "Event", "NodeInfo", "Capabilities",
27
27
  "EphemeralIdentity", "generate_and_save_identity", "load_identity",
28
28
  ]
29
- __version__ = "0.4.4"
29
+ __version__ = "0.4.6"
@@ -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.5",
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.5
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
- ## Architecture
70
+ ## Key Concepts
70
71
 
71
- ```
72
- ┌──────────────────┐ TCP/JSON ┌──────────────────┐
73
- │ Node A │◄──────────────►│ Node B │
74
- │ ed25519 key │ │ ed25519 key │
75
- │ Capabilities │ │ Capabilities │
76
- │ Interests │ │ Interests │
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
- Each node:
84
- 1. Generates an ed25519 identity on first run
85
- 2. Listens on a TCP port
86
- 3. Announces capabilities (e.g. "analyst", "web-search")
87
- 4. Discovers other nodes via shared tracker or manual peers
88
- 5. Exchanges signed messages (tasks, results, events)
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
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "elo-node"
7
- version = "0.4.5"
7
+ version = "0.4.6"
8
8
  description = "Elo — malha P2P de mensagens para agentes de IA. Zero infraestrutura."
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -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.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