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:
| Valor | Descripción |
|---|---|
text | Predeterminado. Salida de consola heredada, legible por personas. Sin cambios de estructura respecto a las versiones anteriores. |
json | Un ú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. |
ndjson | JSON 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 salida | Constante | Significado |
|---|---|---|
0 | success | La ejecución terminó sin errores. |
10 | invalidArguments | No se pudo analizar la lÃnea de comandos o contenÃa un valor no válido (por ejemplo, un --format desconocido). |
20 | inputNotFound | No se encontró el ensamblado principal u otro archivo de entrada necesario. |
30 | obfuscationFailure | La ofuscación falló durante la ejecución (cualquier excepción del ofuscador sin clasificar). |
40 | licensingFailure | Falló la comprobación de la licencia (licencia ausente, caducada o no autorizada). |
50 | keyOrSigningFailure | Falló 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:
{
"ts": "2026-05-08T14:32:11.482Z",
"level": "info",
"code": "BAB1234",
"message": "Renaming phase, elapsed time 00.082s",
"data": { "phase": "renaming", "elapsedMs": 82 }
}| Campo | Tipo | Notas |
|---|---|---|
ts | cadena (ISO-8601, UTC) | Marca de tiempo del momento en que se produjo el evento. |
level | debug | info | warning | error | Gravedad. |
code | cadena | null | Código de diagnóstico de Babel (por ejemplo, BAB1234, W00013) cuando corresponde. |
message | cadena | Mensaje legible por personas. |
data | objeto | null | Carga ú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:
{
"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):
{"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}| Campo | Tipo | Notas |
|---|---|---|
exitCode | entero | Código de salida numérico que el proceso devuelve realmente (heredado o estricto, según --strict-exit). |
exitReason | cadena | Token de clasificación estable. Refleja siempre la clase semántica, incluso sin --strict-exit. |
elapsedMs | entero | Duración total en tiempo de reloj, en milisegundos. |
warnings | entero | Número de eventos de nivel warning. |
errors | entero | Número de eventos de nivel error. |
events | matriz | null | Presente 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):
{
"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:
{
"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
--formatestext; 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 devolviendo0en caso de éxito y1ante cualquier fallo: las comprobaciones de CI existentes que deciden según$?siguen funcionando. --quietes 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.