|
swarm stage 2: peer-to-peer channel — /peer endpoints + peer tool
Server side (navi/api/routes/peer.py, port 8099): - GET /peer/hello — open discovery ping (name, uuid prefix, version) - GET /peer/status — PSK; identity, uptime, machine facts, hive view - POST /peer/ask — PSK; one-shot agent run under PEER_ASK_PROFILE (default server_admin) answers, one concurrent ask at a time - loop guard: answering agent runs without the peer tool (deterministic recursion cut) + own-uuid asks refused with 409 - verify_swarm_key in navi/swarm.py accepts .swarm-key.previous (rotation window, constant-time) Client side (navi/tools/peer.py): - peer tool: list (hive book, stale cache fallback marked), status, ask by swarm name; asks go direct peer-to-peer, hive never on the message path - audit events on both sides (peer.ask_sent/received/answered/failed) peer tool added to server_admin, navi_code, developer profiles. |
|---|
|
|
| .env.example |
|---|
| deploy/env.template |
|---|
| docs/config.md |
|---|
| docs/tools.md |
|---|
| hive/README.md |
|---|
| navi/api/routes/peer.py 0 → 100644 |
|---|
| navi/config.py |
|---|
| navi/core/registry.py |
|---|
| navi/main.py |
|---|
| navi/profiles/developer/config.json |
|---|
| navi/profiles/navi_code/config.json |
|---|
| navi/profiles/server_admin/config.json |
|---|
| navi/swarm.py |
|---|
| navi/tools/__init__.py |
|---|
| navi/tools/peer.py 0 → 100644 |
|---|
| tests/unit/test_peer_routes.py 0 → 100644 |
|---|
| tests/unit/tools/test_peer.py 0 → 100644 |
|---|