v0.1.0
Initial public release.
Added
head N/tail N— first/last N records, streaming;tailkeeps only an
N-record ring buffer.select FIELDS— project comma-separated dotted paths (id,user.name,ts).filter EXPR— keep records matching a safe no-eval predicate grammar:
==,!=,<,<=,>,>=,exists,contains,and/or/not, parentheses,
dotted paths.stats— per-field presence %, null %, observed types, numeric
min/max/mean/stddev, string cardinality; nested keys flattened to dotted paths.schema— infer a JSON Schema (draft 2020-12, structural subset) over a full pass.validate— report malformed lines by 1-indexed number; with--schema,
also report non-conforming records. Exits non-zero on any failure (CI-friendly).- Global
--limit N— stop after N input records. - Transparent
.gzinput; reads a file arg or stdin. - Requires Python 3.12+ (argparse in 3.12 handles options interspersed with
positional arguments, e.g.jlkit select name --limit 1 data.jsonl).
Changed
- A missing or unreadable input file now prints a one-line
jlkit CMD: cannot open '...': <reason>(exit 2) instead of a traceback. - Writing to a closed pipe (
jlkit ... | head) exits quietly instead of
raisingBrokenPipeErroron shutdown.