Releases: heso-inc/heso
Releases · heso-inc/heso
0.3.1 - 2026-06-09
Release Notes
Changed
- Docs: the README Status section described the hesojs determinism
engine swap (ADR 0030) as an upcoming change — it actually shipped in
0.3.0. Reworded to the current state. No code changes.
Added
- First publish of the Python distribution under its current name
heso-runtimeon PyPI (pip install heso-runtime). The import
name staysheso; the binary and the Node package (@ixla/heso) are
unchanged.
heso-cli 0.3.1
Install heso-cli 0.3.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/heso-inc/heso/releases/download/v0.3.1/heso-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/heso-inc/heso/releases/download/v0.3.1/heso-cli-installer.ps1 | iex"Download heso-cli 0.3.1
| File | Platform | Checksum |
|---|---|---|
| heso-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
heso-verify 0.3.1
Install heso-verify 0.3.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/heso-inc/heso/releases/download/v0.3.1/heso-verify-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/heso-inc/heso/releases/download/v0.3.1/heso-verify-installer.ps1 | iex"Download heso-verify 0.3.1
| File | Platform | Checksum |
|---|---|---|
| heso-verify-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-verify-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-verify-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-verify-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-verify-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
0.3.0 - 2026-05-31
Release Notes
Changed
- The JS engine is now built from the in-tree hesojs determinism
fork (a QuickJS-NG fork) instead of stockrquickjs's vendored tree
(ADR 0030). Determinism is injected at the C layer —
JS_SetClockSource/JS_SetRandomSource/JS_SetRuntimeTimezone
replace the JS-side monkey-patches (theWrappedDateshim, the
Math.random/performance.nowclosures, and the process-global
TZ=UTCpin).cryptois now a pure-JS shim over the seeded engine
RNG rather than a Rust closure. heso searchno longer queries the DuckDuckGo endpoints by default —
they202/403-throttle scripted callers per IP and only added a
blockedrow from a normal egress IP. They remain available opt-in
via--engines ddg,ddg-lite. The default pool is now Mojeek + Brave +
Marginalia + Wikipedia (plus SearXNG when--searx-urlis set).- Repository and homepage links updated to
github.com/heso-inc/heso
across the Cargo, npm, and PyPI package metadata, the CLI banner, and
the docs.
Added
- The README publishes measured macOS arm64 release-binary stats
(binary size, cold-start latency over the network, and engine-only
latency).
Removed
- The
disable-assertions(-DNDEBUG) workaround and the four-step
DropGC dance. heso now ships with C assertions ON: the
ES2025 iterator-helper shutdown-GC reference cycle that aborted
eval-domon some pages is fixed at the engine (hesojs F1), with
JS_FreeRuntimeForceas the safety net.
Fixed
eval-domno longer aborts tearing down the runtime on pages that
exercise the iterator-helper shutdown-GC cycle (e.g. astro.build,
vercel.com).- First-run signing-identity creation is now atomic: the 32-byte key is
written to a temp file and hard-linked into place, so concurrentheso
invocations on a fresh machine can no longer observe a half-written key
and fail withidentity key file ... has wrong length: expected 32, got 0.
Note:
plat_hashshifts for pages that read the date or RNG.
NativeDate.toString()andMath.randomproduce different bytes
than the old JS shims (determinism still holds: same seed + same
engine version → identical bytes). Re-stamp cassettes recorded
against the old engine. Plats over static content (no date/RNG) are
unaffected and replay byte-identically across the swap.
heso-cli 0.3.0
Install heso-cli 0.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/heso-inc/heso/releases/download/v0.3.0/heso-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/heso-inc/heso/releases/download/v0.3.0/heso-cli-installer.ps1 | iex"Download heso-cli 0.3.0
| File | Platform | Checksum |
|---|---|---|
| heso-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
heso-verify 0.3.0
Install heso-verify 0.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/heso-inc/heso/releases/download/v0.3.0/heso-verify-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/heso-inc/heso/releases/download/v0.3.0/heso-verify-installer.ps1 | iex"Download heso-verify 0.3.0
| File | Platform | Checksum |
|---|---|---|
| heso-verify-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-verify-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-verify-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-verify-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-verify-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
v0.2.2
heso-cli 0.2.2
Install heso-cli 0.2.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.2.2/heso-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.2.2/heso-cli-installer.ps1 | iex"Download heso-cli 0.2.2
| File | Platform | Checksum |
|---|---|---|
| heso-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
heso-verify 0.2.2
Install heso-verify 0.2.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.2.2/heso-verify-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.2.2/heso-verify-installer.ps1 | iex"Download heso-verify 0.2.2
| File | Platform | Checksum |
|---|---|---|
| heso-verify-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-verify-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-verify-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-verify-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-verify-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
v0.2.1
heso-cli 0.2.1
Install heso-cli 0.2.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.2.1/heso-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.2.1/heso-cli-installer.ps1 | iex"Download heso-cli 0.2.1
| File | Platform | Checksum |
|---|---|---|
| heso-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
heso-verify 0.2.1
Install heso-verify 0.2.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.2.1/heso-verify-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.2.1/heso-verify-installer.ps1 | iex"Download heso-verify 0.2.1
| File | Platform | Checksum |
|---|---|---|
| heso-verify-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-verify-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-verify-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-verify-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-verify-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
0.2.0 - 2026-05-28
Release Notes
Removed
- The plat registry. The
publish,pull, andlistverbs and the
heso registrynamespace are gone, along with the hosted store at
heso.ca/ecosystem. Sharing a plat now means handing someone the
file (or a URL to it); they runheso run -orheso verifyagainst
it. heso no longer publishes or hosts plats.
Changed
searchnow queries Mojeek alongside DuckDuckGo and the Wikipedia
knowledge block (plus an optional SearXNG endpoint via--searx-url
/HESO_SEARX_URL), so results are returned more reliably when one
backend is unavailable. No API key is required.
heso-cli 0.2.0
Install heso-cli 0.2.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.2.0/heso-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.2.0/heso-cli-installer.ps1 | iex"Download heso-cli 0.2.0
| File | Platform | Checksum |
|---|---|---|
| heso-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
heso-verify 0.2.0
Install heso-verify 0.2.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.2.0/heso-verify-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.2.0/heso-verify-installer.ps1 | iex"Download heso-verify 0.2.0
| File | Platform | Checksum |
|---|---|---|
| heso-verify-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-verify-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-verify-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-verify-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-verify-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
0.1.9 - 2026-05-28
Release Notes
Added
- A plat body now records the
seedit ran under (FetchPage.seed,
default 0), an ordinary field covered byplat_hash, so a run is
self-describingly reproducible (HESO/1.0 §4). heso-verify: a standalone HESO/1.0 Grade-0 verifier crate that owns
the canonicalization,plat_hash, and sealed-envelope open/verify
logic with a minimal dependency set (serde, serde_json, serde_jcs,
blake3, ed25519-dalek verify-only, base64) — no engine, DOM, or
network crate. The engine's verify path now delegates to it, so the
open/verify logic lives in exactly one place. The verb surface
(heso unseal/heso verify) is unchanged.
Changed
heso runreplays under the seed recorded in the input plat rather
than a hardcoded 0, so a deterministic replay reproduces the same DOM
an independent verifier would. An explicit--seedstill overrides;
legacy plats with no recorded seed fall back to 0. Replaying an
unmodified plat stays byte-identical (the stamp → runplat_hash
contract holds).
Fixed
- The PyPI wheel builds again. setup.py hands the native
hesobinary
to setuptools as ascriptsentry; setuptools'build_scripts
command tried to tokenize it as Python and failed the wheel build
(source code cannot contain null byteson Linux,invalid or missing encoding declarationon Windows). The binary is now copied
into the wheel's*.data/scripts/directory verbatim. 0.1.8 shipped
to npm but not PyPI for this reason; 0.1.9 restores PyPI.
heso-cli 0.1.9
Install heso-cli 0.1.9
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.1.9/heso-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.1.9/heso-cli-installer.ps1 | iex"Download heso-cli 0.1.9
| File | Platform | Checksum |
|---|---|---|
| heso-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
heso-verify 0.1.9
Install heso-verify 0.1.9
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.1.9/heso-verify-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.1.9/heso-verify-installer.ps1 | iex"Download heso-verify 0.1.9
| File | Platform | Checksum |
|---|---|---|
| heso-verify-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-verify-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-verify-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-verify-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-verify-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
0.1.8 - 2026-05-28
Release Notes
Added
clickon a non-navigating element (an in-page handler that mutates
the DOM or callshistory.pushState) now returns the post-click
text,tree, andcontent_hash, so an agent can see what changed.
The<a href>navigation path (which already returned the
destination's fields) is unchanged.rungains--no-verify-inputto skip the input-integrity check
introduced below.
Changed
- The
hesocommand installed bypip install hesois now the native
Rust binary itself (shipped via the wheel's*.data/scripts/
directory) instead of a Python console-script that booted the
interpreter before exec'ing the binary.import hesoand
python -m hesoare unchanged. readno longer fetches external<script src=...>by default; pass
--js-fetchto opt in (matchingread --helpandeval-dom). Inline
scripts are unaffected.runnow verifies the input plat's integrity before replaying and
refuses on aplat_hashmismatch (exit 1,{ok: false, error: {code: "plat_integrity_mismatch", ...}}); a missing or malformedplat_hash
exits 2.--no-verify-inputrestores the prior replay-anything
behavior. This is a contract change —runpreviously replayed any
input and exited 0. See ADR 0024.
Fixed
heso readnow accepts--js-fetch. The flag was advertised in
read --helpbut rejected by the argument parser.readoutput is internally consistent after JavaScript runs:tree,
title,description, andmetadataare derived from the post-JS
DOM, matchingtextandactions. Previouslytreereflected the
pre-JS HTML whiletextreflected the post-JS mutated DOM.read'scookiesfield now includes cookies set by page JavaScript
viadocument.cookie, merged with the networkSet-Cookieheaders.
batchandservekeep their per-response cookie snapshot.
Install heso-cli 0.1.8
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.1.8/heso-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.1.8/heso-cli-installer.ps1 | iex"Download heso-cli 0.1.8
| File | Platform | Checksum |
|---|---|---|
| heso-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
0.1.7 - 2026-05-28
Release Notes
Added
--no-private-networksflag (and theHESO_BLOCK_PRIVATE_NETWORKS
environment variable) opt into SSRF protection. heso resolves each
target and refuses the request if any resolved IP is loopback,
RFC1918 private, link-local (including the169.254.169.254
cloud-metadata address), unspecified, CGNAT (100.64.0.0/10), IPv6
unique-local, or an IPv4-mapped form of any of those. The check runs
on the resolved address, so an inward-pointing hostname is caught as
well as a literal IP, and a redirect to a literal private IP is
refused mid-chain. Off by default solocalhoststays reachable;
enable it per call with the flag or process-wide with the env var. A
blocked request emits{ok: false, error: {code: "private_network_blocked", url}}and exits 1.--js-timeout <duration>oneval-jsandeval-domcaps script
wall-clock time via an interrupt-handler watchdog and returns a
structuredtimeouterror on expiry. Default: no cap.eval-js/eval-domserialize a DOM-element result as
{tag, outerHTML, attrs}instead of an empty object.
Changed
--best-effortpartial_reasongains three values:bot_challenge
now also covers Reddit-style "please wait for verification"
interstitials;non_html_content_typeflags a200 OKcarrying a
non-HTML body (PDF, JSON, octet-stream, images) instead of treating
an empty extraction as a clean page; andhttp_<code>reports a
non-2xx status.eval-js/eval-domrun on a dedicated 8 MB-stack thread, so deep
recursion trips QuickJS's own guard and returns a structured engine
error instead of overflowing the OS stack. Serialized eval results
are capped at 10 MB with a structured error.
Fixed
- The broken-pipe hook recognizes Windows pipe-closed errors (OS error
109 / 232) alongside the Unix "Broken pipe" string, so piping a
verb's output into a reader that closes early (heso ... | head)
exits cleanly on every platform instead of aborting with a panic. verify --trusted-keys(andHESO_TRUSTED_KEYS) fail closed on an
empty allowlist: zero entries is an error (exit 1), not a
trust-anyone wildcard.- Argument errors on the eval and read paths (malformed URL, ASCII
control characters in a URL, unknown--includekey, empty search
query, ref/locator misses) emit a structured{ok: false, error: {code, message}}envelope on stdout alongside the stderr line. URLs
containing control characters are rejected rather than silently
rewritten. stamp/runreport an actionable error when a plan action carries
a CLI-only--text/--selector/--aria-labellocator instead
of a stableref, pointing atheso find/heso readrather than
a terse "unknown field" message.
Install heso-cli 0.1.7
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.1.7/heso-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.1.7/heso-cli-installer.ps1 | iex"Download heso-cli 0.1.7
| File | Platform | Checksum |
|---|---|---|
| heso-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
0.1.6 - 2026-05-27
Release Notes
Changed
- Removed internal project-document references from public surfaces.
The verify-side stderr ("mode: liveis not replay-safe ..."), the
cassette-miss errors emitted by the JSfetch()andXMLHttpRequest
shims, the Python wrapper docstrings, the TypeScript declarations,
the README, and the CONTRIBUTING notes no longer cite internal
project documents. User-facing prose now describes the behavior
directly. - README's
heso rundescription drops the parenthetical project-doc
citation; receipts example no longer trails "per " on
the live-mode rejection. - Hygiene:
.pre-commit-config.yamland the hygiene workflow's.md
allowlist now admit the four standard meta files
(CONTRIBUTING.md,SECURITY.md,CODE_OF_CONDUCT.md,
CHANGELOG.md). The oldreadme-sync-blocksjob (which assumed
npm/heso/README.mdlived in the git tree) is replaced with a
positive assertion that.github/workflows/pypi.ymlcarries the
publish-timecp README.md npm/heso/README.mdstep. Drift between
the GitHub-displayed README and the npm-displayed README is now
structurally impossible — the file is generated at publish time
from the same root README.
Install heso-cli 0.1.6
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.1.6/heso-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.1.6/heso-cli-installer.ps1 | iex"Download heso-cli 0.1.6
| File | Platform | Checksum |
|---|---|---|
| heso-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
0.1.5 - 2026-05-27
Release Notes
Added
- Global
--timeout <duration>flag on every network-touching verb
(open,read,click,fill,submit,eval-dom,batch,
stamp,refresh,meta,find,tree,ls,cat). Defaults to
30 seconds. On timeout the verb emits a structured envelope
{ok: false, error: {code: "timeout", timeout_ms, elapsed_ms, url}}
and exits 1.--timeout 0opts out. The Python and Node wrappers
install atimeout + 5sprocess-kill backstop. - Click responses now include
final_url(where the navigation
actually landed after following the destination's redirect chain)
andredirects[](a{from, to, status}chain) alongside the
existingnavigated/navigated_tofields. - Click, fill, and submit responses now share a unified writing-verb
envelope:{ok, op, url, ref, selector, element_id, value, result, console, error}. Selector misses surface asok: falsewith
error.code: "selector_not_matched". stampstep entries carry per-stepstatus,observedpayload,
and logicalstarted_at/finished_attimestamps in addition to
the existingverb/action/url_before/url_afterfields.CONTRIBUTING.md,SECURITY.md,CODE_OF_CONDUCT.md, and this
changelog at the repo root.
Changed
heso search <query>is a top-level verb again. The
heso registry search ...form continues to work as the
registry-namespace alias.- README rewritten to lead with
eval-dom, drop the manifest tone,
and name the verified medium-tier WAF pass-throughs (Zillow,
Walmart, CoinGecko, LinkedIn anonymous, TripAdvisor, Yahoo Finance,
old.reddit). The status note now scopesbot_challengehonestly to
the nine WAF needles plus__cf_chl_opt. - npm package README is sourced from the root
README.mdat publish
time byscripts/deploy.ps1and.github/workflows/pypi.yml, so
the GitHub homepage and the npm package can no longer drift
independently. Staleunpack/plat-*blocks gone. spec/HESO-1.0.mdis now a thin pointer; the canonical spec lives
at https://heso.ca/spec.heso --helpbanner rewritten to match the current dispatch —
removed stale entries for verbs that were collapsed into the
polymorphic surface or moved underheso registry, and removed
footer links to internal-only ADR files.- Engine: response bodies are capped before DOM parsing
(engine-js), and registry / Wikipedia / SearXNG responses are
capped at 4–16 MiB each. - Engine:
clienforces a wall-clock cap onopenandread. serve: live-pages store bounded at 32 entries.- Trace / primitives:
ActionandPrimitiveOpinputs now reject
unknown fields rather than silently dropping them.
Fixed
is_bot_challengeruns before the HTTP-status branch in
partial_reason_for_status, so Cloudflare / Imperva interstitials
surface aspartial_reason: "bot_challenge"regardless of the
wrapper status (200 / 403 / 429 / 503).- Ecosystem
pullnow verifies the downloaded plat's BLAKE3 hash
against the requested content address. - Module docstring and
cmd_replaystderr in
crates/heso-cli/src/main.rsno longer reference removed verbs or
internal-only docs. - README no longer links to ADR files under
decisions/, which is
gitignored in the public repo. SealOptions.tsaandSealOptions.noResignremoved from the npm
TypeScript types (they were declared but never wired through the
CLI). The Pythonsealdocstring drops the same unimplemented
flags.- Python wrappers document the
timeoutkwarg onclick,fill,
submit,meta,ls,cat,find,tree, andrefresh— the
flag has worked since the global--timeoutlanded but was missing
from the docstrings. - Duplicate
Some("search")dispatch arm incrates/heso-cli/src/main.rs
removed (the second occurrence was unreachable).
Releases prior to this changelog are documented at
https://github.com/blank3rs/heso/releases.
Install heso-cli 0.1.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/blank3rs/heso/releases/download/v0.1.5/heso-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/blank3rs/heso/releases/download/v0.1.5/heso-cli-installer.ps1 | iex"Download heso-cli 0.1.5
| File | Platform | Checksum |
|---|---|---|
| heso-cli-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| heso-cli-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| heso-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| heso-cli-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| heso-cli-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |