overmind-mcp 3.3.5 → 3.3.7
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.
package/README.md
CHANGED
|
@@ -49,17 +49,14 @@ Le postinstall crée `~/.overmind/` automatiquement :
|
|
|
49
49
|
├── bridge/
|
|
50
50
|
│ ├── agents.json ← registre sessions unifié
|
|
51
51
|
│ └── process-registry.json ← runtime live
|
|
52
|
-
└── hermes/
|
|
52
|
+
└── hermes/ ← HERMES_HOME (injecté par HermesRunner)
|
|
53
53
|
└── profiles/ ← SOURCE homes (unique)
|
|
54
54
|
└── <name>/
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
│ ├── state.db ← state local (SQLite)
|
|
61
|
-
│ ├── workspace.yaml ← kind: scratch|persistent|shared
|
|
62
|
-
│ └── README.md ← rôle + owner
|
|
55
|
+
├── config.yaml ← Hermes config (model, provider)
|
|
56
|
+
├── SOUL.md ← system prompt
|
|
57
|
+
├── .env ← credentials spécifiques
|
|
58
|
+
├── state.db ← state local (SQLite)
|
|
59
|
+
└── skills/ ← skills personnalisés
|
|
63
60
|
```
|
|
64
61
|
|
|
65
62
|
### Configuration MCP Client
|
|
@@ -742,22 +742,93 @@ ok "overmind-mcp: v${OM_VER}"
|
|
|
742
742
|
ok "overmind-postgres-mcp: v${PGM_VER}"
|
|
743
743
|
|
|
744
744
|
# ================================================================
|
|
745
|
-
# STEP 10/11 — Audit arborescence agents
|
|
745
|
+
# STEP 10/11 — Audit + Réparation arborescence agents
|
|
746
|
+
# Détecte ET corrige les mauvaises configs, symlinks cassés,
|
|
747
|
+
# fichiers manquants, env incomplet — SANS RIEN EFFACER.
|
|
746
748
|
# ================================================================
|
|
747
|
-
step "Audit arborescence agents"
|
|
749
|
+
step "Audit + Réparation arborescence agents"
|
|
748
750
|
|
|
749
751
|
PROFILES_DIR="$OM_DIR/hermes/profiles"
|
|
750
752
|
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
else
|
|
757
|
-
|
|
753
|
+
# ─── 1. Vérifier la structure globale ─────────────────────────
|
|
754
|
+
for check_dir in "bridge/wrappers" "logs" "hermes/profiles" "hermes/distributions"; do
|
|
755
|
+
if [ ! -d "$OM_DIR/$check_dir" ]; then
|
|
756
|
+
track_warn "~/.overmind/${check_dir}/ MANQUANT → création"
|
|
757
|
+
mkdir -p "$OM_DIR/$check_dir" 2>/dev/null || true
|
|
758
|
+
else
|
|
759
|
+
ok "~/.overmind/${check_dir}/"
|
|
760
|
+
fi
|
|
761
|
+
done
|
|
762
|
+
|
|
763
|
+
# ─── 2. Détecter le dual-path ~/.hermes vs ~/.overmind/hermes ─
|
|
764
|
+
HERMES_NATIVE="$OM_HOME/.hermes"
|
|
765
|
+
if [ -d "$HERMES_NATIVE" ] && [ -d "$OM_DIR/hermes" ]; then
|
|
766
|
+
# Les deux existent! C'est le bug dual-path.
|
|
767
|
+
NATIVE_PROFILES=$(find "$HERMES_NATIVE/profiles" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l | tr -d ' ')
|
|
768
|
+
OM_PROFILES=$(find "$PROFILES_DIR" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l | tr -d ' ')
|
|
769
|
+
|
|
770
|
+
if [ "$NATIVE_PROFILES" -gt 0 ] && [ "$OM_PROFILES" -gt 0 ]; then
|
|
771
|
+
warn "DUAL-PATH détecté: ~/.hermes/ ($NATIVE_PROFILES profils) ET ~/.overmind/hermes/ ($OM_PROFILES profils)"
|
|
772
|
+
log "Correction: migration des profils ~/.hermes/ → ~/.overmind/hermes/profiles/ (sans effacer)..."
|
|
773
|
+
|
|
774
|
+
for native_profile in "$HERMES_NATIVE/profiles"/*/; do
|
|
775
|
+
[ -d "$native_profile" ] || continue
|
|
776
|
+
pname=$(basename "$native_profile")
|
|
777
|
+
target="$PROFILES_DIR/$pname"
|
|
778
|
+
|
|
779
|
+
if [ -d "$target" ]; then
|
|
780
|
+
# Le profil existe déjà dans overmind — vérifier quels fichiers manquent
|
|
781
|
+
for file in config.yaml SOUL.md .env .mcp.json profile.yaml workspace.yaml; do
|
|
782
|
+
if [ ! -f "$target/$file" ] && [ -f "$native_profile/$file" ]; then
|
|
783
|
+
log " Copie $pname/$file (manquant dans overmind, présent dans native)"
|
|
784
|
+
cp -p "$native_profile/$file" "$target/$file" 2>/dev/null || true
|
|
785
|
+
fi
|
|
786
|
+
done
|
|
787
|
+
# state.db
|
|
788
|
+
if [ ! -f "$target/state.db" ] && [ -f "$native_profile/state.db" ]; then
|
|
789
|
+
log " Copie $pname/state.db"
|
|
790
|
+
cp -p "$native_profile/state.db" "$target/state.db" 2>/dev/null || true
|
|
791
|
+
fi
|
|
792
|
+
# auth.json
|
|
793
|
+
if [ ! -f "$target/auth.json" ] && [ -f "$native_profile/auth.json" ]; then
|
|
794
|
+
log " Copie $pname/auth.json"
|
|
795
|
+
cp -p "$native_profile/auth.json" "$target/auth.json" 2>/dev/null || true
|
|
796
|
+
fi
|
|
797
|
+
# skills/
|
|
798
|
+
if [ ! -d "$target/skills" ] && [ -d "$native_profile/skills" ]; then
|
|
799
|
+
log " Copie $pname/skills/"
|
|
800
|
+
cp -rp "$native_profile/skills" "$target/" 2>/dev/null || true
|
|
801
|
+
fi
|
|
802
|
+
ok "Profil $pname: fichiers manquants comblés depuis ~/.hermes/"
|
|
803
|
+
else
|
|
804
|
+
# Le profil n'existe pas dans overmind — migration complète
|
|
805
|
+
log " Migration complète: $pname"
|
|
806
|
+
cp -rp "$native_profile" "$target/" 2>/dev/null || true
|
|
807
|
+
ok "Profil $pname migré vers ~/.overmind/hermes/profiles/"
|
|
808
|
+
fi
|
|
809
|
+
done
|
|
810
|
+
ok "Migration dual-path terminée (rien effacé — ~/.hermes/ conservé)"
|
|
811
|
+
elif [ "$NATIVE_PROFILES" -gt 0 ] && [ "$OM_PROFILES" -eq 0 ]; then
|
|
812
|
+
warn "~/.hermes/ a $NATIVE_PROFILES profils, ~/.overmind/hermes/ est vide"
|
|
813
|
+
log "Migration complète des profils..."
|
|
814
|
+
cp -rp "$HERMES_NATIVE/profiles/"* "$PROFILES_DIR/" 2>/dev/null || true
|
|
815
|
+
# Copier aussi config.yaml et auth.json globaux
|
|
816
|
+
[ -f "$HERMES_NATIVE/config.yaml" ] && cp -p "$HERMES_NATIVE/config.yaml" "$OM_DIR/hermes/config.yaml" 2>/dev/null || true
|
|
817
|
+
[ -f "$HERMES_NATIVE/auth.json" ] && cp -p "$HERMES_NATIVE/auth.json" "$OM_DIR/hermes/auth.json" 2>/dev/null || true
|
|
818
|
+
ok "Profils migrés vers ~/.overmind/hermes/profiles/"
|
|
819
|
+
fi
|
|
758
820
|
fi
|
|
759
821
|
|
|
760
|
-
#
|
|
822
|
+
# ─── 3. Vérifier les symlinks cassés ──────────────────────────
|
|
823
|
+
find "$OM_DIR" -type l 2>/dev/null | while read -r link; do
|
|
824
|
+
if [ ! -e "$link" ]; then
|
|
825
|
+
linkname=$(echo "$link" | sed "s|$OM_DIR/||")
|
|
826
|
+
track_warn "Symlink cassé: ~/.overmind/${linkname} → suppression (lien mort seulement)"
|
|
827
|
+
rm -f "$link" 2>/dev/null || true
|
|
828
|
+
fi
|
|
829
|
+
done
|
|
830
|
+
|
|
831
|
+
# ─── 4. Audit détaillé par profil ─────────────────────────────
|
|
761
832
|
PROFILE_COUNT=0
|
|
762
833
|
if [ -d "$PROFILES_DIR" ]; then
|
|
763
834
|
PROFILE_COUNT=$(find "$PROFILES_DIR" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l | tr -d ' ')
|
|
@@ -767,27 +838,39 @@ if [ "$PROFILE_COUNT" -eq 0 ]; then
|
|
|
767
838
|
warn "Aucun profil agent dans ~/.overmind/hermes/profiles/"
|
|
768
839
|
log "Créez un agent avec: overmind create-agent --name <name> --prompt '...' --runner hermes"
|
|
769
840
|
else
|
|
770
|
-
log "Audit de $PROFILE_COUNT profil(s)..."
|
|
841
|
+
log "Audit + réparation de $PROFILE_COUNT profil(s)..."
|
|
771
842
|
echo
|
|
772
843
|
|
|
773
|
-
# Pour chaque profil, vérifier les fichiers requis
|
|
774
844
|
for profile_path in "$PROFILES_DIR"/*/; do
|
|
775
845
|
[ -d "$profile_path" ] || continue
|
|
776
846
|
pname=$(basename "$profile_path")
|
|
777
847
|
echo -e " ${C}▸ ${pname}${N}"
|
|
778
848
|
|
|
779
|
-
#
|
|
780
|
-
PROFILE_OK=true
|
|
781
|
-
|
|
782
|
-
# config.yaml (OBLIGATOIRE)
|
|
849
|
+
# ── config.yaml (OBLIGATOIRE) ────────────────────────────
|
|
783
850
|
if [ -f "${profile_path}config.yaml" ]; then
|
|
784
|
-
|
|
851
|
+
# Vérifier qu'il contient model.provider et model.model
|
|
852
|
+
if ! grep -q 'model:' "${profile_path}config.yaml" 2>/dev/null; then
|
|
853
|
+
track_warn "${pname}/config.yaml ne contient pas 'model:' → rewrite"
|
|
854
|
+
cat > "${profile_path}config.yaml" <<YAMLEOF
|
|
855
|
+
model:
|
|
856
|
+
provider: minimax-cn
|
|
857
|
+
model: MiniMax-M3
|
|
858
|
+
YAMLEOF
|
|
859
|
+
ok "${pname}/config.yaml corrigé avec defaults"
|
|
860
|
+
else
|
|
861
|
+
ok "${pname}/config.yaml"
|
|
862
|
+
fi
|
|
785
863
|
else
|
|
786
|
-
|
|
787
|
-
|
|
864
|
+
track_warn "${pname}/config.yaml MANQUANT → création avec defaults"
|
|
865
|
+
cat > "${profile_path}config.yaml" <<YAMLEOF
|
|
866
|
+
model:
|
|
867
|
+
provider: minimax-cn
|
|
868
|
+
model: MiniMax-M3
|
|
869
|
+
YAMLEOF
|
|
870
|
+
ok "${pname}/config.yaml créé"
|
|
788
871
|
fi
|
|
789
872
|
|
|
790
|
-
# SOUL.md
|
|
873
|
+
# ── SOUL.md ───────────────────────────────────────────────
|
|
791
874
|
if [ -f "${profile_path}SOUL.md" ]; then
|
|
792
875
|
SOUL_SIZE=$(wc -c < "${profile_path}SOUL.md" 2>/dev/null | tr -d ' ')
|
|
793
876
|
if [ "$SOUL_SIZE" -lt 50 ]; then
|
|
@@ -796,111 +879,133 @@ else
|
|
|
796
879
|
ok "${pname}/SOUL.md (${SOUL_SIZE} bytes)"
|
|
797
880
|
fi
|
|
798
881
|
else
|
|
799
|
-
track_warn "${pname}/SOUL.md MANQUANT
|
|
882
|
+
track_warn "${pname}/SOUL.md MANQUANT → création placeholder"
|
|
883
|
+
echo "# ${pname}" > "${profile_path}SOUL.md"
|
|
884
|
+
echo "" >> "${profile_path}SOUL.md"
|
|
885
|
+
echo "Tu es un agent Overmind. Réponds aux requêtes de l'utilisateur." >> "${profile_path}SOUL.md"
|
|
886
|
+
ok "${pname}/SOUL.md créé (placeholder)"
|
|
800
887
|
fi
|
|
801
888
|
|
|
802
|
-
# .env (
|
|
803
|
-
if [ -f "${profile_path}.env" ]; then
|
|
804
|
-
|
|
889
|
+
# ── .env (clés LLM) ───────────────────────────────────────
|
|
890
|
+
if [ ! -f "${profile_path}.env" ]; then
|
|
891
|
+
track_warn "${pname}/.env MANQUANT → création template"
|
|
892
|
+
cat > "${profile_path}.env" <<ENVEOF
|
|
893
|
+
# Credentials pour ${pname}
|
|
894
|
+
# Remplir avec vos clés API
|
|
895
|
+
# MINIMAX_CN_API_KEY=sk-cp-...
|
|
896
|
+
# ANTHROPIC_AUTH_TOKEN=...
|
|
897
|
+
ENVEOF
|
|
898
|
+
chmod 600 "${profile_path}.env" 2>/dev/null || true
|
|
899
|
+
ok "${pname}/.env créé (template)"
|
|
805
900
|
else
|
|
806
|
-
|
|
901
|
+
# Vérifier qu'au moins une clé est présente
|
|
902
|
+
if ! grep -qE 'API_KEY|AUTH_TOKEN|SECRET' "${profile_path}.env" 2>/dev/null; then
|
|
903
|
+
track_warn "${pname}/.env ne contient aucune clé API"
|
|
904
|
+
else
|
|
905
|
+
ok "${pname}/.env"
|
|
906
|
+
fi
|
|
807
907
|
fi
|
|
808
908
|
|
|
809
|
-
#
|
|
810
|
-
if [ -f "${profile_path}
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
909
|
+
# ── auth.json stale ───────────────────────────────────────
|
|
910
|
+
if [ -f "${profile_path}auth.json" ]; then
|
|
911
|
+
AUTH_AGE=$(($(date +%s) - $(stat -f %m "${profile_path}auth.json" 2>/dev/null || stat -c %Y "${profile_path}auth.json" 2>/dev/null || echo 0)))
|
|
912
|
+
if [ "$AUTH_AGE" -gt 604800 ]; then
|
|
913
|
+
track_warn "${pname}/auth.json stale (>7j). Peut causer 401/429. Suppression du cache..."
|
|
914
|
+
rm -f "${profile_path}auth.json" 2>/dev/null || true
|
|
915
|
+
ok "${pname}/auth.json supprimé (sera recréé par Hermes au prochain run)"
|
|
916
|
+
else
|
|
917
|
+
ok "${pname}/auth.json (récent)"
|
|
918
|
+
fi
|
|
814
919
|
fi
|
|
815
920
|
|
|
816
|
-
#
|
|
817
|
-
if [ -f "${profile_path}
|
|
818
|
-
|
|
921
|
+
# ── profile.yaml (kanban) ─────────────────────────────────
|
|
922
|
+
if [ ! -f "${profile_path}profile.yaml" ]; then
|
|
923
|
+
track_warn "${pname}/profile.yaml MANQUANT → création"
|
|
924
|
+
cat > "${profile_path}profile.yaml" <<YAMLEOF
|
|
925
|
+
name: "${pname}"
|
|
926
|
+
description: "Agent Overmind"
|
|
927
|
+
model: "$(grep 'model:' "${profile_path}config.yaml" 2>/dev/null | head -1 | awk '{print $2}' || echo 'unknown')"
|
|
928
|
+
workspace: persistent
|
|
929
|
+
created: "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
930
|
+
YAMLEOF
|
|
931
|
+
ok "${pname}/profile.yaml créé"
|
|
819
932
|
else
|
|
820
|
-
|
|
933
|
+
ok "${pname}/profile.yaml"
|
|
821
934
|
fi
|
|
822
935
|
|
|
823
|
-
#
|
|
824
|
-
if [ -f "${profile_path}
|
|
825
|
-
|
|
936
|
+
# ── workspace.yaml ────────────────────────────────────────
|
|
937
|
+
if [ ! -f "${profile_path}workspace.yaml" ]; then
|
|
938
|
+
log "${D} ${pname}/workspace.yaml → création (persistent)${N}"
|
|
939
|
+
echo "kind: persistent" > "${profile_path}workspace.yaml"
|
|
940
|
+
echo "path: ${profile_path}" >> "${profile_path}workspace.yaml"
|
|
941
|
+
ok "${pname}/workspace.yaml créé"
|
|
826
942
|
else
|
|
827
|
-
|
|
943
|
+
ok "${pname}/workspace.yaml"
|
|
828
944
|
fi
|
|
829
945
|
|
|
830
|
-
# .mcp.json (
|
|
946
|
+
# ── .mcp.json (optionnel) ─────────────────────────────────
|
|
831
947
|
if [ -f "${profile_path}.mcp.json" ]; then
|
|
832
|
-
ok "${pname}/.mcp.json
|
|
948
|
+
ok "${pname}/.mcp.json"
|
|
833
949
|
else
|
|
834
950
|
log "${D} ${pname}/.mcp.json absent (utilisera le global)${N}"
|
|
835
951
|
fi
|
|
836
952
|
|
|
837
|
-
#
|
|
953
|
+
# ── state.db ──────────────────────────────────────────────
|
|
954
|
+
if [ -f "${profile_path}state.db" ]; then
|
|
955
|
+
ok "${pname}/state.db"
|
|
956
|
+
else
|
|
957
|
+
log "${D} ${pname}/state.db non créé (sera créé au premier run)${N}"
|
|
958
|
+
fi
|
|
959
|
+
|
|
960
|
+
# ── skills/ (optionnel) ───────────────────────────────────
|
|
838
961
|
if [ -d "${profile_path}skills" ]; then
|
|
839
962
|
SKILL_COUNT=$(find "${profile_path}skills" -name "SKILL.md" 2>/dev/null | wc -l | tr -d ' ')
|
|
840
|
-
|
|
841
|
-
ok "${pname}/skills/ (${SKILL_COUNT} skill(s))"
|
|
842
|
-
fi
|
|
963
|
+
ok "${pname}/skills/ (${SKILL_COUNT} skill(s))"
|
|
843
964
|
fi
|
|
844
965
|
|
|
845
|
-
# memories/ (optionnel)
|
|
966
|
+
# ── memories/ (optionnel) ─────────────────────────────────
|
|
846
967
|
if [ -f "${profile_path}memories/MEMORY.md" ]; then
|
|
847
968
|
ok "${pname}/memories/MEMORY.md"
|
|
848
969
|
fi
|
|
849
970
|
|
|
850
|
-
# auth.json (cache credentials — vérifier pas stale)
|
|
851
|
-
if [ -f "${profile_path}auth.json" ]; then
|
|
852
|
-
AUTH_AGE=$(($(date +%s) - $(stat -f %m "${profile_path}auth.json" 2>/dev/null || stat -c %Y "${profile_path}auth.json" 2>/dev/null || echo 0)))
|
|
853
|
-
if [ "$AUTH_AGE" -gt 604800 ]; then
|
|
854
|
-
track_warn "${pname}/auth.json stale (${AUTH_AGE}s — >7j). Peut causer des 401/429."
|
|
855
|
-
else
|
|
856
|
-
ok "${pname}/auth.json (récent)"
|
|
857
|
-
fi
|
|
858
|
-
fi
|
|
859
|
-
|
|
860
971
|
echo
|
|
861
972
|
done
|
|
862
973
|
fi
|
|
863
974
|
|
|
864
|
-
#
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
track_warn "~/.overmind/${check_dir}/ MANQUANT"
|
|
871
|
-
mkdir -p "$OM_DIR/$check_dir" 2>/dev/null || true
|
|
872
|
-
fi
|
|
873
|
-
done
|
|
874
|
-
|
|
875
|
-
# Vérifier les symlinks cassés (runs/, agents/ legacy)
|
|
876
|
-
for legacy_link in "hermes/runs" "hermes/agents" "hermes/sessions"; do
|
|
877
|
-
if [ -L "$OM_DIR/$legacy_link" ]; then
|
|
878
|
-
if [ ! -e "$OM_DIR/$legacy_link" ]; then
|
|
879
|
-
track_warn "Symlink cassé: ~/.overmind/${legacy_link} → suppression"
|
|
880
|
-
rm -f "$OM_DIR/$legacy_link" 2>/dev/null || true
|
|
881
|
-
else
|
|
882
|
-
ok "Symlink legacy: ~/.overmind/${legacy_link} → OK"
|
|
883
|
-
fi
|
|
884
|
-
fi
|
|
885
|
-
done
|
|
886
|
-
|
|
887
|
-
# Vérifier bridge/agents.json (sessions runtime)
|
|
888
|
-
if [ -f "$OM_DIR/bridge/agents.json" ]; then
|
|
975
|
+
# ─── 5. Vérifier bridge/agents.json ───────────────────────────
|
|
976
|
+
if [ ! -f "$OM_DIR/bridge/agents.json" ]; then
|
|
977
|
+
log "${D}bridge/agents.json absent → création vide${N}"
|
|
978
|
+
echo '{}' > "$OM_DIR/bridge/agents.json" 2>/dev/null || true
|
|
979
|
+
ok "bridge/agents.json créé"
|
|
980
|
+
else
|
|
889
981
|
SESSION_COUNT=$(grep -c '"id"' "$OM_DIR/bridge/agents.json" 2>/dev/null || echo 0)
|
|
890
982
|
ok "bridge/agents.json (${SESSION_COUNT} session(s))"
|
|
891
|
-
else
|
|
892
|
-
log "${D}bridge/agents.json absent (créé au premier run)${N}"
|
|
893
983
|
fi
|
|
894
984
|
|
|
895
|
-
# Vérifier .mcp.json global
|
|
896
|
-
if [ -f "$OM_DIR/.mcp.json" ]; then
|
|
985
|
+
# ─── 6. Vérifier .mcp.json global ─────────────────────────────
|
|
986
|
+
if [ ! -f "$OM_DIR/.mcp.json" ]; then
|
|
987
|
+
track_warn ".mcp.json global MANQUANT → création minimal"
|
|
988
|
+
cat > "$OM_DIR/.mcp.json" <<MCPEOF
|
|
989
|
+
{
|
|
990
|
+
"mcpServers": {
|
|
991
|
+
"memory": {
|
|
992
|
+
"transport": "httpStream",
|
|
993
|
+
"url": "http://localhost:${MCP_PORT_CORE}/mcp"
|
|
994
|
+
},
|
|
995
|
+
"postgres": {
|
|
996
|
+
"transport": "httpStream",
|
|
997
|
+
"url": "http://localhost:${MCP_PORT_PG}/mcp"
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
MCPEOF
|
|
1002
|
+
ok ".mcp.json créé"
|
|
1003
|
+
else
|
|
897
1004
|
MCP_SERVERS=$(grep -c '"transport"' "$OM_DIR/.mcp.json" 2>/dev/null || echo 0)
|
|
898
1005
|
ok ".mcp.json global (${MCP_SERVERS} serveur(s) MCP)"
|
|
899
|
-
else
|
|
900
|
-
track_warn ".mcp.json global MANQUANT"
|
|
901
1006
|
fi
|
|
902
1007
|
|
|
903
|
-
ok "Audit
|
|
1008
|
+
ok "Audit + réparation terminé"
|
|
904
1009
|
|
|
905
1010
|
# ================================================================
|
|
906
1011
|
# STEP 11/11 — Validation finale
|
|
@@ -128,12 +128,14 @@ automatiquement quels env vars provider-specific seed (e.g. `MINIMAX_CN_API_KEY`
|
|
|
128
128
|
│ └── agents/<agent>.md ← (legacy, ignoré par Hermes)
|
|
129
129
|
├── .mcp.json ← registre MCP servers HTTP
|
|
130
130
|
├── .env ← tokens + secrets ($VAR)
|
|
131
|
-
├── .overmind/hermes/ ← HERMES_HOME (root
|
|
132
|
-
│ ├──
|
|
133
|
-
│
|
|
134
|
-
│
|
|
135
|
-
│
|
|
136
|
-
│
|
|
131
|
+
├── .overmind/hermes/ ← HERMES_HOME (root partagé, injecté par HermesRunner)
|
|
132
|
+
│ ├── config.yaml ← Config globale Hermes (auto-bootstrappé)
|
|
133
|
+
│ ├── auth.json ← Credential pool
|
|
134
|
+
│ └── profiles/<agent>/ ← COUCHE 2 (canonique v3.1)
|
|
135
|
+
│ ├── config.yaml ← Provider + model + mcp_servers
|
|
136
|
+
│ ├── SOUL.md ← Persona de l'agent
|
|
137
|
+
│ ├── .env ← Clés API spécifiques
|
|
138
|
+
│ └── state.db ← Sessions + state local
|
|
137
139
|
│ ├── auth.json ← COUCHE 3 (credential pool, Hermes global)
|
|
138
140
|
│ ├── sessions/ logs/ ← partagés entre agents
|
|
139
141
|
└── src/ ← code source Overmind (si dev)
|
|
@@ -141,7 +143,7 @@ automatiquement quels env vars provider-specific seed (e.g. `MINIMAX_CN_API_KEY`
|
|
|
141
143
|
|
|
142
144
|
**3 couches pour 3 raisons :**
|
|
143
145
|
- **Source** `.claude/settings_<name>.json` = portable entre 4 runners (Claude/Kilo/OpenClaw/Hermes)
|
|
144
|
-
- **Canonique** `.overmind/hermes/
|
|
146
|
+
- **Canonique** `.overmind/hermes/profiles/<name>/config.yaml` = ce qu'Hermes upstream lit (via HERMES_HOME injecté par HermesRunner)
|
|
145
147
|
- **Globale** `.overmind/hermes/config.yaml` + `auth.json` = état partagé, géré par Hermes upstream
|
|
146
148
|
|
|
147
149
|
### 4.3 La subtilisation — TABLE DE MAPPING (le coeur du fix 2.8.x)
|
|
@@ -246,7 +248,7 @@ de matcher mais ça peut casser.
|
|
|
246
248
|
|
|
247
249
|
### 6.3 Le persona de l'agent (SOUL.md)
|
|
248
250
|
|
|
249
|
-
|
|
251
|
+
**`~/.overmind/hermes/profiles/sniperbot_analyst/SOUL.md`**
|
|
250
252
|
|
|
251
253
|
Ce fichier est créé automatiquement par le runner au premier spawn, mais
|
|
252
254
|
tu peux le pré-créer. Format : markdown libre.
|
|
@@ -276,7 +278,7 @@ toujours via les outils MCP Discord (jamais de texte brut après un appel).
|
|
|
276
278
|
**`~/overmind-workflow/.overmind/hermes/config.yaml`**
|
|
277
279
|
|
|
278
280
|
Ce fichier est créé automatiquement par le runner Overmind au premier
|
|
279
|
-
spawn (depuis `~/.hermes/config.yaml` par défaut). Contient au minimum :
|
|
281
|
+
spawn (depuis `~/.overmind/hermes/config.yaml` par défaut). Contient au minimum :
|
|
280
282
|
|
|
281
283
|
```yaml
|
|
282
284
|
mcp_servers:
|
|
@@ -421,7 +423,7 @@ curl http://localhost:3001/status # bridge
|
|
|
421
423
|
| Sniperbot dit "j'ai pas de MCP" mais log montre 69 tools registered | SOUL.md désaligné | Réécrire le SOUL.md pour lister les vrais tools |
|
|
422
424
|
| "Provider: openrouter" au lieu de "minimax-cn" | `--provider` flag pas passé | Vérifier que le runner a `--provider` dans cleanArgs |
|
|
423
425
|
| `EXIT_CODE_1` sur le bridge | MCP server tourne l'ancien build | `pkill -f overmind && overmind start &` |
|
|
424
|
-
| "Erreur inconnue" générique | Stale state dans
|
|
426
|
+
| "Erreur inconnue" générique | Stale state dans l'ancien layout | Migrer vers `~/.overmind/hermes/profiles/<name>/` (le script `install-overmind-native.sh` le fait auto) |
|
|
425
427
|
| `cleanupTempFiles` efface le settings.json canonique | settings.json pushé dans `tempFiles` | Bug fixé en 2.8.32 — ne pas push |
|
|
426
428
|
|
|
427
429
|
---
|
|
@@ -165,7 +165,7 @@ Ce que tu n'as PAS besoin de faire
|
|
|
165
165
|
- Tu n'as pas à lire plugins/model-providers/minimax/init.py
|
|
166
166
|
- Tu n'as pas à mapper manuellement $KEY vers le bon provider
|
|
167
167
|
- Tu n'as pas à tester 50 combinaisons d'env var names
|
|
168
|
-
- Tu n'as pas à te soucier du cwd du process pour HERMES_HOME
|
|
168
|
+
- Tu n'as pas à te soucier du cwd du process pour HERMES_HOME (v3.1: injecté par HermesRunner)
|
|
169
169
|
|
|
170
170
|
Tu mets ton token, Overmind s'occupe du reste.
|
|
171
171
|
|
|
@@ -11,7 +11,7 @@ Workflow/.env (~/.env)
|
|
|
11
11
|
↓
|
|
12
12
|
settings_[agent].json → env (apres interpolation $VAR par process.env)
|
|
13
13
|
↓
|
|
14
|
-
HERMES_HOME/.env (~/.hermes/.env) ← DERNIER MOT
|
|
14
|
+
HERMES_HOME/.env (~/.overmind/hermes/.env) ← DERNIER MOT (v3.1: HERMES_HOME injecté par HermesRunner)
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
**Detail du code** (`NousHermesRunner.ts` l.268-456):
|
|
@@ -36,7 +36,7 @@ Donc le `.hermes/.env` de l'agent a **toujours le dernier mot**. Si tu mets `MIN
|
|
|
36
36
|
|
|
37
37
|
| Fichier | Role |
|
|
38
38
|
|---|---|
|
|
39
|
-
| `HERMES_HOME/.env` | API keys globales Hermes (fallback) |
|
|
39
|
+
| `HERMES_HOME/.env` | API keys globales Hermes (~/.overmind/hermes/.env) (fallback) |
|
|
40
40
|
| `Workflow/.env` | Variables du workflow (DB, tokens, etc.) |
|
|
41
41
|
| `settings_[agent].json` | Config par agent (model, provider, tokens, MCP) |
|
|
42
42
|
| `HERMES_HOME/.hermes/config.yaml` | Config systeme Hermes (model.default, provider, etc.) |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "overmind-mcp",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.7",
|
|
4
4
|
"description": "Orchestrateur universel agents IA multi-modeles via MCP. Inclut le protocole 'Custom-Nickname' pour identifier vos agents avec des surnoms originaux (The Chaos Prophet, Shadow Sniper, etc.), l'isolation mémoire (Private Memory Context) et le support pour QwenCli et Nous Hermes. Installation automatique des dépendances Docker (PostgreSQL, pgvector) inclus.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|