Skip to content

v0.9.6 — key_press crash fix + auth-hardening + docs/CI

Choose a tag to compare

@AmrDab AmrDab released this 23 May 05:51
· 488 commits to main since this release

key_press crash fix + auth-hardening + docs/CI cleanup

A focused, conservative release: one real ship-bug fix surfaced by an end-to-end live test, the security hardening from the dashboard-auth audit, and documentation/CI catch-up.

Fixed — key_press crashed on non-printable keys (#125, fixes #120)

A live test driving the compact MCP surface end-to-end (Outlook email + Paint drawing, tools only) surfaced that computer.key / key_press threw Cannot read properties of undefined (reading 'toLowerCase') on Backspace, Enter, Tab, Delete, and Ctrl+* combos. Root cause: normalizeKey() called .toLowerCase() without guarding non-string / empty input.

normalizeKey() now validates its input and throws a clear, debuggable error instead of a cryptic TypeError; native-desktop.ts guards the parsed-key path the same way. The fix sits on the shared NativeDesktop path that computer.key traverses on all three platforms (Windows, macOS, Linux). 9 new tests at src/__tests__/keys-normalization.test.ts. Thanks to first-time contributor @xxiaoxiong.

Security — dashboard cookie auth instead of inline-JS token injection (#112)

The dashboard no longer injects the bearer token into client JS. The token is now an httpOnly + sameSite:strict cookie, killing the XSS / malicious-extension / misbind exfiltration vector. The auth gate accepts both Authorization: Bearer headers (external tooling) and the cookie (dashboard) — backward-compatible for header-based callers.

Security — requireAuth no longer silently accepts on-disk token rotation by default (#112)

Drift acceptance is now opt-in via CLAWD_ALLOW_DISK_TOKEN_DRIFT=1. Default is fail-closed. Backward-incompatible for any tooling that rotated the disk token to authenticate against a running daemon — set the env var to restore the previous behavior.

Docs — Toolbox / Tools naming + restored action-enum tables (#111)

Restored the per-toolbox action enum tables that #93 inadvertently stripped, and labeled the two surfaces Toolbox (6 compound tools) and Tools (97 granular primitives).

CI — Linux nut-js mock + Windows-Node-20 flake skip (#112, #118)

Global @nut-tree-fork/nut-js mock so vitest boots on Linux runners without libXtst; mcp-orphan-teardown now skips on Windows + Node 20.x (native-module teardown exceeds the 5s budget there; Node 22.x is fine).


Known follow-ups (not in this release): Save-dialog interaction bugs (#121, #122, #123) and an over-broad safety regex (#124) were filed from the same live test and are deferred to a future release with dedicated tests.

🤖 Generated with Claude Code