Skip to Content
Nouvelle version 12 disponible 🎉
ObfuscatorLigne de commandeMode adapté à l’IA

Mode CLI adapté à l’IA

À partir de Babel Obfuscator 11.7.0, l’outil en ligne de commande peut émettre un flux de sortie structuré et lisible par machine, adapté aux pipelines de CI, aux orchestrateurs de build et aux intégrations d’IA et d’agents.

La sortie texte par défaut de babel.exe est inchangée et reste entièrement rétrocompatible : les scripts de CI existants et les intégrations des clients ne nécessitent aucune modification.

Le mode adapté à l’IA s’active avec trois nouvelles options globales :

  • --format=text|json|ndjson : sélectionne le format du canal de sortie
  • --quiet (alias -q) : supprime la bannière du logo et échoue immédiatement sur les invites interactives
  • --strict-exit : active les codes de sortie sémantiques

Lorsque --format=json ou --format=ndjson est sélectionné, stdout transporte le flux structuré et les diagnostics lisibles par une personne sont dirigés vers stderr, de sorte que les deux canaux ne s’entremêlent jamais.

Options

—format <format>

Sélectionne le format de sortie utilisé sur stdout. Valeurs autorisées :

ValeurDescription
textValeur par défaut. Sortie console historique, lisible par une personne. Aucun changement de structure par rapport aux versions précédentes.
jsonEnveloppe JSON unique, mise en tampon et écrite à la fin de l’exécution (ou avec --help / --version). À privilégier lorsque stdout est capturé dans un fichier ou redirigé vers un consommateur JSON.
ndjsonJSON délimité par des sauts de ligne. Un événement par ligne, écrit dès qu’il est produit. À privilégier pour les consommateurs en flux continu, les collecteurs de journaux et les agents en direct qui doivent réagir avant la fin de l’exécution.

Exemples :

babel myapp.exe --format=json > result.json babel myapp.exe --format=ndjson | jq -c 'select(.level=="error")'

Avec —format=json ou —format=ndjson, la bannière du logo est automatiquement supprimée, quelle que soit la valeur de —logo, afin que le tout premier octet sur stdout soit du JSON valide.

—quiet (-q)

Supprime la bannière de copyright et de logo et modifie le comportement des invites interactives de mot de passe : au lieu de se bloquer sur Console.In, Babel échoue immédiatement avec une erreur explicite. --quiet convient ainsi aux exécutions sans intervention lancées depuis des exécuteurs de CI, des étapes de build de conteneurs et des agents IA.

babel myapp.exe --quiet --keyfile mykey.pfx --keypwd env:KEY_PWD

--quiet est indépendant de --format : il peut être combiné avec la sortie text historique pour conserver des journaux lisibles par une personne sans la bannière.

—strict-exit

Active les codes de sortie sémantiques pour le processus. Sans cette option, Babel conserve le contrat historique, dans lequel 0 signifie la réussite et 1 tout échec.

Code de sortieConstanteSignification
0successL’exécution s’est terminée sans erreur.
10invalidArgumentsLa ligne de commande n’a pas pu être analysée ou contenait une valeur non valide (par exemple un --format inconnu).
20inputNotFoundL’assembly principal ou un autre fichier d’entrée obligatoire est introuvable.
30obfuscationFailureL’obfuscation a échoué à l’exécution (toute exception non classée de l’obfuscateur).
40licensingFailureLa vérification de la licence a échoué (licence absente, expirée ou non autorisée).
50keyOrSigningFailureLa signature par nom fort ou une opération sur une clé cryptographique a échoué.

La classification est aussi exposée sous le nom exitReason dans l’enregistrement de résultat JSON/NDJSON (voir Enveloppe de résultat), même lorsque --strict-exit n’est pas actif. Les consommateurs peuvent ainsi distinguer les catégories d’échec indépendamment du code de sortie numérique.

babel myapp.exe --strict-exit --format=json echo "exit=$?"

Schéma : babel.cli.v1

Toutes les charges utiles structurées sont conformes au schéma versionné babel.cli.v1. Au sein d’une version majeure du schéma, les ajouts (nouveaux champs, nouveaux codes d’événement, nouveaux motifs de sortie) sont autorisés ; un changement incompatible entraîne un nouveau nom de schéma.

Enregistrement d’événement

Chaque diagnostic émis pendant une exécution est converti en événement :

event
{ "ts": "2026-05-08T14:32:11.482Z", "level": "info", "code": "BAB1234", "message": "Renaming phase, elapsed time 00.082s", "data": { "phase": "renaming", "elapsedMs": 82 } }
ChampTypeRemarques
tschaîne (ISO-8601, UTC)Horodatage de la production de l’événement.
leveldebug | info | warning | errorGravité.
codechaîne | nullCode de diagnostic Babel (par exemple BAB1234, W00013), le cas échéant.
messagechaîneMessage lisible par une personne.
dataobjet | nullCharge utile structurée facultative jointe à l’événement.

Enveloppe de résultat

—format=json

Un seul objet JSON est écrit sur stdout à la fin de l’exécution. Il contient le résumé de l’exécution et tous les événements mis en tampon pendant celle-ci :

result (json)
{ "exitCode": 0, "exitReason": "success", "elapsedMs": 4218, "warnings": 1, "errors": 0, "events": [ { "ts": "2026-05-08T14:32:09.500Z", "level": "info", "code": null, "message": "Babel Obfuscator 11.7.0.0", "data": null }, { "ts": "2026-05-08T14:32:11.482Z", "level": "info", "code": "BAB1234", "message": "Renaming phase ...", "data": { "phase": "renaming" } }, { "ts": "2026-05-08T14:32:13.012Z", "level": "warning", "code": "W00013", "message": "Could not resolve ...", "data": null } ] }

—format=ndjson

Chaque événement est écrit dès qu’il est produit, sur sa propre ligne. Après le dernier événement, une ligne de résultat finale est ajoutée (sans tableau events, puisque les événements ont déjà été transmis en continu) :

result (ndjson)
{"ts":"2026-05-08T14:32:09.500Z","level":"info","code":null,"message":"Babel Obfuscator 11.7.0.0","data":null} {"ts":"2026-05-08T14:32:11.482Z","level":"info","code":"BAB1234","message":"Renaming phase ...","data":{"phase":"renaming"}} {"ts":"2026-05-08T14:32:13.012Z","level":"warning","code":"W00013","message":"Could not resolve ...","data":null} {"exitCode":0,"exitReason":"success","elapsedMs":4218,"warnings":1,"errors":0}
ChampTypeRemarques
exitCodeentierCode de sortie numérique réellement renvoyé par le processus (historique ou strict, selon --strict-exit).
exitReasonchaîneJeton de classification stable. Reflète toujours la classe sémantique, même sans --strict-exit.
elapsedMsentierDurée totale écoulée, en millisecondes.
warningsentierNombre d’événements de niveau warning.
errorsentierNombre d’événements de niveau error.
eventstableau | nullPrésent en mode json ; omis en mode ndjson (les événements sont transmis en continu sur des lignes distinctes).

—help lisible par machine

babel --help --format=json émet une description complète de chaque option publique, utile aux outils qui doivent inspecter la surface du CLI (complétion du shell, agents IA, générateurs de documentation) :

--help --format=json (excerpt)
{ "version": "11.7.0.0", "usage": "babel.exe <primary assembly source> [<other assemblies>...] [options]", "options": [ { "name": "controlflow", "aliases": ["nocontrolflow", "no-controlflow", "control-flow", "no-control-flow", "i"], "description": "Enable ([no]disable) MSIL control flow obfuscation", "args": null, "argRequired": false, "argOptional": false, "negatable": true, "incremental": false, "container": "scalar", "type": "boolean", "group": "- Code Obfuscation -", "details": "Use this option to alter the method control flow ..." } ] }

Une forme ciblée est également prise en charge. babel --help controlflow --format=json émet la même enveloppe, mais limitée à l’option controlflow (avec ses details résolus à partir des ressources de l’option).

Les options masquées ou internes ne sont jamais renvoyées.

—version lisible par machine

babel --version --format=json émet des informations sur le runtime et la plateforme :

--version --format=json
{ "product": "Babel Obfuscator", "version": "11.7.0.0", "fileVersion": "11.7.0.0", "runtime": ".NET 8.0.11", "platform": "win-x64" }

Le champ platform utilise le RuntimeIdentifier (RID) de .NET lors d’une exécution sur .NET 5 ou une version ultérieure, et une chaîne synthétique <os>-<arch> sur les cibles plus anciennes (net472-x64, unix-x64, …).

Rétrocompatibilité

  • La valeur par défaut de --format est text ; la sortie textuelle, les codes de sortie et le comportement historiques sont inchangés lorsqu’aucune nouvelle option n’est indiquée.
  • Sans --strict-exit, le processus continue de renvoyer 0 en cas de réussite et 1 en cas d’échec : les contrôles de CI existants qui testent $? continuent de fonctionner.
  • --quiet est indépendant et peut être activé sans activer la sortie structurée.

La sortie structurée est également disponible avec la tâche MSBuild et le package NuGet Babel.Obfuscator : il suffit de transmettre les mêmes options par le mécanisme standard des propriétés et des arguments.

Last updated on