Contrato de streaming
Envelopes NDJSON, salida específica, heartbeat, backpressure y señales.
Varios comandos consumen streams del daemon, pero no todos los procesos largos comparten el mismo formato. Consulta --help antes de crear un parser.
Envelope del daemon
Los comandos que exponen el stream como JSON escriben un envelope NDJSON por línea en stdout. La secuencia comienza en 0.
{"seq":0,"type":"data","payload":{"line":"hello"}}
{"seq":1,"type":"heartbeat"}
{"seq":2,"type":"dropped","payload":{"count":12}}
{"seq":3,"type":"end"}end y error son frames terminales; un stream produce un único resultado final. error contiene code, message y details opcional.
El daemon envía normalmente heartbeat cada 15 segundos y el CLI sale con código 4 si no recibe frames durante 30 segundos. El buffer admite 256 frames; si se descartan, el recuento se emite antes del siguiente frame de cualquier tipo.
Excepciones por comando
eventssiempre escribe envelopes NDJSON y no tiene modo de líneas de log.- Trivy
--jsonescribe sus propios payloads de progress/result, no unStreamFrameEnvelopeexterno. - El progreso de imágenes se escribe actualmente en stdout.
- La salida de texto depende del comando; el progreso no siempre va a stderr.
Cancelación y códigos
Con SIGINT o SIGTERM, el CLI solicita la cancelación y sale sin garantizar el vaciado de todos los frames en curso.
| Código | Significado |
|---|---|
0 | Finalización natural |
1 | Error de validación, RPC o stream |
2 | Error al analizar argumentos |
3 | Error de descubrimiento o handshake |
4 | Timeout de heartbeat |
130 | SIGINT |
143 | SIGTERM |
Usa dockerman schema para consultar los metadatos RPC. El esquema no convierte la salida propia de Trivy en un envelope externo.