feat(hermes): claude-code 2.1.223 -> manifest 2.1.280, model mappings (opus-5-5 / deepseek-v4.1-flash) + bridge url
This commit is contained in:
@@ -18,14 +18,16 @@
|
||||
port = 8050;
|
||||
};
|
||||
|
||||
# Pont vers l'API server Hermes. Un seul listener par hôte (le profil default,
|
||||
# cf. services/hermes) : un profil secondaire est servi sous /p/<profil>/.
|
||||
# HERMES_BRIDGE_URL n'est pas secret (loopback local), seule la clé l'est.
|
||||
# Pont vers l'API server Hermes. Un seul listener par hote : le gateway du
|
||||
# profil default sert tous les profils, celui d'un profil secondaire sous
|
||||
# /p/<profil>/ (cf. services/hermes). C'est CETTE route que consomme le cog,
|
||||
# pas un port dedie : elle n'ecoute que si le gateway tourne (8642).
|
||||
# HERMES_BRIDGE_URL n'est pas secret (loopback local), seule la cle l'est.
|
||||
systemd.services.discord-bot.serviceConfig.EnvironmentFile = lib.mkAfter [
|
||||
config.sops.secrets."discord_bot_hermes_bridge_env".path
|
||||
];
|
||||
systemd.services.discord-bot.environment = {
|
||||
HERMES_BRIDGE_URL = "http://127.0.0.1:8643/v1/chat/completions";
|
||||
HERMES_BRIDGE_URL = "http://127.0.0.1:8642/p/discord-bridge/v1/chat/completions";
|
||||
HERMES_BRIDGE_ROLE_NAME = "hermes";
|
||||
# Surface de test locale du cog (loopback, PAS ouverte au firewall) :
|
||||
# POST /hermes/ask {"message": "..."} -> {"answer": "..."}.
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"version": "2.1.280",
|
||||
"manifestSignatureEnforcement": "flag",
|
||||
"commit": "80abbfe7d7232280011ff01a21ae3338f4c6e372",
|
||||
"modsCommit": "8187baaaafb3a9ada02d3d6fb4e8d68587aef6b0",
|
||||
"buildDate": "2026-09-21T20:55:27Z",
|
||||
"platforms": {
|
||||
"darwin-arm64": {
|
||||
"binary": "claude",
|
||||
"checksum": "387a5c5dcdbb815085edf0baf79591f9d8894efe922bceaf3d75b1b08055229d",
|
||||
"size": 217254576
|
||||
},
|
||||
"darwin-x64": {
|
||||
"binary": "claude",
|
||||
"checksum": "c1d32d87630482250633208ab77855429b24010ae3086a7ff7539b57b93168d4",
|
||||
"size": 225565024
|
||||
},
|
||||
"linux-arm64": {
|
||||
"binary": "claude",
|
||||
"checksum": "92f2b4fd05d0bdcf7b9a0d4e0ecef4a1e4b368b290cd8fd07cff9a50013f45a2",
|
||||
"size": 233103352
|
||||
},
|
||||
"linux-x64": {
|
||||
"binary": "claude",
|
||||
"checksum": "1e08503dbdf3c2cb0d706d32f3408277388d1c76ef108673e8fe42c1b322925b",
|
||||
"size": 233709640
|
||||
},
|
||||
"linux-arm64-musl": {
|
||||
"binary": "claude",
|
||||
"checksum": "6a9f349dccd1c74ab854f1877c5ebdf074998571d0177e26c1f7f46f29e0f971",
|
||||
"size": 225457992
|
||||
},
|
||||
"linux-x64-musl": {
|
||||
"binary": "claude",
|
||||
"checksum": "8d25ffbf600882d7b985706cc10ea45995060637ed009b5700b65e162bb00b96",
|
||||
"size": 227467360
|
||||
},
|
||||
"win32-x64": {
|
||||
"binary": "claude.exe",
|
||||
"checksum": "0e4195524b73eb77efbdf3e2b36de5322a29f0ca575dfd2d9b4f946b1d425469",
|
||||
"size": 237100192
|
||||
},
|
||||
"win32-arm64": {
|
||||
"binary": "claude.exe",
|
||||
"checksum": "f49980314f4c0418079979723ffd6c0d00d57e60b26fd95c53e53155ed913bdf",
|
||||
"size": 225107104
|
||||
}
|
||||
},
|
||||
"sdkCompat": {
|
||||
"testedWrapperVersions": [
|
||||
"0.3.240",
|
||||
"0.3.241",
|
||||
"0.3.242",
|
||||
"0.3.243",
|
||||
"0.3.245",
|
||||
"0.3.246",
|
||||
"0.3.247",
|
||||
"0.3.248",
|
||||
"0.3.250",
|
||||
"0.3.251",
|
||||
"0.3.252",
|
||||
"0.3.257",
|
||||
"0.3.258",
|
||||
"0.3.259",
|
||||
"0.3.260",
|
||||
"0.3.261",
|
||||
"0.3.263",
|
||||
"0.3.266",
|
||||
"0.3.267",
|
||||
"0.3.268",
|
||||
"0.3.269",
|
||||
"0.3.270",
|
||||
"0.3.271",
|
||||
"0.3.272",
|
||||
"0.3.273",
|
||||
"0.3.274",
|
||||
"0.3.275",
|
||||
"0.3.276",
|
||||
"0.3.277",
|
||||
"0.3.278"
|
||||
],
|
||||
"harnessSchema": 1
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,20 @@
|
||||
lib,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
}: let
|
||||
# claude-code épinglé plus récent que nixpkgs 26.05 (2.1.223).
|
||||
# L'API refuse les modèles Opus 5.5 en dessous de 2.1.280 :
|
||||
# "API Error: 400 Claude Code 2.1.223 does not support this model;
|
||||
# version 2.1.280 or newer is required."
|
||||
# Le paquet nixpkgs prend son manifeste (version + checksums par plateforme)
|
||||
# en argument : on lui passe celui publié par Anthropic pour le canal stable
|
||||
# (https://downloads.claude.ai/claude-code-releases/2.1.280/manifest.json),
|
||||
# copié tel quel dans ./claude-code-manifest.json. Mise à jour = recopier le
|
||||
# manifeste d'une version plus récente, rien d'autre.
|
||||
claudeCode = pkgs.claude-code.override {
|
||||
manifest = lib.importJSON ./claude-code-manifest.json;
|
||||
};
|
||||
in {
|
||||
# Option : le token Matrix du bot @hermes (clé hermes_matrix_env de
|
||||
# secrets/hermes-matrix.yml). Les destinataires de ce fichier sops ne
|
||||
# contiennent PAS les clés age de anywhere/laptop : ne l'activer que sur les
|
||||
@@ -111,7 +124,7 @@
|
||||
# claude-subscription-directsdk (provider sur abonnement Claude Pro/Max,
|
||||
# login OAuth via `claude`, pas de clé API)
|
||||
extraPackages = [
|
||||
pkgs.claude-code
|
||||
claudeCode
|
||||
# node/npm : requis par le MCP GitHub (npx -y @modelcontextprotocol/server-github)
|
||||
pkgs.nodejs_22
|
||||
# binutils : donne `ld` et `objdump` sur le PATH, dont dépend le repli de
|
||||
@@ -189,8 +202,10 @@
|
||||
reasoning_overrides = {
|
||||
"deepseek/deepseek-v4.1-flash" = "high";
|
||||
"deepseek-v4.1-flash" = "high";
|
||||
"nvidia/nemotron-3-ultra-550b-a55b:free" = "high";
|
||||
"nemotron-3-ultra" = "high";
|
||||
"nvidia/nemotron-3-ultra-550b-a55b:free" = "max";
|
||||
"nemotron-3-ultra" = "max";
|
||||
"claude-opus-5-5[1m]" = "max";
|
||||
"claude-opus-5-5" = "max";
|
||||
"claude-opus-5[1m]" = "max";
|
||||
"claude-opus-5" = "max";
|
||||
"claude-sonnet-5[1m]" = "high";
|
||||
@@ -290,14 +305,34 @@
|
||||
provider = "claude-subscription-directsdk-experimental";
|
||||
model = "claude-opus-5[1m]";
|
||||
};
|
||||
# Nino : Opus 5.5 (route native `claude-opus-5-5`, tirets ; la forme
|
||||
# `claude-opus-5.5` est rejetée par le CLI). Variante [1m] = 1M de
|
||||
# contexte ; effort max via reasoning_overrides.
|
||||
# Nino : DeepSeek v4.1 Flash (OpenRouter), 1er secours par defaut.
|
||||
"!zOyDctBWcuFCJKJINI:matrix.marcpartensky.com" = {
|
||||
provider = "claude-subscription-directsdk-experimental";
|
||||
model = "claude-opus-5[1m]";
|
||||
provider = "openrouter";
|
||||
model = "deepseek/deepseek-v4.1-flash";
|
||||
};
|
||||
"!sylSYxsYVJRknngRnF:matrix.marcpartensky.com" = {
|
||||
provider = "claude-subscription-directsdk-experimental";
|
||||
model = "claude-sonnet-5[1m]";
|
||||
};
|
||||
"!JgWSzbTBCRPEOQTAZi:matrix.marcpartensky.com" = {
|
||||
provider = "claude-subscription-directsdk-experimental";
|
||||
model = "claude-sonnet-5[1m]";
|
||||
};
|
||||
"!ANuTSqPZhKzHOpvXhB:matrix.marcpartensky.com" = {
|
||||
provider = "claude-subscription-directsdk-experimental";
|
||||
model = "claude-sonnet-5[1m]";
|
||||
};
|
||||
"!myvmCEICVnXNIOxHSQ:matrix.marcpartensky.com" = {
|
||||
provider = "claude-subscription-directsdk-experimental";
|
||||
model = "claude-sonnet-5[1m]";
|
||||
};
|
||||
"!ABhBVVGeBoBEvuiFSY:matrix.marcpartensky.com" = {
|
||||
provider = "claude-subscription-directsdk-experimental";
|
||||
model = "claude-sonnet-5[1m]";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -367,6 +402,24 @@
|
||||
timeout = 60;
|
||||
};
|
||||
|
||||
# --- MCP Pangolin : serveur auto-hébergé (pangolin.vps.marcpartensky.com) ---
|
||||
# DÉSACTIVÉ TEMPORAIREMENT (29/09/2026) : sops.secrets."pangolin/api_key"
|
||||
# ci-dessous n'a jamais eu de clé correspondante dans secrets/common.yml
|
||||
# (nested pangolin.api_key absent), ce qui fait échouer TOUT
|
||||
# nixos-rebuild switch sur tower ("the key 'pangolin' cannot be found").
|
||||
# Déjà noté comme inerte (clé/URL placeholder) avant ce blocage. Réactiver
|
||||
# une fois la vraie clé posée par marc (il a la clé age privée pour éditer
|
||||
# secrets/common.yml en place).
|
||||
# services.hermes-agent.mcpServers.pangolin = {
|
||||
# command = "/nix/store/pw5hn1g2icm9ll7li8qiy1wkpdzvkcs1-pangolin-mcp/bin/pangolin-mcp";
|
||||
# args = [ ];
|
||||
# env = {
|
||||
# PANGOLIN_BASE_URL = "https://pangolin.vps.marcpartensky.com/v1";
|
||||
# PANGOLIN_API_KEY_FILE = config.sops.secrets."pangolin/api_key".path;
|
||||
# };
|
||||
# timeout = 60;
|
||||
# };
|
||||
|
||||
# --- MCP Vaultwarden : temporairement désactivé (blocage sops manifest) ---
|
||||
# services.hermes-agent.mcpServers.vaultwarden = {
|
||||
# command = "vaultwarden-mcp";
|
||||
@@ -387,7 +440,7 @@
|
||||
# ~/.hermes-update-in-progress. Sans python3 dans le PATH ssh, TOUTE connexion
|
||||
# Desktop en SSH echoue avec "Could not prove that the remote Hermes install
|
||||
# is clear for SSH startup." (verifie le 27/09/2026)
|
||||
environment.systemPackages = [pkgs.claude-code pkgs.python3];
|
||||
environment.systemPackages = [claudeCode pkgs.python3];
|
||||
|
||||
sops.secrets."hermes_env" = {};
|
||||
|
||||
@@ -404,6 +457,12 @@
|
||||
sopsFile = ../../secrets/discord-hermes-bridge.yml;
|
||||
};
|
||||
|
||||
# Clé API Pangolin pour le MCP server (clé "pangolin/api_key" du fichier sops)
|
||||
# À ajouter (chiffrée) dans secrets/common.yml, clé imbriquée pangolin.api_key.
|
||||
# Commenté avec le bloc mcpServers.pangolin ci-dessus (29/09/2026) : la clé
|
||||
# n'existe pas dans secrets/common.yml, ça faisait échouer tout switch.
|
||||
# sops.secrets."pangolin/api_key" = {};
|
||||
|
||||
# Token Matrix du bot (@hermes) — clé "hermes_matrix_env" du fichier sops,
|
||||
# valeur = contenu dotenv (MATRIX_ACCESS_TOKEN=...) fusionné dans .env.
|
||||
# Déclaré uniquement là où l'option est active : les destinataires du fichier
|
||||
|
||||
Reference in New Issue
Block a user