From 4e61eddfda1fd8738dbe4dc5079d14672576f930 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 Nov 2026 18:14:02 +0000 Subject: [PATCH] chore(release): 0.6.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 42 +++++++++++++++++++++++++++++++++++ README.md | 2 +- package.json | 2 +- 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index f1c1e588..bcd05228 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.5.0" + ".": "0.6.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index f567b599..69641204 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,48 @@ ## [Unreleased] +## [0.6.0] - 2026-11-03 + +### Added + +- `wait --scope cursor-line` matches `--text`/`--regex` only on the cursor row, which eliminates the echo-match false positive on post-command waits. Also exposed as `scope` on `batch` wait steps and the `waitForRender` RPC ([#169](https://github.com/coder/agent-tty/pull/169)). +- `record diff ` replays two sessions offline and emits a unified-style or `--json` LCS line diff of the hashed screen, with `--at-seq-a`/`--at-seq-b` for self-diffs ([#170](https://github.com/coder/agent-tty/pull/170)). +- `screenshot --out ` writes the PNG to a chosen path (symlink-safe atomic rename), matching `record export --out`. Both commands now also create missing parent folders like `mkdir -p`, while still refusing any destination inside `/sessions/` ([#241](https://github.com/coder/agent-tty/pull/241), [#290](https://github.com/coder/agent-tty/pull/290)). +- `screenshot --json` returns `missingGlyphs` (code points drawn as `.notdef` boxes, with cell locations) and `missingGlyphsTruncated`. `record export --format webm --json` returns the same shape without cells. Noto Sans Symbols 2 and Noto Sans Math WOFF2 subsets are bundled as a trailing fallback so common symbols no longer render as boxes ([#240](https://github.com/coder/agent-tty/pull/240), [#278](https://github.com/coder/agent-tty/pull/278)). +- `mouse` CLI/RPC command and batch step for mode-aware native mouse input (press, release, move, drag, wheel, modifiers), encoded by `@coder/libghostty-vt-node`. New `mouse-input` capability and `CAPABILITY_UNAVAILABLE` error (exit 12) when the native backend is missing. Linux prebuild now works on CPUs without AVX-512 ([#179](https://github.com/coder/agent-tty/pull/179), [#293](https://github.com/coder/agent-tty/pull/293)). +- Session programs inherit `AGENT_TTY_ACTIVE=true` and `AGENT_TTY_SESSION_ID=` so scripts and prompts can detect the managed session ([#166](https://github.com/coder/agent-tty/pull/166)). +- Sessions now default `COLORTERM=truecolor` and reply to Neovim's `XTGETTCAP` (`Tc`, `RGB`, `setrgbf`, `setrgbb`) and decline `DECRQSS SGR`, so 24-bit color is picked up even under `env -i` ([#231](https://github.com/coder/agent-tty/pull/231), [#271](https://github.com/coder/agent-tty/pull/271)). + +### Changed + +- `wait --timeout` defaults to 30 s (was 600 s) and the default is shown in `--help`. Batch `wait` steps without `timeout` now use the same 30 s default. `--timeout 0` still waits forever ([#236](https://github.com/coder/agent-tty/pull/236), [#250](https://github.com/coder/agent-tty/pull/250)). +- A timed-out `wait` now returns `{"ok": false, "error": {"code": "WAIT_TIMEOUT", ...}, "result": {...}}`. `result.timedOut` and friends still read the same. Fail-fast `batch --json` also now prints an error envelope with the failing step's code, message and `details.stepIndex`. Exit codes are unchanged ([#232](https://github.com/coder/agent-tty/pull/232)). +- Human-mode `WAIT_TIMEOUT` message now names the timeout and tells users how to raise or disable it ([#273](https://github.com/coder/agent-tty/pull/273)). +- `wait` rejects windows that cannot finish inside the timeout at parse time (`INVALID_DURATION`, exit 2), including impossible `--screen-stable-ms` under the 30 s default. Batch wait steps get the same `INVALID_INPUT` check with `details.stepIndex` ([#277](https://github.com/coder/agent-tty/pull/277)). +- CLI now warns on stderr when the running Node is outside `engines.node` (`>=24.0.0 <27`), and `doctor` reports the real range instead of a hard-coded `24+` ([#245](https://github.com/coder/agent-tty/pull/245)). +- Per-user socket root: PTY sockets live under `/tmp/agent-tty-/` instead of the shared `/tmp/agent-tty/`. The old path is accepted as a fallback for one release so hosts started by the previous version keep answering. `inspect.host.rpcSocketPath` changes accordingly ([#288](https://github.com/coder/agent-tty/pull/288)). +- Playwright bumped to 1.64.1 so Chromium installs on Ubuntu 26.04 (`npx playwright install chromium` once after upgrading). WebM is now encoded with VP9 ([#192](https://github.com/coder/agent-tty/pull/192)). + +### Fixed + +- Capture an empty screen on a session that has printed nothing: `snapshot`, `screenshot` and render waits now succeed at `capturedAtSeq: -1` instead of `RPC_ERROR`, and offline paths return a proper JSON envelope ([#235](https://github.com/coder/agent-tty/pull/235)). `record export` matches: asciicast reports seq -1 (was 0) and WebM renders a blank video on an empty log instead of failing with `EXPORT_ERROR` ([#270](https://github.com/coder/agent-tty/pull/270)). +- `screenshot --hide-cursor` and the default (hidden) now actually hide the block cursor in the PNG. On main the cursor was baked into every screenshot ([#289](https://github.com/coder/agent-tty/pull/289)). +- WebM exports now play back at recorded time instead of flushing all output at the next non-output event ([#285](https://github.com/coder/agent-tty/pull/285)). +- Concurrent captures no longer drop entries from `artifacts/manifest.json`: a cross-process file lock serializes publishing, with a 10 s wait and stale-lock recovery ([#282](https://github.com/coder/agent-tty/pull/282)). +- Repeat `screenshot`/`snapshot` at the same seq no longer deletes an earlier capture's file on rollback. Captures with different bytes get a `-` suffix; identical bytes dedupe through `link` with a `copyFile` fallback for filesystems without hard links ([#191](https://github.com/coder/agent-tty/pull/191)). +- `--out` folders are re-checked and refuse non-searchable (`0200`) parents or ancestors swapped during the capture, closing a TOCTOU where a WebM export could land in `sessions/.../artifacts/` ([#279](https://github.com/coder/agent-tty/pull/279)). +- All unexpected errors now print exactly one JSON envelope with `--json`. Empty / `.` / `..` / path-like session IDs across every command return `INVALID_SESSION_ID` (exit 2) instead of an assertion stack. Commander usage errors emit an `INVALID_INPUT` envelope under `--json`. CLI now exits after `INTERNAL_ERROR` instead of hanging on open handles. `screenshot`/`record export` on a non-directory `artifacts/` now get typed `STORAGE_WRITE_ERROR`. `config.json` read/parse failures are typed ([#237](https://github.com/coder/agent-tty/pull/237), [#287](https://github.com/coder/agent-tty/pull/287)). +- Mouse input: input ordering for waited `run` matches PTY byte order in the event log; mouse keeps its own renderer manager so a `ghostty-web` snapshot no longer wipes same-cell motion dedup; and same-cell dedup now survives program output ([#234](https://github.com/coder/agent-tty/pull/234), [#293](https://github.com/coder/agent-tty/pull/293)). +- Session lifecycle: a large batch of fixes that close create/reconcile/gc/destroy races, prove the host and program group before every kill, keep `destroyed` sticky across a concurrent reconcile, stop fork-chain programs by freezing them before the kill, and route a `destroy` typed into the session's own shell through a detached re-run that also forwards SIGINT/SIGTERM to the copy ([#181](https://github.com/coder/agent-tty/pull/181), [#194](https://github.com/coder/agent-tty/pull/194), [#200](https://github.com/coder/agent-tty/pull/200), [#201](https://github.com/coder/agent-tty/pull/201), [#212](https://github.com/coder/agent-tty/pull/212), [#216](https://github.com/coder/agent-tty/pull/216), [#221](https://github.com/coder/agent-tty/pull/221), [#233](https://github.com/coder/agent-tty/pull/233), [#246](https://github.com/coder/agent-tty/pull/246), [#247](https://github.com/coder/agent-tty/pull/247), [#256](https://github.com/coder/agent-tty/pull/256), [#259](https://github.com/coder/agent-tty/pull/259), [#260](https://github.com/coder/agent-tty/pull/260), [#274](https://github.com/coder/agent-tty/pull/274), [#275](https://github.com/coder/agent-tty/pull/275), [#276](https://github.com/coder/agent-tty/pull/276), [#281](https://github.com/coder/agent-tty/pull/281), [#283](https://github.com/coder/agent-tty/pull/283)). +- `allocateSession` validates `--cwd`, `--shell` and command segments before creating `/sessions/`, so a failed `create` no longer leaks an empty, un-gc'able session folder ([#188](https://github.com/coder/agent-tty/pull/188)). +- The empty Home socket folder under `/tmp/agent-tty-*/` is removed after the last session exits; prevents accumulation on hosts with throwaway Homes. `doctor`'s socket probe cleans up after itself ([#239](https://github.com/coder/agent-tty/pull/239)). +- `create` in a new Home behind a symlink: both CLI and host now canonicalize the Home path the same way before it exists, so the first `create` succeeds and `home forget` can address a Home through its symlinked path ([#210](https://github.com/coder/agent-tty/pull/210)). +- Home Registry read drops only invalid entries instead of returning an empty list, so one bad entry in `homes.json` no longer causes a subsequent `create` to wipe out every other registered Home ([#186](https://github.com/coder/agent-tty/pull/186)). +- `doctor`'s session-less PTY probe no longer leaks the outer session's `AGENT_TTY_SESSION_ID`/`AGENT_TTY_ACTIVE` to the probed command ([#178](https://github.com/coder/agent-tty/pull/178)). +- `validate-bundle --profile canonical` rejects artifacts whose real path escapes the bundle root. Hero-demo `promote` leak-checks the whole bundle in memory before writing, so a leaking promotion no longer leaves files in `--bundle-dir` ([#187](https://github.com/coder/agent-tty/pull/187)). +- `evals/lib`: `cleanupEvalHome(os.tmpdir())` now throws instead of deleting the system temp folder, and schema/type parity checks fail typecheck on real drift ([#190](https://github.com/coder/agent-tty/pull/190)). +- Release pipeline: `communique.toml` raises `max_tokens` to 16384 so release notes submissions are not truncated for larger releases ([#295](https://github.com/coder/agent-tty/pull/295)). + ## [0.5.0] - 2026-06-23 ### Added diff --git a/README.md b/README.md index f54981b0..b3a6c5bd 100644 --- a/README.md +++ b/README.md @@ -139,7 +139,7 @@ See [`docs/AGENT-SKILLS.md`](./docs/AGENT-SKILLS.md). ## Status & platform support -`agent-tty` is `0.5.0` and focused on reliable, isolated, reviewable terminal and TUI automation through a stable CLI. +`agent-tty` is `0.6.0` and focused on reliable, isolated, reviewable terminal and TUI automation through a stable CLI. - Linux and macOS are tier-1; Windows is tier-2 and not CI-tested. - Semantic snapshots and render-backed waits prefer the optional `libghostty-vt` backend when it is available, then fall back to `ghostty-web`. diff --git a/package.json b/package.json index b8903200..ceae6049 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agent-tty", - "version": "0.5.0", + "version": "0.6.0", "description": "Terminal automation CLI for AI agents and humans", "license": "Apache-2.0", "keywords": [