Skip to content

Releases: FrancoisChastel/jev-code

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 07:38
74a4569

OpenAI's Decisions API, now in public beta for every developer, and a System One gateway of your
own as a first-class setup path. One change to check before upgrading: TYPESAFE_BASE_URL is now
validated, so a value carrying credentials, a query string, or a trailing /v1/systemone is
refused before any request instead of being sent.

Added

  • A System One gateway of your own, documented as what it already was: the proxy case. The key
    goes in TYPESAFE_API_KEY, the SDK's generic variable, and the address in TYPESAFE_BASE_URL,
    with TYPESAFE_DEFAULT_MODEL when the gateway's model id differs; nothing new to configure in
    any harness. setup offers "Other System One gateway" when asking which host a pasted key is
    for, then asks for the URL and the model and stores the three variables together.
  • OpenAI's Decisions API in its public beta, open to every developer since October 6, 2026.
    The mapping now follows OpenAI's published reference instead of recorded preview traffic; the
    request jev-code sent already matched it, so existing setups keep working unchanged. All five
    tools and the live test suite were run against gpt-6-luna before this release.
  • A question the model declines comes back as a refusal on the Decisions API. Tools report it as
    status: "refused" with the cautious outcome (review, or uncertain in jev_check)
    instead of invalid_response, since retrying will not change it, and jev_ask lists declined
    ids under refused.
  • CI runs the live tests against the Decisions API too when an OPENAI_API_KEY secret is set.

Changed

  • TYPESAFE_BASE_URL is checked before any request: an absolute http(s) URL with no
    credentials, query, or fragment, stopping before /v1/systemone, which the client appends.
    A bad value is a configuration problem in doctor and setup, never echoed in case it embeds
    a secret, instead of a connection error at the first call.
  • Score probabilities from the Decisions API are keyed by the level index the API returns,
    falling back to the label.
  • doctor --live no longer calls a 403 from the Decisions API a preview restriction; it
    quotes OpenAI's message and points at the key's project access to gpt-6-luna.

Fixed

  • npm run test:e2e found no tests to run, because the test config excluded the live suite for
    every run, so the CI live job could never have exercised a host. The suite is now excluded
    only when JEV_CODE_E2E is unset.

v0.4.1: keys are routed by their variable, never by their shape

Choose a tag to compare

@github-actions github-actions released this 03 Oct 20:03

Keys are no longer routed by what they look like.

The variable decides the host. TypeSafe issues apikey_... keys as well as ts_... ones, and key shapes change, so guessing a host from a prefix was always going to break. From this release TYPESAFE_API_KEY goes to TypeSafe, OPENROUTER_API_KEY to OpenRouter, AI_GATEWAY_API_KEY to Vercel AI Gateway, and OPENAI_API_KEY to OpenAI (still opt-in), whatever the key looks like. A key that looks like it belongs elsewhere only earns a hint in doctor, naming the variable to move it to.

The TypeSafe SDK convention still works. TYPESAFE_API_KEY is the generic variable the official SDK reads, so it follows TYPESAFE_BASE_URL and JEV_CODE_PROVIDER to OpenRouter or Vercel the way the SDK does; the OpenRouter and Vercel guides for the SDK work unchanged. Host-specific variables never travel, and the generic key never follows to OpenAI or Ollama.

setup asks which host a pasted key is for, with its best guess as the default: the JEV_CODE_PROVIDER host, else the key's usual shape, else TypeSafe. Both prompts settle when input ends, and a paste holding both answers is read as two.

npx -y @french-castle/jev-code@0.4.1 setup

Re-running setup moves pinned registrations from 0.4.0 to 0.4.1.

Fixed

  • A key's shape no longer decides where it is sent; the variable a key sits in does. apikey_... is recognised as a TypeSafe shape for the hint.
  • TYPESAFE_API_KEY=sk-proj-... with JEV_CODE_PROVIDER=openai is now refused with "export OPENAI_API_KEY" instead of being sent to OpenAI; the generic key never crosses to a different wire.
  • With JEV_CODE_PROVIDER=ollama, a stale TYPESAFE_BASE_URL on another known host is refused like everywhere else instead of carrying Ollama's key and the payload there.
  • The setup prompts no longer hang when input ends before Enter.

Full details: CHANGELOG.md. Previous release: v0.4.0.

v0.4.0: Ollama local decision models and OpenAI's Decisions API, both opt-in

Choose a tag to compare

@github-actions github-actions released this 03 Oct 16:21

Two new hosts, both opt-in, next to Jev on TypeSafe, OpenRouter, and Vercel AI Gateway.

Ollama, local and keyless. Ollama 0.35 and later serves decision models behind the very same API, so nothing leaves your machine:

ollama pull nimble
export JEV_CODE_PROVIDER=ollama
npx -y @french-castle/jev-code@latest doctor --live

OLLAMA_HOST points at another server; tev1, clef, and clef-flash work via TYPESAFE_DEFAULT_MODEL. Doctor says when the server is down or the model is not pulled.

OpenAI Decisions API, limited preview. Set JEV_CODE_PROVIDER=openai next to your OPENAI_API_KEY, or paste an OpenAI key when setup asks and it stores both. An ambient OPENAI_API_KEY is never adopted on its own, because that variable sits in most shells for unrelated reasons; doctor tells you it is there and how to opt in. Accounts outside the preview get 403 Decision API is not enabled for this user, which doctor --live reports in plain words. The request mapping follows traffic recorded by preview users and OpenAI's own client in the Codex repository, since OpenAI has published no reference yet; it is verified end to end against a stand-in with that shape, through the CLI and a real harness over MCP. A live decision from a preview account is the one thing still unconfirmed, and a report from anyone with access is welcome.

npx -y @french-castle/jev-code@latest setup

Added

  • Ollama's decision capability (Ollama 0.35+) as a local, keyless host: JEV_CODE_PROVIDER=ollama
    after ollama pull nimble; OLLAMA_HOST names another server, OLLAMA_API_KEY is sent only
    when set. Same System One API, so nothing else changes. doctor --live says when the server is
    down or the model is not pulled.

  • JevClient works without a key for local hosts; no Authorization header is sent then.

  • OpenAI's Decisions API (limited preview) as an opt-in host: OPENAI_API_KEY plus
    JEV_CODE_PROVIDER=openai, model gpt-6-luna. Every tool works unchanged; the request and
    response shapes are translated (src/core/wires.ts), following traffic recorded by preview
    users and OpenAI's own client in the Codex repository. An ambient OPENAI_API_KEY is never
    adopted by itself; doctor and the missing-key error explain how to opt in, and doctor --live
    recognises the preview's 403 Decision API is not enabled for this user.

  • Pasting an OpenAI key when setup asks stores JEV_CODE_PROVIDER=openai alongside it.

Full details: CHANGELOG.md. Previous release: v0.3.0.

v0.3.0: pinned launch commands, upgrades that reach installed agents

Choose a tag to compare

@github-actions github-actions released this 30 Sep 03:06

Upgrades now reach installed agents. Harness configs launch a pinned command, so an agent starts fast and works offline once that version is cached, and re-running setup moves the pin deliberately. Until now, npx kept the first version it cached for the unpinned command and never checked for a newer one, so installs made with 0.2.x never saw the 0.2.1 fixes.

If you already installed jev-code, run this once:

npx -y @french-castle/jev-code@latest setup

New install:

npx -y @french-castle/jev-code@latest setup
npx -y @french-castle/jev-code@latest doctor --live

Changed

  • Harness configs now launch a pinned command, npx -y @french-castle/jev-code@<version> mcp.
    npx keeps the first version it cached for an unpinned name and never checks for a newer one,
    so earlier installs were frozen on whatever they first fetched; run
    npx -y @french-castle/jev-code@latest setup once to move to a pinned command. Re-running setup
    replaces an existing registration whose command differs, including through claude mcp and
    codex mcp, and reports it as updated.
  • doctor shows the pinned version of each registration and says when to re-run setup.
  • The README and guides invoke setup and doctor with @latest, for the same reason.
  • npm version runs scripts/sync-version.mjs, which keeps the plugin manifest, the skill
    metadata, the plugin .mcp.json, and the documented launch commands on the new version.

Fixed

  • Config backups taken within the same second no longer overwrite each other.
  • The Codex config.toml editor keeps the file's line endings and handles an env sub-table
    declared before its parent.

Full details: CHANGELOG.md. Previous release: v0.2.1.

v0.2.1: verified on four harnesses, first npm release

Choose a tag to compare

@github-actions github-actions released this 27 Sep 21:58
888df07

A patch release verified end to end on Claude Code, Codex, Pi, and OpenCode: setup through the CLI, a real tool call from each agent, and skill discovery. It is also the first version on npm, under the package name @french-castle/jev-code.

npx -y @french-castle/jev-code setup

Changed

  • The npm package is @french-castle/jev-code. The @francoischastel scope was never
    published to, so nothing installed changes; npx -y @french-castle/jev-code setup is the
    install command from now on. The GitHub repository stays at FrancoisChastel/jev-code.
  • @modelcontextprotocol/sdk 1.30.1. Development tooling moved to TypeScript 7 and the Node 26
    type definitions; the supported Node range is unchanged (20+).
  • The OpenCode guide notes that OpenCode prefixes MCP tools with the server name
    (jev_jev_check).

Fixed

  • setup pi --project passes --approve to pi install -l, which pi requires before it edits
    a project's .pi/settings.json; without it the install failed with "Project is not trusted".
  • The MCP server sends the versioned user agent, like the CLI.
  • doctor keeps a space between a long skill path and the tool column.

Full details: CHANGELOG.md. Previous release: v0.2.0.

v0.2.0: Jev through OpenRouter and Vercel AI Gateway

Choose a tag to compare

@github-actions github-actions released this 27 Sep 14:32

Package name. The npm package is published as @french-castle/jev-code; the @francoischastel scope shown in earlier drafts was never used. v0.2.0 itself was not published to npm; install v0.2.1 or later.

Jev now works through OpenRouter and Vercel AI Gateway as well as directly on TypeSafe, and getting set up is one command.

npx -y @french-castle/jev-code setup

Highlights

  • Bring the key you already have. TYPESAFE_API_KEY, OPENROUTER_API_KEY, or AI_GATEWAY_API_KEY: the key's prefix (ts_, sk-or-, vck_) picks the host, whichever variable holds it. All three hosts serve Jev behind the same System One API, so the tools, the skill, and every harness adapter are unchanged.
  • setup asks for a key. Run it in a terminal with no key exported and it asks for one with hidden input, writes it into the harness configs, and prints the export line Pi and the CLI need. --no-prompt opts out.
  • doctor names the host. It shows which host and key variable are in use, warns when several keys are set (JEV_CODE_PROVIDER picks one), and refuses a key and base URL that disagree before any request is made.

Security

  • A key is only ever sent to the host that issued it. A base URL on another known host is refused; a proxy base URL applies to TypeSafe keys unless JEV_CODE_PROVIDER states the intent.
  • setup copies only the key in use into harness configs, scrubs it from a harness CLI's output, and redacts it in printed commands. The MCP server logs the host in use to stderr once, where harnesses keep their logs.
  • Details and the reporting policy: SECURITY.md.

Also in this release

  • Clearer API errors: the host's own message instead of a JSON blob (TypeSafe nests it under detail, OpenRouter under error).
  • OpenRouter requests carry the optional app attribution headers.
  • The missing-key error now reads No API key found and lists the three accepted variables.
  • The release workflow creates the GitHub release even when npm publishing is skipped, and says why.

Upgrading from 0.1.0

Nothing changes for TypeSafe users. If you matched the exact text TYPESAFE_API_KEY is not set anywhere, update it. When you switch hosts, re-run jev-code setup so the harness configs carry the new key.

Not in this release

Cloudflare Workers AI also serves Jev but uses a different request envelope; support is a planned follow-up.

Full details: CHANGELOG.md.