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.
1 parent ad56550 commit 277921b83f79e0c2157f49fc713995f0fe937cf7
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 10 hours ago
Showing 17 changed files
View
.env.example
View
deploy/env.template
View
docs/config.md
View
docs/tools.md
View
hive/README.md
View
navi/api/routes/peer.py 0 → 100644
View
navi/config.py
View
navi/core/registry.py
View
navi/main.py
View
navi/profiles/developer/config.json
View
navi/profiles/navi_code/config.json
View
navi/profiles/server_admin/config.json
View
navi/swarm.py
View
navi/tools/__init__.py
View
navi/tools/peer.py 0 → 100644
View
tests/unit/test_peer_routes.py 0 → 100644
View
tests/unit/tools/test_peer.py 0 → 100644