0.4.1

NousResearch/hermes-agent0.4.1Sep 15, 2026by github-actions[bot]

Upgrading?

AI Summary

This release focuses on experimental CORS, IndexedDB conformance, and new Web APIs. It improves form handling, custom elements, and CSS rendering performance.

Key Highlights

  • Experimental CORS implementation with Origin header validation.
  • IndexedDB WPT conformance pass.
  • New Web APIs: `CountQueuingStrategy`, `resource-timing`, `navigator.sendBeacon`.
  • SVG GraphicsElement support for CTM.

New Features

  • CORS implementation with request header validation.
  • `nextunique` / `prevunique` cursor directions.
  • `window.stop()`, `img.decode()`, `HTMLInputElement` `showPicker`.
  • CSS custom properties support.
  • Ad blocker `/regex/` filters with PCRE2.

Full Release Notes

## CORS (experimental)
CORS is off by default. Enable it with `--experimental-features cors`.

- CORS implementation: obey cross-origin checks on fetch/XHR instead of allowing them unconditionally
- `Origin` header + request header validation
- XHR changes for the CORS WPT tests

## IndexedDB
- WPT conformance pass
- `setName` on `IDBObjectStore` and `IDBIndex`
- `nextunique` / `prevunique` cursor directions
- Keep the `upgradeneeded` event alive past dispatch; better error handling
- Fix use-after-free reading `txn._db` after `releaseRef` frees it

## New Web APIs
- `CountQueuingStrategy` and `ByteLengthQueuingStrategy`
- `resource-timing`; `Performance` is now an `EventTarget`
- `window.stop()`
- `img.decode()`
- `navigator.sendBeacon` returns `true`
- `Headers.getSetCookie`, `customElements.getName`, `Element.part`
- `HTMLInputElement` `valueAsNumber`, `valueAsDate`, `stepUp`/`stepDown`, `showPicker`
- `SVGGraphicsElement.getCTM` and `getScreenCTM`
- `canvas` `measureText` and the drawing methods chart libraries probe
- `matchMedia` change events and real `addListener`/`removeListener`
- Reflect `HTMLElement.contentEditable`
- Basic support for CSS custom properties

## Forms / input
- Text entry: move the cursor on caret keys and to the end on value set; clamp selections against the current value
- Trusted `beforeinput` is cancelable
- A disabled `fieldset` disables its controls' activation and validation
- `option.selected = true` deselects its siblings in a single select
- Fix select value assignment with no matching option

## Custom elements
- Upgrade autonomous custom-element clones in place
- Don't upgrade custom elements in a windowless document
- Skip null nodes when a create callback fails

## CSS / rendering / performance
- Memoize `StyleManager` visibility per element
- Append inserted rules to the buckets instead of rebuilding
- Materialize inline styles where layout reads them
- `--strip-mode` gains `shell` and `clutter` options
- Faster `nth-*` selectors, class matching, attribute lookup, and pseudo-class parsing

## Ad blocker
- Run `/regex/` filters with PCRE2
- Request engine

## Protocols
- WebDriver: HTTP WebDriver session management
- CDP: `DOM.focus`; honor `runImmediately`, `screenWidth`/`screenHeight`, `browserContextId`
- CDP: request interception patterns; a context per isolated world per frame
- CDP: wheel events scroll the viewport unless over a scroll container
- CDP: fix message lifetimes and console argument serialization; remove a terminate/disconnect race

## HTTP / Networking
- Keep connections alive across navigations; better redirect handling; timeout tweaks
- Enable `CURLOPT_PIPEWAIT` on every easy handle
- Update curl to 8.22.0
- Cookies: accept `Secure` and `__Host-` on loopback origins; apply the `SameSite=Lax` exception only on safe methods; compute site-for-cookies from a frame's ancestor chain
- Guard WebSocket message-length parsing against integer overflow
- Fix drive-letter lookalike URL segments on non-file schemes

## CLI / tools
- `--locale` and `--timezone`, with language signals derived from one value
- Suggest the closest flag or command on a typo
- `note` log level can be silenced; log CLI tips
- Scroll the nearest scroll container from the `scroll` tool
- Click dispatches a full pointer/mouse sequence, not a bare click event
- Agent: route REPL output per tool and align page tables of any size

## Stability / memory
- Crash fixes: `TryCatch` copied by value, `history.state` / `Navigation.currentEntry`, V8 re-entry on an unhandled promise
- Fix `Notification` use-after-free
- Disconnect runaway intersection observers; raise timer caps
- Leak fixes: robot store, JS terminated during MutationObserver/IntersectionObserver delivery, cloned HTTP responses, V8 backing store
- V8: notify isolate shutdown, restore the initial heap limit, avoid rearming heap termination during teardown
- Disarm the watchdog before protocol teardown

Related Repositories