Implémentation complète du protocole Archipel en Node.js:
- découverte P2P sans Internet (UDP multicast)
- tunnel chiffré pair-à-pair (X25519 + XChaCha20-Poly1305)
- authentification sans CA (TOFU / Web of Trust)
- messages chiffrés
- transfert fichiers par chunks avec vérification SHA-256
- CLI opérationnelle + site web local de supervision
Chaque nœud exécute:
- un serveur TCP (données chiffrées)
- un module de découverte UDP multicast
- une table de pairs + réputation
- un moteur de transfert par chunks
- une API locale HTTP + dashboard web
Node A <--- UDP HELLO ---> Node B
Node A <=== TCP chiffré ===> Node B
- Identité nœud: Ed25519
- Échange de clés de session: X25519 (ephemeral)
- Chiffrement transport: XChaCha20-Poly1305
- Intégrité paquet Archipel: HMAC-SHA256
- Intégrité chunks/fichiers: SHA-256
cd /home/vianekisdead/api-assassins
npm installPour synchroniser souvent sans faire de faux commits:
# une seule tentative (test + commit/push si changements)
npm run team:sync:once
# boucle auto toutes les 30 secondes (commit/push seulement si changements)
npm run team:autosync
# boucle auto + tests avant chaque commit
npm run team:autosync:testOptions avancées:
bash scripts/team-autosync.sh --interval 45 --run-tests --branch main --remote originLe script:
- ne commit/push que s'il y a de vrais changements
- fait
git pull --rebase --autostashavant commit - saute le push si les tests échouent (mode
--run-tests)
node src/cli.js start --port 7777 --admin-port 8787 [--no-ai] [--ad-hoc]Dashboard web:
Par défaut, les données du nœud sont stockées dans:
.archipel/node-<port>
node src/cli.js status --admin-port 8787
node src/cli.js peers --admin-port 8787
node src/cli.js hello --admin-port 8787
node src/cli.js msg <node_id> "Hello" --admin-port 8787
node src/cli.js send <node_id> /tmp/fichier.bin --admin-port 8787
node src/cli.js ai "propose une réponse simple" --admin-port 8787
node src/cli.js ai-status --admin-port 8787
node src/cli.js key-revoke --admin-port 8787
node src/cli.js receive --admin-port 8787
node src/cli.js download <file_id> --admin-port 8787
node src/cli.js trust <node_id> --admin-port 8787
node src/cli.js stop --admin-port 8787Terminal A:
node src/cli.js start --port 7777 --admin-port 8787 --data-dir /tmp/arch-aTerminal B:
node src/cli.js start --port 7778 --admin-port 8788 --data-dir /tmp/arch-bPuis:
node src/cli.js status --admin-port 8787
node src/cli.js status --admin-port 8788
node src/cli.js peers --admin-port 8787Envoyer message A -> B:
node src/cli.js msg <NODE_ID_B> "salut" --admin-port 8787Envoyer fichier A -> B:
node src/cli.js send <NODE_ID_B> /tmp/arch-e2e.bin --admin-port 8787
node src/cli.js receive --admin-port 8788
node src/cli.js download <FILE_ID> --admin-port 8788Mode ad-hoc (sans multicast, pair manuel):
Terminal A:
node src/cli.js start --port 7777 --admin-port 8787 --ad-hoc --data-dir /tmp/arch-aTerminal B:
node src/cli.js start --port 7778 --admin-port 8788 --ad-hoc --data-dir /tmp/arch-bPuis ajouter les peers manuellement et forcer HELLO:
node src/cli.js peer-add <NODE_ID_B> 192.168.1.20:7778 --admin-port 8787
node src/cli.js peer-add <NODE_ID_A> 192.168.1.10:7777 --admin-port 8788
node src/cli.js hello --admin-port 8787
node src/cli.js hello --admin-port 8788src/
protocol/ format paquet Archipel v1
crypto/ identité + key exchange + AEAD
network/ discovery multicast + frames + secure channel
node/ runtime principal du nœud
admin/ API locale HTTP
cli.js commandes utilisateur
apps/web/ site web local (dashboard + actions)
- Pas de serveur central.
- Fonctionne en LAN local sans Internet.
- Le chat P2P reste offline; Gemini est optionnel via l’API locale.
- Pour forcer le mode offline IA: lancer avec
--no-ai(ouARCHIPEL_NO_AI=1). - Pour forcer la découverte ad-hoc (sans multicast): lancer avec
--ad-hoc(ouARCHIPEL_ADHOC=1). - Pour lancer plusieurs nœuds sur la même machine: utiliser des
--data-diret ports différents.
Configurer la clé API dans l'environnement:
export GEMINI_API_KEY="ta_cle_api"
export GEMINI_MODEL="gemini-2.0-flash"Ou via fichier local .env (chargé automatiquement par src/cli.js et src/index.js):
GEMINI_API_KEY=ta_cle_api
GEMINI_MODEL=gemini-2.0-flashPuis démarrer le nœud:
node src/cli.js start --port 7777 --admin-port 8787Endpoints Gemini disponibles:
GET /api/ai/status-> état config + mode--no-aiPOST /api/ai/generate-> génération textePOST /api/security/revoke-key-> prépare une nouvelle clé locale (redémarrage requis)GET /api/trust-store-> empreintes et niveaux de confiance
Exemple:
curl -s -X POST http://127.0.0.1:8787/api/ai/generate \
-H "content-type: application/json" \
-d '{"prompt":"Réponds en français simple: bonjour"}'Dans l'interface web, bouton Réponse IA dans la zone de message:
- lit le contexte récent de conversation
- génère un brouillon Gemini
- remplit le champ message automatiquement
Commandes chat UI:
/ask ...-> génère une réponse IA (si IA activée)@archipel-ai ...-> même comportement