This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Affected surfaces
ReleasePort's take
Light signalReleasePort v0.1.5 adds a global `--timeout` flag to all network‑touching verbs and enhances click response data.
Why it matters: The new `--timeout <duration>` flag lets developers enforce per‑operation time limits on every network verb, improving reliability for long‑running tasks; click responses now expose the final URL and full redirect chain.
Summary
AI summaryUpdates Release Notes, Install heso-cli 0.1.5, and Engine across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Adds global `--timeout <duration>` flag to all network‑touching verbs. Adds global `--timeout <duration>` flag to all network‑touching verbs. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Feature | Medium |
Click responses now include `final_url` and `redirects[]` chain. Click responses now include `final_url` and `redirects[]` chain. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Feature | Medium |
Unifies click, fill, and submit response envelopes to a common schema. Unifies click, fill, and submit response envelopes to a common schema. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Feature | Medium |
`stamp` step entries now carry `status`, `observed`, `started_at`, and `finished_at` timestamps. `stamp` step entries now carry `status`, `observed`, `started_at`, and `finished_at` timestamps. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Feature | Medium |
Restores `heso search <query>` as a top‑level verb while keeping the registry alias. Restores `heso search <query>` as a top‑level verb while keeping the registry alias. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Deprecation | Low |
Removes unused `SealOptions.tsa` and `SealOptions.noResign` from npm TypeScript types. Removes unused `SealOptions.tsa` and `SealOptions.noResign` from npm TypeScript types. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Bugfix | Medium |
Runs `is_bot_challenge` before HTTP‑status branch, surfacing Cloudflare/Imperva interstitials as `bot_challenge`. Runs `is_bot_challenge` before HTTP‑status branch, surfacing Cloudflare/Imperva interstitials as `bot_challenge`. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Bugfix | Medium |
Ecosystem `pull` now verifies BLAKE3 hash of downloaded platform binaries. Ecosystem `pull` now verifies BLAKE3 hash of downloaded platform binaries. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Bugfix | Low |
Updates Python wrapper docstrings to document the `timeout` kwarg on several verbs. Updates Python wrapper docstrings to document the `timeout` kwarg on several verbs. Source: llm_adapter@2026-05-27 Confidence: high |
— |
| Refactor | Low |
Removes duplicate unreachable `Some("search")` dispatch arm in Rust CLI code. Removes duplicate unreachable `Some("search")` dispatch arm in Rust CLI code. Source: llm_adapter@2026-05-27 Confidence: high |
— |
Full changelog
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 | sh
Install 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 |
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About blank3rs/heso](https:
All releases →Related context
Related tools
Earlier breaking changes
- v0.3.0 `heso search` defaults to Mojeek, Brave, Marginalia, Wikipedia (plus SearXNG) instead of DuckDuckGo.
- v0.2.0 Removes the plat registry, `publish`, `pull`, and `list` verbs.
- v0.1.8 `run` now verifies input platform integrity before replaying and exits on mismatch (exit 1).
- v0.1.8 `read` no longer fetches external `<script src=...>` by default; opt‑in with `--js-fetch`.
Beta — feedback welcome: [email protected]