Aller au contenu

Journal des modifications

Dernière mise à jour : 20 octobre 2026


Toutes les modifications notables de ce projet sont documentées dans ce fichier.


[v202612-beta3] - 20/10/2026

Ajouts

  • Outil de mise à jour (tolk-setup.sh) : charge l'image, crée .env à la première installation ; lors d'une mise à jour, réconcilie .env avec la version (nouveaux paramètres ajoutés à leur place avec leur valeur par défaut, PROJECT_* actualisées, sauvegarde de .env, aperçu --dry-run).
  • CUCM — Support codecs RoomOS (SERVER_CUCM_ROOMOS_ENABLED) : terminaux RoomOS pilotés par leur xAPI en HTTPS.
  • cucm_phone_web_info : lit les pages d'information web d'un téléphone IP Cisco 88xx/98xx, restituées analysées : équipement, configuration réseau, Ethernet, ports réseau/accès (voisin CDP/LLDP), flux RTP 1-5, messages d'état, affichage debug, noms des fichiers de logs console / core dumps, plusieurs pages (liste pages) ou toutes les pages en une fois, avec sortie facultative compact (sans champs vides ni compteurs à zéro) et summary (un résumé par page). Horodatages en heure locale du téléphone et en UTC (time_utc, d'après le fuseau IANA du téléphone) ; truncated signale un tampon de 10 lignes plein. Audit de sécurité : objet trust_list (mode de sécurité, fichier ITL/CTL, signature, empreinte, serveurs TFTP/CAPF/TVS, dernière mise à jour, dernier rapport DeviceTLInfo) et option compare_cucm comparant l'empreinte ITL du téléphone à la base CUCM (tftptlinfo / devicetlinfo, AXL executeSQLQuery). Plusieurs téléphones à la fois avec ip_phones (liste, exclusive de ip_phone) : téléphones lus en parallèle, un résultat par téléphone avec un statut global ok / partial / error et des compteurs, compact activé par défaut, page="all" uniquement avec summary, budget de temps global, une seule comparaison CUCM groupée et un trust_summary de parc (empreintes ITL distinctes, téléphones match / mismatch / unknown). Mêmes prérequis que la capture d'écran (identifiants cucm-phone, Web Access activé). Nouvelle opération RBAC téléphone web_info (accordée aux profils admin, operator et auditor ; un créneau de limitation de débit par téléphone) et nouveaux paramètres SERVER_CUCM_PHONE_WEB_TIMEOUT, SERVER_CUCM_PHONE_WEB_MAX_TARGETS, SERVER_CUCM_PHONE_WEB_CONCURRENCY et SERVER_CUCM_PHONE_WEB_BATCH_TIMEOUT.
  • cucm_restart_feature_service : redémarre un service fonctionnel CUCM (ex. Cisco Tftp) sur un nœud via l'API SOAP Serviceability (ControlCenterServices).
  • Interface Web d'administration — Outils > Test de connectivité : teste l'accès à un produit / terminal (réseau, TLS, identifiants, API, SSH ; lecture du hash ITL / CTL des téléphones IP et codecs RoomOS, sans comparaison) et permet de l'ajouter à un client.
  • Interface Web d'administration — Prompts personnalisés : synthèse de fin de workflow commune : nouvelle option Ajouter la synthèse de fin de workflow commune ("summary": true dans le fichier de définition) ; l'agent IA termine alors le workflow par une courte synthèse client (opération, résultat global, chiffres clés, modifications, points d'attention, actions restantes, retour arrière), complétée par la section ## Summary specifics propre au prompt.

Modifications

  • Interface Web d'administration — UID / GID : l'utilisateur du conteneur est désormais affiché et modifiable dans Paramètres globaux → Server → Conteneur Docker (0 = root refusé). Les deux clés sont désormais actives dans .env (défaut 1000, comme auparavant) ; lors d'une mise à jour, les lignes commentées #UID / #GID sont activées sur place avec 1000.
  • Interface Web d'administration — cohérence de AUTH_MODE : un mode plus restrictif que le mode d'authentification propre d'un client est désormais refusé (le serveur ne redémarrait plus) ; le passage en jwt+oauth2 attribue le mode précédent à chaque client existant ; l'annulation de AUTH_MODE ou des clients seuls est refusée lorsque la paire ne correspondrait plus. AUTH_MODE est désormais mis en attente comme les clients : le serveur en cours conserve son mode jusqu'à Appliquer & redémarrer.
  • Interface Web d'administration — certificat TLS auto-signé au-delà de sa mi-vie : comme il n'est régénéré qu'au démarrage, la tuile de l'en-tête indique désormais REDÉMARRAGE REQUIS (lien vers Appliquer & redémarrer), le bandeau de redémarrage s'affiche sur toutes les pages et le certificat est listé comme modification en attente (auteur Système).
  • Interface Web d'administration — Sauvegarde / Restauration : le bouton Exporter en SFTP maintenant est désactivé en l'absence de sauvegarde système locale.
  • Interface Web d'administration — sessions : Rester connecté n'expire plus sur inactivité (la session reste valable ADMIN_UI_SESSION_REMEMBER_DAYS jours).
  • Interface Web d'administration — nouveaux paramètres signalés : les paramètres ajoutés par une mise à jour sont signalés en bleu (tuile d'en-tête, points dans les menus / onglets, lignes) jusqu'à « Marquer comme vus », modification, ou au bout de 7 jours.
  • cucm_phone_send_message : prise en charge multi-terminaux — un même message envoyé en parallèle à 50 téléphones IP maximum. L'argument terminal_type est supprimé : l'outil cible uniquement les téléphones IP Cisco 88xx / 98xx, les codecs RoomOS utilisent cucm_roomos_send_message.
  • cucm_risport_query : prise en charge multi-terminaux — jusqu'à 1000 noms de terminaux (ou wildcard *) résolus en UNE seule requête RisPort.
  • CUCM — purge des journaux de campagnes de mise à jour : le garbage collector nocturne (03:15) supprime les journaux des campagnes terminées (completed / aborted) ou jamais démarrées plus anciennes que SERVER_CUCM_PHONE_CAMPAIGN_RETENTION_DAYS (téléphones IP) / SERVER_CUCM_ROOMOS_CAMPAIGN_RETENTION_DAYS (RoomOS), 30 jours par défaut (0 = jamais purgés).

Corrections

  • CUCM — AXL busyLampField (BLF) : une BLF vers un DN interne ne pouvait pas être écrite — blfDest est obligatoire dans le schéma AXL (Missing element blfDest si absent / null) alors que CUCM le refuse, même vide, à côté de blfDirn. Le serveur omet désormais blfDest pour les entrées portant blfDirn et retire les blfDirn / routePartition vides des entrées vers un numéro externe dans les opérations add* / update* ; une entrée avec à la fois ou aucun de blfDest / blfDirn est refusée avant d'atteindre CUCM.
  • CUCM — AXL returnedTags : les membres d'un xsd:choice demandés avec une valeur vide (ex. blfDirn / routePartition d'une BLF) étaient silencieusement retirés des requêtes get* / list* ; CUCM les renvoyait donc à null (une BLF vers un DN interne paraissait orpheline).

Prompts Customs

  • CUCM — workflow de mise à jour Phones : campagnes pilotées par le serveur, contrôles ITL, suivi automatique, journal persistant et rapport final.
  • CUCM — workflow de mise à jour RoomOS : campagnes pilotées par le serveur, contrôles ITL/CTL et Room Navigator, suivi automatique, journal persistant et rapport final.
  • CUCM — workflow d'édition du phonebook RoomOS : campagnes pilotées par le serveur, contrôles ITL/CTL et Room Navigator, suivi automatique, journal persistant et rapport final.
  • CUCM — workflow d'installation d'un COP File : installation d'un COP en global sur le cluster, ou par node avec un ordre défini.
  • CUCM — workflow d'édition des BLF d'un téléphone : deux formats d'entrée explicites — DN interne et numéro externe.
  • CUCM — tous les workflows : synthèse client de fin de workflow activée, avec les spécificités de chaque workflow (mise à jour Phones / RoomOS, installation de COP File, édition des BLF et du phonebook RoomOS).

Dépendances

- bcrypt==5.0.0
- colorlog==6.12.0
- cryptography==50.0.2
- fastmcp==3.4.9
- lxml==6.1.3
- Markdown==3.11.2
- matplotlib==3.11.2
- mcp==1.30.0
- numpy==2.5.4
- paramiko==5.1.0
- pillow==13.0.0
- prometheus_client==0.26.0
- pydantic==2.14.1
- pydantic-settings==2.16.1
- PyJWT==2.15.1
- python-dotenv==1.2.4
- python-multipart==0.0.32
- requests==2.34.2
- starlette==1.9.0
- tzdata==2026.5
- urllib3==2.8.0
- weasyprint==70.0
- zeep==4.3.3
- bandit==1.9.4
- httpx2==2.16.0
- mypy==2.4.0
- pip==26.2.1
- pip-audit==2.10.1
- pip-check==3.2.1
- pre-commit==4.7.0
- pymupdf==2.0
- pytest==9.1.1
- pytest-asyncio==1.4.0
- pytest-cov==7.1.0
- pytest-timeout==2.4.0
- pytest-xdist==3.8.0
- PyYAML==6.0.3
- ruff==0.17.1
- OS : Debian GNU/Linux 13.7 (trixie)
- Python : 3.13.13 (image de base python:3.13-slim)

[v202609] - 30/09/2026

Ajouts

CUCM

  • Nouvel outil cucm_phone_send_message : envoyer un message texte à l'écran d'un téléphone IP Cisco (88xx/98xx) ou d'un terminal RoomOS.

Sécurité

  • Limitation globale du nombre de requêtes : limite cumulative protégeant chaque serveur Cisco de destination.
  • Blocage manuel d'IP (page Système) : accepte une IP ou un sous-réseau CIDR (IPv4/IPv6), une portée (UI Web, MCP ou les deux) et une durée de déblocage automatique en minutes / heures / jours, ou jamais (permanent jusqu'au déblocage manuel). Un blocage de portée UI Web interdit toute l'UI d'administration à cette adresse ; bloquer sa propre adresse est refusé.
  • Prise en charge des reverse proxies : nouveaux paramètres TRUSTED_PROXY_IPS (proxies de confiance, IP réelle du client lue dans X-Forwarded-For) et MCP_SERVER_PUBLIC_URL (URL publique annoncée derrière une VIP).

Diagnostic

  • Show tech : détails des clients, adresses IPv4 partiellement masquées, modifications en attente incluses.
  • /metrics, /status et /health : nouvelles métriques et informations (statistiques, certificat de l'UI d'administration).

Mode maintenance

  • Nouveau mode maintenance pour vider le trafic MCP avant une mise à jour ou un redémarrage : les nouvelles sessions sont refusées, les sessions en cours se poursuivent.
  • Les clients connectés sont refusés après MAINTENANCE_IDLE_TIMEOUT_SECONDS d'inactivité (ou après MAINTENANCE_MAX_DRAIN_SECONDS) ; /health passe à maintenance une fois tous les clients partis.

UI Web d'administration

  • Nouvelle UI Web d'administration : console d'administration du serveur Tolk accessible depuis un navigateur.
  • Le lien de l'icône d'aide (?) peut être édité — par exemple vers un site interne de documentation.
  • Certificats : génération de CSR avec SAN modifiables.

Modifications

  • État des certificats TLS (zone Sécurité du tableau de bord, Système & rechargement, contrôle Appliquer & redémarrer, tuile d'en-tête) : même règle pour tous les certificats et types — vert, orange dès que 50 % de la durée de vie est écoulée (renouvellement conseillé), rouge si expiré. Les certificats signés par une CA n'utilisent plus le seuil fixe de 30 jours.

Corrections

  • Un certificat auto-signé de l'interface d'administration était considéré comme signé par une CA après un redémarrage (jamais renouvelé à mi-vie, mauvaise couleur d'état).
  • L'état TLS du tableau de bord / de l'en-tête n'était calculé qu'au démarrage ; il est désormais évalué en direct, et la tuile d'en-tête renvoie vers la carte TLS de la page Système & rechargement.
  • Statistiques › Pipeline : les sondes d'infrastructure (/health, /status, /metrics — HEALTHCHECK Docker, supervision, show tech) ne sont plus comptées dans les étapes Transport, HTTP et Authentification ; le Pipeline reste vide après une réinitialisation des statistiques, comme les autres graphiques.
  • Statistiques : après un redémarrage, les plages 5 min / 1 h / 24 h (en mémoire) perdaient toutes les requêtes antérieures, alors que 7 j / 30 j / 1 an (historique persistant) les conservaient — une plage longue pouvait afficher plus de requêtes qu'une plage courte couvrant la même activité. Les fenêtres en direct sont désormais reconstruites depuis l'historique horaire au démarrage (événements répartis sur leur heure) : toutes les plages concordent.
  • Statistiques : un redémarrage sur place (Appliquer et redémarrer, réconciliation de licence) perdait jusqu'à une minute de statistiques non encore enregistrées ; elles sont désormais enregistrées avant le redémarrage.
  • Statistiques › Pipeline : les requêtes /health, /status, /metrics, /authorize (POST) et /token étaient comptées deux fois à l'étape HTTP.

Dépendances

- bcrypt==5.0.0
- colorlog==6.12.0
- cryptography==50.0.2
- fastmcp==3.4.7
- lxml==6.1.3
- Markdown==3.11
- matplotlib==3.11.2
- mcp==1.29.0
- numpy==2.5.3
- paramiko==5.0.0
- pillow==12.3.0
- prometheus_client==0.26.0
- pydantic==2.13.5
- pydantic-settings==2.15.0
- PyJWT==2.15.1
- python-dotenv==1.2.4
- python-multipart==0.0.32
- requests==2.34.2
- starlette==1.7.0
- urllib3==2.8.0
- weasyprint==70.0
- zeep==4.3.3
- bandit==1.9.4
- freezegun==1.5.5
- httpx==0.28.1
- httpx2==2.13.1
- msgpack==1.2.3
- mypy==2.3.1
- pip==26.2.1
- pip-audit==2.10.1
- pre-commit==4.6.2
- pymupdf4llm==1.28.2
- pytest==9.1.1
- pytest-asyncio==1.4.0
- pytest-cov==7.1.0
- pytest-timeout==2.4.0
- pytest-xdist==3.8.0
- PyYAML==6.0.3
- ruff==0.16.9

[v202606] - 25/06/2026

Ajouts

CUC (Cisco Unity Connection) — nouveau module produit

  • Nouveau module produit cuc, conditionné par le claim de licence signé "cuc".
  • Versions supportées : CUC v14 & v15.
  • 13 outils MCP répartis entre CUPI REST (get_version, cupi_list, cupi_call, …), SSH OS Admin (os_run_command), diagnostics de connectivité et gestion des identifiants.
  • Prompts : cuc/procedure, cuc/security_audit.
  • Ressources : 8 chapitres du guide CLI VOS, 3 chapitres du Security Guide (optionnels), ainsi qu'un catalogue d'endpoints CUPI (~80 endpoints) packagé sous docs://cuc/cupi/reference et référencé par les prompts CUC.
  • À noter : client CUPI (REST /vmrest/) avec vérification TLS obligatoire ; même modèle RBAC et même schéma d'identifiants que CUCM / IMP.

Autres ajouts

  • Mutualisation des sessions SSH (SSH Pooling)
  • Métriques Prometheus du pool SSH : occupation en temps réel, histogramme de réutilisation des commandes, compteur de succès.
  • Auto-découverte RBAC pour les clients MCP : nouvel outil infra_get_my_permissions(product?) et matrice intégrée à infra_init_session.
  • Découverte documentaire pour les clients tools-only : nouveaux outils infra_list_docs() / infra_get_doc(name|uri).

Modifications

  • Mentions « read-only » trompeuses supprimées des outils *_axl_call, *_os_run_command, cuc_cupi_call et listings associés — les permissions dépendent désormais du profil RBAC de l'appelant.
  • Prompts procedure (CUCM / IMP / CUC) : le LLM est invité à appeler infra_get_my_permissions(<product>) avant toute opération d'écriture/admin.

Dépendances

- bcrypt==5.0.0
- colorlog==6.10.1
- cryptography==49.0.0
- fastmcp==3.2.4
- lxml==6.1.1
- Markdown==3.10.2
- matplotlib==3.11.0
- mcp==1.28.0
- numpy==2.5.0
- paramiko==5.0.0
- Pillow==12.2.0
- prometheus_client==0.25.0
- pydantic==2.13.4
- pydantic-settings>=2.14.2
- PyJWT==2.13.0
- python-dotenv==1.2.2
- python-multipart==0.0.32
- requests==2.34.2
- starlette==1.3.1
- urllib3==2.7.0
- weasyprint==69.0
- zeep==4.3.3
- bandit>=1.7
- freezegun==1.5.5
- httpx==0.28.1
- msgpack>=1.2.1
- mypy>=1.11
- pip>=26.1.2
- pip-audit>=2.7
- pre-commit==4.6.0
- pymupdf4llm>=0.0.17
- pytest==9.1.1
- pytest-asyncio==1.4.0
- pytest-cov==7.1.0
- pytest-timeout>=2.3
- pytest-xdist>=3.6
- PyYAML>=6.0.2
- ruff==0.15.19

[v202605] - 31/05/2026

Ajouts

Cœur applicatif

  • Serveur FastMCP Streamable HTTP, configuré via .env.
  • Bootstrap automatique au démarrage : paire de clés RSA-4096, sel serveur, répertoires clients, tokens JWT, vérification de la licence.
  • Synchronisation des clients avec AUTH_CLIENTS à chaque démarrage (création / renouvellement / purge).
  • Endpoints HTTP : /health, /metrics (Prometheus), /status.
  • Journalisation structurée (app.log JSON + audit.log dédié).

Sécurité

  • Déploiement air-gapped ou hybride, sans dépendance cloud.
  • TLS obligatoire (auto-signé ou signé par une CA).
  • Authentification client : tokens bearer RS256, mode JWT ou OAuth2 Client Credentials (avec PKCE).
  • RBAC avec profils admin / operator / auditor, personnalisables par client.
  • Isolation des données par client ; identifiants chiffrés par une clé Fernet dédiée (PBKDF2-SHA512).
  • Piste d'audit JSON complète avec assainissement des caractères de contrôle.
  • Durcissement transport : HTTPS, protection DNS rebinding, validation Host/Origin/Content-Type.
  • Vérification d'empreinte SSH + certificat HTTPS avant toute connexion Cisco UC.
  • Validation Pydantic sur toutes les entrées d'outils MCP.
  • Rate limiting par client (fenêtre glissante) et détection Fail2ban par IP.
  • Politique de configuration .env-only.

Performance & Stabilité

  • Caches LRU bornés sur les clients Zeep/WSDL.
  • Réduction de la contention sur le verrou de stockage des identifiants.

Observabilité

  • Fenêtres glissantes 24 h en mémoire, compteurs Prometheus pour les requêtes HTTP et les appels d'outils MCP.
  • Lignes d'audit dédiées aux échecs (outils / ressources / prompts) avec type d'erreur et incrément de métrique.
  • Redaction étendue des bundles show-tech sur tous les motifs de clés sensibles.

Licences

  • Licences JWT signées RS256 émises hors ligne (VALID / GRACE / EXPIRED / INVALID), liaison hostname optionnelle, watchdog en arrière-plan, inspecteur CLI autonome.

Sauvegarde & Restauration

  • Sauvegardes chiffrées périodiques (RSA-4096 + AES-256-GCM + sidecar SHA-512), rétention locale, export SFTP optionnel.
  • Script de restauration avec vérification d'intégrité et remplacement en place sécurisé.

Mise à jour

  • Bundles de mise à jour signés (vérification RSA-PSS), prévisualisation --dry-run, sauvegarde automatique pré-upgrade, fusion .env sans écraser les valeurs client.

Rapports

  • Outils MCP write_report / read_report / export_report_pdf avec sortie Markdown, 9 types de graphiques et export PDF via WeasyPrint.

CUCM

  • Versions supportées : CUCM v14 & v15.
  • 20 outils MCP répartis entre AXL, RisPort70, SSH OS Admin et accès web des téléphones.
  • Prompts : cucm/procedure, cucm/security_audit.
  • Ressources : 8 chapitres du guide CLI VOS et 5 chapitres du Security Guide (R15).
  • À noter : capture d'écran des téléphones IP (phone_screenshot) ; prompt d'audit de sécurité basé sur le Cisco Security Guide R15.

IMP

  • Versions supportées : IMP v14 & v15.
  • 14 outils MCP répartis entre AXL et SSH OS Admin.
  • Prompts : imp/procedure, imp/security_audit.
  • Ressources : 8 chapitres du guide CLI VOS et 3 chapitres du Security Guide (R15).
  • À noter : même modèle RBAC et même schéma d'identifiants que CUCM.

Déploiement & Chaîne d'approvisionnement

  • Dockerfile de production (multi-stage) et docker-compose.yml, runtime non-root durci.
  • Image de base et GitHub Actions épinglées par digest ; Dependabot les rafraîchit chaque semaine.
  • Gestion des dépendances migrée vers uv avec uv.lock haché.

Documentation

  • SECURITY.md régénéré et aligné avec le site de documentation.
  • Guides de setup mis à jour pour insister sur la politique .env-only.

Tests & CI

  • 839+ tests unitaires, 93%+ de couverture (seuil de 90 % imposé), tests d'intégration sur CUCM réel, matrice Python 3.12 + 3.13.
  • SAST Bandit, scan de secrets Gitleaks, scan d'image Trivy — tous bloquants.
  • Rapport Mypy (non bloquant) et pip-audit sur les arbres de dépendances runtime + dev.
  • SBOM CycloneDX signé hors ligne au moment de la release.

Dépendances

- bcrypt==5.0.0
- colorlog==6.10.1
- cryptography==48.0.0
- fastmcp==3.2.4
- lxml==6.1.1
- Markdown==3.10.2
- matplotlib==3.10.9
- mcp==1.27.1
- numpy==2.4.6
- paramiko==5.0.0
- Pillow==12.2.0
- prometheus_client==0.25.0
- pydantic==2.13.4
- PyJWT==2.13.0
- python-dotenv==1.2.2
- requests==2.34.2
- starlette==1.2.0
- urllib3==2.7.0
- weasyprint==68.1
- zeep==4.3.2
- freezegun==1.5.5
- httpx==0.28.1
- pre-commit==4.6.0
- pymupdf4llm>=0.0.17
- pytest==9.0.3
- pytest-asyncio==1.4.0
- pytest-cov==7.1.0
- PyYAML>=6.0.2
- ruff==0.15.15