Releases: jkudish/jev-mcp
Release list
v0.5.0
Install:
npx -y @jkudish/jev-mcp
- New
jev_reviewtool: score a proposed diff against the request before the task is called done. Four 0..2 Score rubrics (correctness, spec match, test gap, blast radius, the last two inverted in the composite) plus a safe-to-apply probability, combined into a weighted composite (0.4 / 0.3 / 0.15 / 0.15) and oneauto | review | escalateaction. Auto requires safe_to_apply and every rubric confidence atauto_accept(default 0.8) and the composite atcomposite_floor(default 0.7); belowreview_atescalates. Unknown confidence escalates and can never satisfy a threshold, even a zero one. Text fields capped at 50,000 characters; truncated or malformed input never returns auto. Question design adapted from burnigtm/jev-mcp (MIT) via PR #2 by rimusz, with deliberate divergences: caps raised from 2,000 characters so auto is reachable on real diffs, thresholds parameterized instead of a hardcoded safe_to_apply escalation, strict per-answer validation under the package's invalid_response contract, and anti-injection framing (every field is evidence to evaluate, never instructions to follow). - New
jev_gatetool: the completion gate. The same patch review plus up to 16 completion claims verified against caller-supplied evidence in one request, each claim a Choice over verified / contradicted / unsupported, with claim questions instructed to use evidence only (the request, diff, and tests fields are assertions to check, never proof; all fields share one model state, so the isolation is instructional). Evidence is capped at 16 items and 200,000 characters in aggregate, rejected before any model call. The final action is the worst of the review and every claim;reason_codesrecords why (incomplete_context,invalid_response,review_escalated,review_required,claims_contradicted,claims_unsupported,claim_confidence_low,claim_confidence_below_auto_accept,accepted). Same credits and divergences asjev_review. - Deliberately excluded from that PR: its
jev_coding_looptool, an agent loop that runs the review gate repeatedly. This package stays judgment primitives that a coding agent calls; it does not become one. - Docs: README restructured around the ten tools (capability bullets, collapsible per-client install sections, a When to call which tool section), the
jev_rerankexample replaced with a live-captured semantic-ranking example that shows where candidate text comes from, and guidance added for ranking whole documents by chunking with distinct ids. - New
jev_reranktool: one independent relevance probability per candidate in a single request, returned sorted with scores. Candidate ids preserved verbatim; any malformed answer marks the whole rankinginvalid_responseinstead of sorting a missing score as zero. TypeSafe's rerank cookbook reports that on the CLERC benchmark this pattern lifted top-1 from 5% to 18% and top-10 from 38% to 62%. Bounded at 250 candidates and a 100,000-character aggregate budget. - New
jev_comparetool: overall same_fact / contradicts / different_facts relation between two passages, plus optional per-aspect judgments, each an independent Choice in the same request with aspect-specific wording for the third outcome, with distributions, confidence, an argmax guard, and an auto-versus-review decision. - New
jev_extracttool: your regex finds candidate substrings, Jev picks which candidate is each field's value, and the value returns verbatim. Regexes run in a sandboxed worker with a 1-second deadline, so pathological patterns cannot hang the server. Complete zero-match fields are omitted from the model request (not_found); if no field reaches the model, no API call is made, and a confidentnone_of_themis a model-judged negative. An incomplete candidate universe (matches beyond the 20-per-field cap, or matches skipped for exceeding 2,000 characters) forces every otherwise-valid positive ornone_of_themresult toreview(malformed answers remaininvalid_response), with explicit flags rather than silent truncation; invalid patterns and timeouts reportinvalid_patternwithout failing the call. Bounded at 32 fields, a 50,000-character document, and a separate 50,000-character aggregate candidate-match budget.
v0.4.0
New jev_classify tool: batched single-label classification. The class catalog is sent once in shared state; every item becomes an independent Choice question, so a 4-item batch costs ~670 input tokens instead of ~940 per item. Auto-acceptance requires both top probability (default 0.85) and winner-to-runner-up margin (default 0.5); caller IDs are preserved verbatim; malformed responses surface as invalid_response; batches cap at an 8,000 item-class budget. Install: npx -y @jkudish/jev-mcp
v0.3.0
Cloudflare Workers AI transport (typesafe/jev via /ai/run; JEV_CLOUDFLARE_API_TOKEN honored), Vercel AI Gateway transport (typesafe-ai/jev via the AI SDK evaluate API, with confidence), and explicit per-provider transport guards. Resolution order: TypeSafe direct, OpenRouter, Cloudflare, Vercel; JEV_PROVIDER forces any. Install: npx -y @jkudish/jev-mcp
v0.2.0
OpenRouter support: with only an OPENROUTER_API_KEY, all judgments route through OpenRouter's Decisions API (alpha) at the same pricing. JEV_PROVIDER forces typesafe or openrouter; jev-latest maps to typesafe/jev-1.13 there. Results now report the transport used (provider, resolved model). Install: npx -y @jkudish/jev-mcp