Repository navigation
Releases: jomatsu/pi-jev-auto-mode
Releases · jomatsu/pi-jev-auto-mode
Release list
v0.6.0
- Add explicit decision backends for Perplexity Decisions, Cloudflare Clef/Clef-flash,
OpenAI Decisions (gpt-6-luna), and a loopback Strands Decider server. TypeSafe remains
the default; provider selection is environment-only and credentials are never reused
across providers. - Validate each REST contract, including Cloudflare's result envelope and finite
noul
probabilities for every requested question. Errors remain blocked under every uncertain
policy. Bound retries, preserve cancellation, and serialize local Strands requests.
A connection lost while reading a remote response body is retried as a network error,
not reported as a malformed answer. - Share Strands exclusion across adapters and extension reloads in one Pi runtime. Never
retry local inference; if a dispatched request ends before completion is known, halt the
endpoint and block queued requests. Recovery requires restarting the dedicated server
and then Pi, so a client timeout cannot silently start overlapping server work. - OpenAI Decisions: each
noulquestion is sent as a namedpredicatewith its criteria
folded into the instructions; answers must come back in question order with a finite
probability, and a refusal blocks the call.OPENAI_API_KEYonly; no fallback. - Pin a Jev release.
/jev-auto-mode modellists the releases available to the TypeSafe
key;model <release>saves it asjevModel(only after the API lists it) and
model latestreturns to the defaultjev-latest.JEV_AUTO_MODE_MODELand
TYPESAFE_DEFAULT_MODELstill take precedence, and status shows which applied. - Correct documentation to reflect the existing
uncertain: allowdefault from 0.4.1.
Threshold values and permission policy are unchanged; new-provider calibration and live
inference remain unverified.
0.5.0
- Decision records are compact by default. An approval is drawn as one line — status, tool,
latency, and the command — and a block as two, keeping the rationale. Each record used to take
five padded blocks, so a long session was mostly gate records./jev-auto-mode display full
(or"display": "full") restores the previous view, and the expanded view shows every detail
in either mode.
0.4.1
- An unclear answer passes by default.
uncertaindefaulted todeny, which meant a
judgment the model was unsure about stopped the call. That is the interruption an auto mode
exists to remove; clear rejections still block.uncertain denyanduncertain askremain
available for anyone who wants the stricter behaviour. - Without a key the gate says so and stops, instead of inventing a verdict and blocking with
an unexplained reason. The message names the fix:/jev-auto-mode login, or
/jev-auto-mode off. The footer reads🛡 jev no keyin that state, and the session start
warns once. - A chain of read-only commands is read-only.
cd src && ls -la && git log -3was judged as
a whole because the allowlist rejected any command containing shell control syntax, so agents
paid a judgment round trip for their most common line. Each segment is now checked on its own,
andcdis allowed. A chain containing anything else (curl … | sh) is still judged. - The docs match the no-key behaviour. The README and a comment still described a fallback
that confirms in a UI, which the gate no longer does: without a key it stops the calls it cannot
judge and says it is not connected to Jev.
v0.4.0
The semantic layer now sees everything the deterministic layer cannot vouch for, and it does
not stop ordinary work.
gateScope(defaultall) replaces the denylist as the way calls are selected. A dangerous
pattern can only recognise a shape someone wrote down first: a request that uploads a file
(curl -d @...) once ran with no judgment at all because no pattern described it, and adding
patterns to a denylist is a race that never ends. Underall, the deterministic layer names
what it can vouch for and everything else is judged.matchedkeeps the old behaviour.
/jev-auto-mode scope all|matchedswitches between them.- The intent question is asked only about commands the deterministic layer recognised as a
dangerous shape, and only a clear "this was not requested" blocks. Asked about every command,
it blocked ordinary work the request never mentioned — an unrequestedmv,cp,tar,
chmod +x, ornode -e. An auto mode that stops for those has no reason to exist. Measured
after the change: those run, while an unrequestedgit reset --hard,npm publish,rm -rf,
orsudostill blocks (p = 0.04–0.11). - Read-only inspection is now a real fast path, because under
allit carries the load the
denylist used to carry:cat,head,tail,wc,find,jq,diff,sort,stat,
version probes, and read-only git subcommands. Destructive variants (find -delete,
git tag -d,push --force) still match dangerous patterns and are judged. - The user's
safeCommandsoutranks a dangerous-pattern match; the built-in read-only list does
not, sogrep secret ~/.ssh/id_ed25519is judged even thoughgrepis read-only. Escalated:replacesMatched:in the confirmation dialog, because underallthe reasons
are not all pattern matches.
v0.3.0
The 0.2.0 default resolved the middle band as a block, but two conditions were still
required, which made the gate strict for structurally wrong reasons rather than measured
ones. Corrected:
intent_coverage0.80 → 0.60. Measured answers are 0.77–0.98 when the user asked and
0.06–0.15 when they did not, so 0.80 sat on top of the "asked" cluster instead of inside the
empty band between the two. The middle band is now (0.40, 0.60).policy_compliancerequired → hazard. It measured 0.66–0.85 on calls where nothing was
wrong, so as a requirement it blocked every gated call the moment a policy was configured.
Now only a clear violation stops a call.path_not_protectedrequired → hazard. An unclear answer no longer blocks on its own; the
user's request decides. A target the model clearly identifies as a credential store still
blocks (.envmeasured p = 0.02,~/.sshp = 0.03).- New
no_fetched_code_execution, required, asked only for commands the deterministic layer
already recognised as downloaded-script execution.curl | bashstays blocked (p = 0.02)
without making every other call strict. .env.example,.env.sample,.env.template, and.env.distare no longer treated as
credential stores: templates belong in the repository.- The intent window widened from 8 messages / 4000 characters to 12 / 6000, so an ongoing task
does not lose the request that justifies it and look unrequested as a result.
v0.2.0
- The middle band no longer asks the user by default. An auto mode that stops to ask has
handed the decision back to a human, and the agent can always ask in conversation if it needs
guidance. A judgment that is neither satisfied nor rejected now blocks, so the gate never
takes over the screen. uncertainsetting and/jev-auto-mode uncertain deny|ask|allowcontrol it.denyis the
default;askrestores the confirmation dialog;allowtrusts the band./jev-auto-mode threshold editpicks a rule and prompts for a value, showing each rule's
current threshold next to the last probability the model returned for it.
v0.1.1
- Correct the product name. It is Jev — TypeSafe's System One model, spelled with a
capital J and lowercaseev, as in their announcement, FAQ, and the model id
typesafe-ai/jev— not "JEV". Fixed in the README, docs, source comments, and the package
description. The0.1.0metadata cannot be edited, so this release exists to carry the
corrected name. No behavioral change.
v0.1.0
Initial release.
- Two-layer gate: a deterministic policy envelope (hard-deny, allow/deny patterns,
dangerous-command detection, protected paths) and a JEV semantic layer that only sees
what the first layer escalated. - Conditions carry a
mode(required/hazard) and aseverity(hazard/soft),
calibrated against measured probabilities from the real API (docs/calibration.md). - Fail-closed everywhere: no key, timeout, malformed response, cancellation, missing
answer, or oversized request all resolve to a block rather than an approval. /jev-auto-modecommand surface:on|off,login|logout,policy,threshold.- Decision records via
pi.appendEntry, kept out of the LLM context, expandable to a
per-condition tuning sheet. - Network uploads of local data and reads of credential material are gated: a
curl -d @file
that matched nothing ran with no judgment before this. pi installfrom npm or git; taggedpi-packagefor the package gallery.