npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@elyracode/jev-tools

v0.9.41

Published

Elyra extension for TypeSafe Jev decisions via OpenRouter -- calibrated yes/no, choice, and score judgements

Downloads

405

Readme

@elyracode/jev-tools

TypeSafe Jev decisions for Elyra -- calibrated yes/no, choice, and score judgements through OpenRouter.

Jev is a decision model, not a chat model. It never generates text. You give it a piece of content (state) and one or more typed questions, and it returns probabilities. A call takes about one second and costs roughly $0.00002.

Install

elyra install npm:@elyracode/jev-tools

Requirements

One of two API keys:

  • TypeSafe direct (preferred): a key from typesafe.ai. Set TYPESAFE_API_KEY. Requests go to https://api.typesafe.ai/v1/systemone with model jev-latest.
  • OpenRouter: log in with /login and pick OpenRouter, or set OPENROUTER_API_KEY. Requests go to OpenRouter's alpha decisions endpoint with model ~typesafe/jev-latest.

When both are present, TypeSafe direct is used. Force one with JEV_BACKEND=typesafe|openrouter. The request and response shape is identical on both; only endpoint, model slug, and billing differ.

Tools

| Tool | Description | |------|-------------| | decide | Ask Jev one or more questions about a state. Question types: noul (yes/no), choice (pick one), score (ordinal scale). Returns probabilities, confidence, and usage. |

Commands

  • /jev -- show active backend, key status, and bash gate state
  • /jev gate on|off -- toggle the bash gate for the current session

Bash gate (opt-in)

When enabled, every bash tool call is first sent to Jev with the question "would running this command destroy data or make a change that is hard to reverse?". If the probability is at or above the threshold, Elyra asks you to confirm before running it. In non-interactive mode (print, RPC) the command is blocked instead.

Enable with elyra --jev-gate, JEV_BASH_GATE=1, or /jev gate on. Off by default because it adds about one second of latency to each bash call.

If the key is missing or the API fails, the gate logs a warning and lets the command through rather than blocking all shell access. It is a second opinion, not a security boundary.

Usage

> Is this diff a breaking change? Ask Jev before you answer.
> Classify these 20 log lines by severity using decide, then only show me the ones rated high or critical.
> Before running that migration, use decide to check if the command is destructive.

Question types

noul -- yes/no with a calibrated probability:

{ "name": "refund", "type": "noul", "instructions": "Is the user asking for a refund?",
  "criteria": { "true": "explicitly wants money back", "false": "anything else" } }

choice -- pick one option, get the full distribution:

{ "name": "route", "type": "choice", "instructions": "Who should handle this?",
  "criteria": { "code": "write or change code", "research": "needs web lookup", "other": "none of the above" } }

score -- ordinal scale, 2-10 labels from low to high:

{ "name": "severity", "type": "score", "instructions": "How severe is this log line?",
  "criteria": ["debug", "info", "warning", "error", "critical"] }

Writing good questions

Jev reads criteria literally and does not infer intent beyond what is stated.

  • Describe observable conditions, not goals. Spell out both sides for noul via criteria.
  • Make choice options exhaustive, or add an other option.
  • Keep state to what the questions need. The context window is about 32K tokens.
  • Ask several questions in one call when they concern the same state; the cost is the same.

Configuration

| Variable | Default | Purpose | |----------|---------|---------| | TYPESAFE_API_KEY | -- | TypeSafe direct API key | | OPENROUTER_API_KEY | -- | OpenRouter API key, if not stored via /login | | JEV_BACKEND | auto | Force typesafe or openrouter instead of picking by available key | | JEV_MODEL | jev-latest / ~typesafe/jev-latest | Override the model slug for the chosen backend | | JEV_BASE_URL | per backend | Override the endpoint URL (proxies, or if OpenRouter moves out of alpha) | | JEV_BASH_GATE | off | Set to 1 to enable the bash gate at startup | | JEV_BASH_GATE_THRESHOLD | 0.7 | Probability (0-1) at or above which the gate intervenes |

Notes

  • The request contract follows the TypeSafe API reference. OpenRouter's decisions endpoint is an alpha API mirroring the same shape and may change.
  • Retries with backoff on 429/529/5xx, up to three attempts. Requests time out after 60 seconds.
  • Question design guidance: see the primitives docs. A Noul near 0.5 means yes and no are equally likely, not "medium"; use a Score for degree.
  • Unofficial community integration. Not affiliated with TypeSafe or OpenRouter.