Skip to content

Releases: keltokhy/jgrep

jev-grep 0.4.1

Choose a tag to compare

@keltokhy keltokhy released this 23 Sep 13:30
  • The tool itself is unchanged from 0.4.0; this release brings its README on PyPI up to date.
  • Compare DiffusionGemma and Laya with Jev 1.13 on jgrep's benchmarks, in
    docs/benchmarks/local-models-2026-09-22.md and its JSON, summarized in the README.
  • Add bench/backend_eval.py, which runs and scores a local server, and bench/context_eval.py,
    the length and evidence-position test. bench/code_review.py now requires --api and --model.

jev-grep 0.4.0

Choose a tag to compare

@keltokhy keltokhy released this 22 Sep 06:52
  • Add --api diffusiongemma and --api laya for System One servers running on your own machine,
    through jevkit-runtime 0.3: chosen only by name, no key needed, and metered at zero API fees
    unless JEV_PRICE_PER_MTOK is set. The runtime's docs/ explain how to run the servers.

jev-grep 0.3.0

Choose a tag to compare

@keltokhy keltokhy released this 22 Sep 06:24
  • Move transport, configuration, the answer cache and metering to the shared jevkit-runtime 0.2.
    Answers are keyed by provider, endpoint and model and stored with who answered them; the cache
    written by earlier versions is reset on first use and re-asked. A 200 response without answers is
    an error rather than a retry, and a stored answer that fails validation is an error rather than a hit.
  • Label context without a commit id as the function in the working tree, including in the judge's
    question. Only the hunk's new-side lines at their given position are checked; surrounding code
    may have changed. Plain diff and fallback requests retain their existing questions and cache keys.
  • Report macro-headed C bodies that parse as a call followed by a bare block, and count changes
    inside them as syntax_error under -W. Skipped C diagnostics give the whole covered line range
    instead of a function name that may belong to a preceding prototype.
  • Preserve text hunks in commit streams ending in a rename, mode-only change or empty-file change;
    trim trailing separators and mail signatures without shifting input locations. Skip annotated-tag
    preambles, and decode quoted paths containing raw UTF-8 as well as octal byte escapes.
  • Add C to --functions through Tree-sitter in the [code] extra: --lang c, inferred from .c
    and .h. Functions the parser read without error are emitted with adjacent comments and exact
    spans. Functions and regions it cannot read, usually around a macro or #if, are skipped and
    reported by line range in one error per file rather than failing the file or guessing at boundaries.
  • Read git log -p, git show and git format-patch streams with --diff, one commit at a time.
    These were previously rejected as content outside a hunk. Hunks carry the commit id as
    unit.commit (null for a plain patch), export IDs include it, and a commit whose patch cannot be
    read no longer hides later commits.
  • Add -W/--function-context and --repo for --diff: judge each hunk with the Python, Go or C
    function that encloses it, read at the hunk's commit or from the working tree, while printing the
    hunk alone. Hunks that cannot be given a function are judged alone and counted by reason in
    stderr, unit.context, and --estimate --json. Oversized functions are shortened around the
    change and reported; oversized hunks still fail. --estimate prices the context and
    --emit-records shows it.
  • Count patch lines at line feeds only. A form feed or lone carriage return inside a source line
    previously made a valid patch fail.
  • Do not print Python SyntaxWarnings raised by the source files being read.
  • Confine -W to the repository. The allowed root is found without trusting repository config, so
    a repository that points core.worktree or GIT_WORK_TREE outside itself stops the run instead
    of reading outside files; working-tree paths are resolved with their symlinks and refused when
    they leave the repository; and Git runs with a fixed argument list and an environment that blocks
    promisor fetches, object replacement, and prompts. Treat --repo as a repository you trust.
  • Bound the source -W reads: a new-side file larger than 10 MiB is a counted source_too_large
    fallback, read neither from a commit nor the working tree, and a named pipe no longer blocks.
  • Trim git format-patch mails: read the patch after the last --- separator and stop at the --
    signature, so a message containing diff --git or a dash-led signature no longer voids the patch.
  • Recognize abbreviated commit ids down to four hex digits (git log --abbrev-commit).
  • Keep reading a stream after a commit with a malformed quoted path, and report skipped C before a
    file's functions so a match limit or quiet mode cannot end the run with it unreported.
  • Read a Python source file that begins with a byte-order mark instead of reporting a syntax error.
  • Leave two pre-existing diff-reader issues outside this change: CRLF-converted patches can retain
    \r in new_file and add spurious metadata-only errors; quoted paths with spaces can also add
    a spurious metadata-only error.

jev-grep 0.2.1

Choose a tag to compare

@keltokhy keltokhy released this 20 Sep 15:46
  • Scope answer caches and offline estimates to the provider and endpoint as well as model and input.
    Existing entries without that identity are not reused.
  • Bound ordered work by -j, including completed results waiting behind a slow record, while
    allowing fatal errors and budget limits to stop promptly.
  • Preserve complete Python functions containing Unicode separators or form feeds, and separate
    Go functions that share a line using parser columns and exact character offsets.

Validation: 185 tests passed on Python 3.10 and 3.13; package metadata checks, credential scans, and installed-wheel smoke checks passed. Published PyPI artifact hashes match the verified local builds.

PyPI: https://pypi.org/project/jev-grep/0.2.1/

jgrep 0.2.0 — complete changes and functions

Choose a tag to compare

@keltokhy keltokhy released this 19 Sep 20:12

jgrep can now search complete changes and functions while preserving their source locations.

uv tool install 'jev-grep[code]'
git diff --no-color | jgrep --diff "removes error handling"
jgrep --functions "ignores a failed rollback" installer.go --json
  • --diff judges removals, additions and unchanged context together. Malformed or unsupported diffs produce errors.
  • --functions extracts Python functions/methods and optional Tree-sitter Go functions. Code units are never silently truncated.
  • --estimate previews calls and approximate cost offline, reading existing cache entries without writing them.
  • --emit-records exports source-linked JSONL for jselect and other tools, without model calls.

159 tests passed on Python 3.10 and 3.13. Fresh-wheel installation, optional dependencies, stdin, source references, the jselect handoff, and a live diff query were checked.

The 20-case handwritten experiment found fewer records to review with complete hunks/functions. It also records remaining false positives and a jselect diversity comparison that worsened precision. These are small synthetic measurements, not production accuracy claims or proof of general bug detection.

PyPI · Full changelog

jgrep 0.1.1

Choose a tag to compare

@keltokhy keltokhy released this 18 Sep 22:03

Version 0.1.1 adds structured-record filtering, recursive file search, and passage search for long documents. It also fixes hangs and incorrect results around read failures, malformed API responses, repeated input files, numeric limits, timeouts, and early exits.

  • Judge a JSONL field or CSV column while preserving the complete matching record: --jsonl --field message or --csv --field abstract.
  • Search directories with -r, --glob, --exclude, nested .gitignore/.ignore rules, and -l for matching filenames.
  • Find matching passages beyond the default character limit with --chunks N and --overlap N. JSON output includes passage numbers and source offsets. Ordinary searches now warn about truncation.
  • Show neighboring records to the model with -C.
  • Use a System One-compatible gateway through --api gateway, JEV_GATEWAY_URL, and JEV_GATEWAY_API_KEY.
  • Apply -m per file, handle -m 0 without reading input, enforce request deadlines, and cancel outstanding work when a run stops.

Install or upgrade:

uv tool install jev-grep
# For an existing installation:
uv tool upgrade jev-grep

Validation: 125 offline tests on Python 3.10 and 3.13, plus installed-wheel command-line checks against a local gateway, including live-stdin early exit.