SysML v2 dans VS Code et des agents IA pour éditer des modèles
SysML v2 est le nouveau standard de modélisation système de l’OMG : une syntaxe textuelle, des modèles versionnables dans Git, et un écosystème qui reste à construire. Je m’y suis attaqué avec deux projets expérimentaux : une extension VS Code et un moteur d’agents IA capables d’éditer des modèles sans les casser.
SysML v2 change la donne par rapport à SysML v1 et ses outils graphiques : le modèle est du texte. Concrètement, un modèle système devient un ensemble de fichiers .sysml et .kerml qu’on édite, relit et versionne comme du code. Le revers de la médaille, c’est l’outillage : les éditeurs matures sont rares, souvent lourds, et rarement pensés pour le travail en équipe sur Git. D’où l’idée de construire les briques qui me manquaient.
sysml2-vscode-ext : l’édition de modèles dans VS Code
sysml2-vscode-ext apporte le support de SysML v2 et KerML directement dans VS Code : coloration syntaxique, diagnostics en direct, navigation, recherche, arbre du modèle et vue graphe interactive.
L’extension embarque son propre serveur de langage écrit en TypeScript, construit sur un parseur ANTLR4 généré à partir de la grammaire officielle de l’OMG. Point important : pas de JVM ni de binaire externe à installer.
Les fonctionnalités qui font la différence au quotidien :
- Diagnostics : erreurs de syntaxe, déclarations dupliquées et références non résolues signalées pendant la frappe
- Navigation : go to definition sur les relations de typage, spécialisation, subsetting, redefinition, crossing, import et alias
- Recherche workspace :
Ctrl+T/Cmd+T, avec un classement préfixe puis fuzzy - Completion et snippets : les mots-clés SysML/KerML, les symboles accessibles, et 40 templates vérifiés par les tests (chaque snippet généré est reparsé pour garantir qu’il produit du SysML valide)
- Model Explorer : arbre de tous les éléments du workspace, groupés par fichier, suivant la hiérarchie de containment
- Structure Graph : un diagramme de blocs (BDD) en SVG, avec quatre layouts (tree, force, circle, grid), filtrage par kind, zoom, export PNG/SVG et export DOT pour Graphviz
La bibliothèque standard normative (94 fichiers) est indexée en arrière-plan au démarrage : les références croisées vers ScalarValues, Parts et consorts sont résolues localement, sans requête réseau.
L’assistance IA est intégrée à l’extension
L’extension ne se limite pas à l’édition : elle embarque aussi une assistance IA, branchée sur l’API de modèle de langage native de VS Code (vscode.lm) et sur l’API de participant de chat. Aucun service tiers à configurer, aucune clé API à stocker : il suffit d’avoir un provider de chat installé et connecté (GitHub Copilot, par exemple). Si aucun modèle n’est disponible, les commandes le signalent explicitement.
- Édition inline (
SysML: AI Edit Selection,Ctrl+Alt+I) : envoie la sélection (ou le fichier entier) avec le plan des déclarations et la position du curseur. La réponse n’est jamais appliquée directement : elle s’ouvre d’abord dans un diff. - Génération (
SysML: AI Generate Declaration,Ctrl+Alt+Enter) : propose une déclaration à insérer au curseur, également en diff. - Explication (
SysML: AI Explain Model,Ctrl+Alt+E) : ouvre un onglet Markdown en lecture seule décrivant les blocs principaux, leurs relations et les constructions suspectes. - Agent panel : le participant de chat SysML Assistant reçoit automatiquement le contexte de l’éditeur et supporte
/explainet/generate. Quand la réponse contient un bloc SysML, un bouton Preview change as diff apparaît. - Revue par diff : chaque proposition s’ouvre dans un éditeur de diff classique avec les code lenses
Accept AI changeetReject. L’acceptation applique une édition unique du document, donc un seul undo annule tout, puis sauvegarde le fichier.
Trois réglages contrôlent le comportement : sysml.ai.enable (actif par défaut), sysml.ai.model (famille ou id de modèle préféré, vide = premier modèle disponible) et sysml.ai.maxContextChars (12000 caractères par défaut, pour borner le contexte envoyé).
À noter : cette assistance IA est celle de l’éditeur, pas un agent autonome. Elle propose des changements, l’utilisateur valide. C’est sysml2-ai qui pousse la logique plus loin, avec des boucles agentiques et des écritures transactionnelles.
sysml2-ai : des agents bornés par un moteur déterministe
sysml2-ai est le second morceau : des boucles agentiques pour éditer, analyser et évaluer des modèles SysML v2 / KerML. L’idée directrice est simple : le LLM propose, le moteur dispose.
L’agent n’a aucun accès direct aux fichiers. Il ne peut agir que via un catalogue d’outils typés, validés par Zod, exposés en JSON Schema au modèle et en MCP aux autres clients :
- Lecture : lister fichiers et éléments, lire un élément ou sa source, valider le modèle, trouver les références
- Édition : créer un élément ou un fichier, renommer, supprimer, éditer
- Analyse : résumé du modèle, exigences, traçabilité, analyse d’impact
Chaque écriture passe par une transaction : snapshot privé du modèle, validation globale, vérification de révision optimiste, écriture atomique, et rollback automatique si le modèle devient invalide. Les erreurs sont structurées (code, category, retryable, details, location, suggestions), donc exploitables par l’agent comme par un humain.
Côté supervision, le projet fournit un mode multi-agents en DAG : plusieurs analystes lisent en parallèle, un éditeur écrit sous verrou, puis un évaluateur indépendant valide le résultat. Les échecs déclenchent une boucle de réparation bornée.
L’observabilité est prévue dès le départ : traces JSONL, journal des transactions, métriques Prometheus (push vers un Pushgateway pour les runs courts, endpoint scrape pour le serveur MCP) et rapports d’évaluation avec baseline de non-régression. L’évaluation compare taux de succès, nombre d’étapes, appels d’outils, latence p50/p95 et tokens.
Exemple de lancement en local avec Ollama :
ollama pull qwen2.5-coder:7b |
Et le même catalogue d’outils est exposé en MCP :
{ |
Deux projets, un même socle
Les deux repos partagent la même grammaire ANTLR4 et la même philosophie : rester en TypeScript, éviter les dépendances lourdes, et garder l’outillage utilisable hors ligne. L’un apporte l’édition et une assistance IA validée par diff, l’autre l’automatisation agentique avec un moteur qui garantit l’intégrité du modèle.
Attention : c’est expérimental
Je préfère être clair : ces deux projets sont expérimentaux. Ce sont des laboratoires, pas des produits.
- L’API et les commandes peuvent changer sans préavis.
- La couverture de la grammaire et des cas limites n’est pas celle d’un outil commercial.
- Le comportement des agents dépend fortement du modèle utilisé et de sa capacité au tool calling ; les résultats varient d’un modèle local à l’autre.
- Les performances sur de très gros modèles n’ont pas été testées.
C’est précisément ce qui m’intéresse : explorer à quoi ressemble un outillage SysML v2 moderne, textuel, agentique et souverain, avant que le marché ne tranche. Si vous modélisez en SysML v2 ou si vous construisez des agents qui écrivent du code structuré, les retours m’intéressent.
Les deux projets sont sous licence GPL-3.0 :