Skip to Content
Nueva versión 12 disponible 🎉
ObfuscatorLínea de comandosModo compatible con IA

Modo CLI compatible con IA

A partir de Babel Obfuscator 11.7.0, la herramienta de línea de comandos puede emitir un flujo de salida estructurado y legible por máquina, adecuado para pipelines de CI, orquestadores de compilación e integraciones con IA y agentes.

La salida de texto predeterminada de babel.exe no cambia y sigue siendo totalmente compatible con las versiones anteriores: los scripts de CI y las integraciones de los clientes que ya existen no requieren ningún cambio.

El modo compatible con IA se activa con tres nuevas opciones globales:

  • --format=text|json|ndjson: selecciona el formato del canal de salida
  • --quiet (alias -q): suprime el banner con el logotipo y falla de inmediato ante las solicitudes interactivas
  • --strict-exit: activa los códigos de salida semánticos

Cuando se selecciona --format=json o --format=ndjson, stdout transporta el flujo estructurado y los diagnósticos legibles por personas se envían a stderr, de modo que los dos canales nunca se entremezclan.

Opciones

—format <format>

Selecciona el formato de salida que se usa en stdout. Valores permitidos:

ValorDescripción
textPredeterminado. Salida de consola heredada, legible por personas. Sin cambios de estructura respecto a las versiones anteriores.
jsonUn único sobre JSON almacenado en búfer, que se escribe cuando termina la ejecución (o con --help / --version). Es la mejor opción cuando stdout se captura en un archivo o se canaliza hacia un consumidor de JSON.
ndjsonJSON delimitado por saltos de línea. Un evento por línea, que se vuelca en cuanto se produce. Es la mejor opción para los consumidores de flujos, los reenviadores de registros y los agentes en tiempo real que deben reaccionar antes de que termine la ejecución.

Ejemplos:

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

Con —format=json o —format=ndjson, el banner con el logotipo se suprime automáticamente con independencia de —logo, de modo que el primer byte de stdout sea JSON válido.

—quiet (-q)

Suprime el banner de copyright y del logotipo y cambia el comportamiento de las solicitudes interactivas de contraseña: en lugar de quedarse bloqueado en Console.In, Babel falla de inmediato con un error explícito. Esto hace que --quiet sea seguro para las invocaciones desatendidas desde ejecutores de CI, pasos de compilación en contenedores y agentes de IA.

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

--quiet es independiente de --format: se puede combinar con la salida heredada text para conservar los registros legibles por personas sin el banner.

—strict-exit

Hace que el proceso use códigos de salida semánticos. Sin esta opción, Babel conserva el contrato heredado, en el que 0 significa éxito y 1 significa cualquier fallo.

Código de salidaConstanteSignificado
0successLa ejecución terminó sin errores.
10invalidArgumentsNo se pudo analizar la línea de comandos o contenía un valor no válido (por ejemplo, un --format desconocido).
20inputNotFoundNo se encontró el ensamblado principal u otro archivo de entrada necesario.
30obfuscationFailureLa ofuscación falló durante la ejecución (cualquier excepción del ofuscador sin clasificar).
40licensingFailureFalló la comprobación de la licencia (licencia ausente, caducada o no autorizada).
50keyOrSigningFailureFalló la firma con nombre seguro o una operación con claves criptográficas.

La clasificación también se expone como exitReason en el registro de resultado JSON/NDJSON (consulte Sobre de resultado), incluso cuando --strict-exit no está activo, de modo que los consumidores pueden distinguir las categorías de fallo con independencia del código de salida numérico.

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

Esquema: babel.cli.v1

Todas las cargas útiles estructuradas se ajustan al esquema versionado babel.cli.v1. Dentro de una versión principal del esquema se permiten los cambios aditivos (campos nuevos, códigos de evento nuevos, motivos de salida nuevos); los cambios incompatibles cambiarán el nombre del esquema.

Registro de evento

Cada diagnóstico emitido mientras una ejecución está en curso se asigna a un evento:

event
{ "ts": "2026-05-08T14:32:11.482Z", "level": "info", "code": "BAB1234", "message": "Renaming phase, elapsed time 00.082s", "data": { "phase": "renaming", "elapsedMs": 82 } }
CampoTipoNotas
tscadena (ISO-8601, UTC)Marca de tiempo del momento en que se produjo el evento.
leveldebug | info | warning | errorGravedad.
codecadena | nullCódigo de diagnóstico de Babel (por ejemplo, BAB1234, W00013) cuando corresponde.
messagecadenaMensaje legible por personas.
dataobjeto | nullCarga útil estructurada opcional adjunta al evento.

Sobre de resultado

—format=json

Cuando la ejecución termina, se escribe en stdout un único objeto JSON. Contiene el resumen de la ejecución y todos los eventos almacenados en búfer durante ella:

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

Cada evento se vuelca en cuanto se produce, en su propia línea. Después del último evento se añade una línea final con el resultado (sin la matriz events, puesto que los eventos ya se han transmitido):

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}
CampoTipoNotas
exitCodeenteroCódigo de salida numérico que el proceso devuelve realmente (heredado o estricto, según --strict-exit).
exitReasoncadenaToken de clasificación estable. Refleja siempre la clase semántica, incluso sin --strict-exit.
elapsedMsenteroDuración total en tiempo de reloj, en milisegundos.
warningsenteroNúmero de eventos de nivel warning.
errorsenteroNúmero de eventos de nivel error.
eventsmatriz | nullPresente en el modo json; se omite en ndjson (los eventos se transmiten como líneas separadas).

—help legible por máquina

babel --help --format=json emite una descripción completa de todas las opciones públicas, adecuada para las herramientas que necesitan inspeccionar la superficie de la CLI (autocompletado del shell, agentes de IA, generadores de documentación):

--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 ..." } ] }

También se admite una forma acotada. babel --help controlflow --format=json emite el mismo sobre, pero solo con la opción controlflow (y su campo details resuelto a partir del paquete de recursos de las opciones).

Las opciones ocultas o internas no se devuelven nunca.

—version legible por máquina

babel --version --format=json emite información sobre el entorno de ejecución y la plataforma:

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

El campo platform usa el RuntimeIdentifier (RID) de .NET cuando se ejecuta en .NET 5 o posterior, y una cadena sintética <os>-<arch> en los destinos heredados (net472-x64, unix-x64, …).

Compatibilidad con versiones anteriores

  • El valor predeterminado de --format es text; la salida de texto heredada, los códigos de salida y el comportamiento no cambian cuando no se especifica ninguna de las opciones nuevas.
  • Sin --strict-exit, el proceso sigue devolviendo 0 en caso de éxito y 1 ante cualquier fallo: las comprobaciones de CI existentes que deciden según $? siguen funcionando.
  • --quiet es independiente y se puede activar sin activar la salida estructurada.

La salida estructurada también está disponible mediante la tarea de MSBuild y el paquete NuGet Babel.Obfuscator, pasando las mismas opciones a través del mecanismo habitual de propiedades y argumentos.

Last updated on