Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.5.0"
".": "0.6.0"
}
42 changes: 42 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,48 @@

## [Unreleased]

## [0.6.0] - 2026-11-04

### Added

- Mode-aware native mouse input: new `mouse` CLI/RPC command and batch step encode clicks, drags, and wheel events through the libghostty-vt backend, with `input_mouse` event-log entries and a new `CAPABILITY_UNAVAILABLE` error (exit 12) when the native encoder is missing. Bumps `@coder/libghostty-vt-node` to `0.1.0-beta.5` ([#179](https://github.com/coder/agent-tty/pull/179) by @pmarreck).
- `wait --scope cursor-line` matches `--text`/`--regex` against only the cursor row, so prompt waits like `--regex 'READY> $'` no longer false-positive on the echoed command line ([#169](https://github.com/coder/agent-tty/pull/169)).
- `record diff <sid-a> <sid-b>` prints a unified-style or JSON diff of two sessions' visible screens, replayed offline, with `--at-seq-a`/`--at-seq-b` for intra-session diffs ([#170](https://github.com/coder/agent-tty/pull/170)).
- `screenshot --out <path>` writes the PNG to a chosen path while still publishing it in the session manifest ([#241](https://github.com/coder/agent-tty/pull/241)). `screenshot --out` and `record export --out` now create missing parent directories (never inside session storage) ([#290](https://github.com/coder/agent-tty/pull/290)).
- `screenshot --json` reports glyphs drawn as `.notdef` boxes in a new `missingGlyphs` array with cells, and `missingGlyphsTruncated` when the check is cut off ([#240](https://github.com/coder/agent-tty/pull/240)). `record export --format webm` gets the same field, the check now judges per face so one family can cover a cluster across faces, and the built-in font stack bundles Noto Sans Symbols 2 and Noto Sans Math subsets ([#278](https://github.com/coder/agent-tty/pull/278)).
- Spawned PTYs get `AGENT_TTY_ACTIVE=true` and `AGENT_TTY_SESSION_ID=<uuid>` so scripts can detect the managed session ([#166](https://github.com/coder/agent-tty/pull/166)).
- The PTY answers XTGETTCAP (`Tc`, `RGB`, `setrgbf`/`setrgbb`) and declines DECRQSS SGR, so `env -i nvim` and `--env COLORTERM=` turn on `termguicolors` ([#271](https://github.com/coder/agent-tty/pull/271)).

### Changed

- `COLORTERM=truecolor` is now set by default for every session program; inherited `COLORTERM` from the outer shell no longer leaks through. Opt out with `--env COLORTERM=` ([#231](https://github.com/coder/agent-tty/pull/231)).
- Standalone `wait` now defaults to a 30 s timeout (was 600 s) and prints it in `--help`; `--timeout 0` keeps the "wait forever" behavior ([#236](https://github.com/coder/agent-tty/pull/236)). Batch `wait` steps default to the same 30 s ([#250](https://github.com/coder/agent-tty/pull/250)).
- A timed-out `wait` now returns `ok: false` with `error.code: WAIT_TIMEOUT` while keeping the existing `.result.timedOut` field; fail-fast `batch --json` now prints an error envelope on step failure ([#232](https://github.com/coder/agent-tty/pull/232)). Human-mode timeouts name the effective timeout and the default-opt-out hint ([#273](https://github.com/coder/agent-tty/pull/273)). Batch step messages name the timeout too ([#301](https://github.com/coder/agent-tty/pull/301)).
- `wait` now rejects windows that cannot complete inside the timeout (`--idle-ms`/`--screen-stable-ms` ≥ timeout) up front with `INVALID_DURATION` ([#277](https://github.com/coder/agent-tty/pull/277)).
- Session RPC sockets moved under a per-uid root (`/tmp/agent-tty-<uid>`) with a one-release fallback to the old path; `gc` and `destroy` clean up sockets left by a dead host ([#288](https://github.com/coder/agent-tty/pull/288), [#239](https://github.com/coder/agent-tty/pull/239), [#142f779](https://github.com/coder/agent-tty/commit/142f779)).
- RPC response buffer raised to 64 MiB so `snapshot --include-cells` works on large live screens; a larger success now returns `PROTOCOL_ERROR` instead of a retryable `RPC_ERROR` ([#320](https://github.com/coder/agent-tty/pull/320), [#322](https://github.com/coder/agent-tty/pull/322)). Live `snapshot --include-cells` gets a 60 s RPC timeout.
- `CliError.details` now travel over the host RPC, so live `snapshot`/`screenshot` errors carry the same `details.path`/`details.errno` as offline ones ([#313](https://github.com/coder/agent-tty/pull/313)).
- An unsupported Node version prints a startup warning citing `engines.node` (`>=24 <27`), and `doctor` checks the real range ([#245](https://github.com/coder/agent-tty/pull/245)).

### Fixed

- Unexpected errors and invalid session IDs now produce one `INTERNAL_ERROR` or `INVALID_SESSION_ID` JSON envelope instead of a Node stack trace, and the CLI exits promptly after `INTERNAL_ERROR` instead of hanging on open handles ([#237](https://github.com/coder/agent-tty/pull/237), [#287](https://github.com/coder/agent-tty/pull/287)).
- `snapshot`, `screenshot`, and render waits now handle a session that has printed nothing: they return an empty screen or blank PNG with `capturedAtSeq: -1` instead of exiting 9 `RPC_ERROR` ([#235](https://github.com/coder/agent-tty/pull/235)). `record export --format asciicast`/`webm` match: empty logs produce header-only or blank output at seq -1 ([#270](https://github.com/coder/agent-tty/pull/270)).
- `screenshot --show-cursor`/`--hide-cursor` now actually toggle the cursor in the PNG; previously every screenshot drew the block cursor ([#289](https://github.com/coder/agent-tty/pull/289)).
- WebM exports show output at its recorded time; a program printing 15 lines 200 ms apart used to flush all at once at the next non-output event ([#285](https://github.com/coder/agent-tty/pull/285)).
- Concurrent `screenshot`, `snapshot`, and `record export` captures no longer drop entries from `artifacts/manifest.json`: a file lock serialises appends across processes ([#282](https://github.com/coder/agent-tty/pull/282)). A second export at the same `--out` replaces the earlier manifest entry rather than leaving two ([#300](https://github.com/coder/agent-tty/pull/300)). A failed `screenshot --out` copy rolls back the in-session capture ([#300](https://github.com/coder/agent-tty/pull/300)). Repeat screenshot/snapshot captures preserve earlier files when a later append fails ([#191](https://github.com/coder/agent-tty/pull/191)).
- `--out` paths are re-checked just before the rename and reject parents you can write to but not search; folder swaps during the write fail with `EXPORT_ERROR` instead of writing into the swapped folder ([#279](https://github.com/coder/agent-tty/pull/279)). WebM size and SHA-256 are read from the temp file so a third-party write between rename and manifest can't poison the result ([#321](https://github.com/coder/agent-tty/pull/321)).
- Render waits now surface renderer errors (e.g. repeated Chromium launch failures) as `RPC_ERROR` instead of masquerading as `WAIT_TIMEOUT` ([#301](https://github.com/coder/agent-tty/pull/301)).
- Large host responses are parsed in linear time by searching only new chunks for the newline, and request IDs are capped at 128 characters; shortened error messages no longer end with half of a surrogate pair ([#319](https://github.com/coder/agent-tty/pull/319), [#320](https://github.com/coder/agent-tty/pull/320)).
- Session lifecycle races closed between `create`, `reconcile`, `destroy`, and `gc`: the host is launched first and the manifest always names it; a failed `create` stops its host and attaches `details.sessionId` to the error envelope; `destroy --force` ends sessions whose program group cannot be read; `gc` keeps a session whose program group still runs instead of orphaning the leftover; and the TLA+ lifecycle model now runs in CI ([#181](https://github.com/coder/agent-tty/pull/181), [#247](https://github.com/coder/agent-tty/pull/247), [#294](https://github.com/coder/agent-tty/pull/294), [#324](https://github.com/coder/agent-tty/pull/324), [#327](https://github.com/coder/agent-tty/pull/327), [#302](https://github.com/coder/agent-tty/pull/302)).
- `destroy` typed into the session's own shell re-runs in a new session and now forwards SIGINT/SIGTERM to the detached copy, exiting 130/143 as `batch` does ([#281](https://github.com/coder/agent-tty/pull/281)).
- The session-less `doctor` PTY probe no longer inherits `AGENT_TTY_ACTIVE`/`AGENT_TTY_SESSION_ID` from an outer session ([#178](https://github.com/coder/agent-tty/pull/178)).
- Waited `run` input is logged in PTY byte order, and native mouse dedup state survives renderer swaps by using a dedicated renderer manager for mouse input ([#234](https://github.com/coder/agent-tty/pull/234)). Same-cell motion stays deduplicated after program output ([#293](https://github.com/coder/agent-tty/pull/293)).

### Internal

- `release-please` now raises Communique's `max_tokens` to 16384 so release notes stop being cut off on releases of this size ([#295](https://github.com/coder/agent-tty/pull/295)).

## [0.5.0] - 2026-06-23

### Added
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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. <!-- x-release-please-version -->
`agent-tty` is `0.6.0` and focused on reliable, isolated, reviewable terminal and TUI automation through a stable CLI. <!-- x-release-please-version -->

- 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`.
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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": [
Expand Down