diff --git a/CHANGELOG.md b/CHANGELOG.md index e1d2a9b..d26a1e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - `release:prep` and `release:finalize` npm scripts plus pinned `release-it` config for an opinionated release-prep workflow that updates package version files, creates a single `release/` commit, and tags `v${version}` from a clean, synced `main` without ever publishing or creating GitHub Releases ([#72](https://github.com/coder/agent-tty/pull/72)). - "Agent Demo" section in the README and an evergreen `dogfood/agent-uses-agent-tty/` bundle that records Codex and Claude TUIs driving `nvim --clean` through `agent-tty`, with outer/inner WebMs, asciicasts, transcripts, thumbnails, and a `reproduce.sh` script ([#54](https://github.com/coder/agent-tty/pull/54)). - `dogfood/issue-21-run-completion-clean/` verification bundle proving snapshots, screenshots, asciicasts, WebM, and the `output` event stream contain no completion-marker bytes while the public `run` envelope still exposes `marker`, `completed`, and `durationMs` ([#55](https://github.com/coder/agent-tty/pull/55)). +- AFK Triage maintainer flow under `.sandcastle/` that fans out Claude Code triage agents across `needs-triage` / active `needs-info` GitHub issues, each in its own per-issue Coder workspace on `dev.coder.com` with a real `coder/agent-tty` checkout, governed by `docs/adr/0004-afk-triage-apply-policy.md` and the AFK comment marker policy ([#86](https://github.com/coder/agent-tty/pull/86), [#89](https://github.com/coder/agent-tty/pull/89)). ### Changed @@ -15,14 +16,19 @@ - Asciicast export now explicitly skips non-rendered events (`input_text`, `input_paste`, `input_keys`, `input_run`, `run_complete`, `signal`, `exit`) so recordings only contain `o`, `r`, and `m` frames ([#55](https://github.com/coder/agent-tty/pull/55)). - `wait --text` / `--regex` / `--screen-stable-ms` / `--cursor-row` / `--cursor-col` validation is centralized in a shared render-wait matcher used by both live host polling and CLI offline replay fallback. Invalid, unsafe (nested-quantifier), or out-of-range patterns are rejected locally with `INVALID_INPUT` before any RPC or offline replay snapshot work. Public `wait` JSON shapes and human output are unchanged ([#76](https://github.com/coder/agent-tty/pull/76)). - Renderer dispose now uses a per-lifecycle `ResourceScope` for deterministic LIFO release of page, browser context, browser, and local server. Public `dispose()` remains best-effort and resolves successfully; individual cleanup failures are now surfaced through the logger as `warn` entries with `{ name, error }` instead of being silently swallowed. Concurrent artifact-manifest appends route through a generic `KeyedSerializer` while preserving existing serialization semantics ([#83](https://github.com/coder/agent-tty/pull/83)). -- Local and CI dependency bootstrap now uses [`aube`](https://github.com/endevco/aube): `mise run bootstrap` runs `aube exec playwright install chromium` and `mise run bootstrap-ci` runs `aube ci`. The `mise`-pinned `aube` was bumped to `1.10.4` (with a migration from `pnpm`/`npm` lockfiles to `aube-lock.yaml`), and `pnpm.allowBuilds` permits native builds for `@coder/libghostty-vt-node`, `esbuild`, `fsevents`, `node-pty`, `@parcel/watcher`, and `msgpackr-extract` ([#51](https://github.com/coder/agent-tty/pull/51), [#57](https://github.com/coder/agent-tty/pull/57), [#73](https://github.com/coder/agent-tty/pull/73), [#91](https://github.com/coder/agent-tty/pull/91)). +- Local and CI dependency bootstrap now uses [`aube`](https://github.com/endevco/aube): `mise run bootstrap` runs `aube exec playwright install chromium` and `mise run bootstrap-ci` runs `aube ci`. The `mise`-pinned `aube` was bumped to `1.10.4` (migrating from `pnpm` / `npm` lockfiles to `aube-lock.yaml`), and `pnpm.allowBuilds` permits native builds for `@coder/libghostty-vt-node`, `esbuild`, `fsevents`, `node-pty`, `@parcel/watcher`, and `msgpackr-extract` ([#51](https://github.com/coder/agent-tty/pull/51), [#57](https://github.com/coder/agent-tty/pull/57), [#73](https://github.com/coder/agent-tty/pull/73), [#91](https://github.com/coder/agent-tty/pull/91)). - Internal session-status policy, event-log codec, snapshot capture, screenshot capture, command-target resolution, and waited-run completion bookkeeping are centralized into shared modules. No CLI, protocol, JSON envelope, manifest entry, or `rendererBackend` reporting changes ([#67](https://github.com/coder/agent-tty/pull/67), [#68](https://github.com/coder/agent-tty/pull/68), [#69](https://github.com/coder/agent-tty/pull/69), [#70](https://github.com/coder/agent-tty/pull/70), [#75](https://github.com/coder/agent-tty/pull/75), [#78](https://github.com/coder/agent-tty/pull/78)). -- Repository tooling switched from ESLint/Prettier to Oxc: `npm run format` / `format:check` now invoke `oxfmt`, and `npm run lint` / `lint:fix` invoke `oxlint` plus `oxlint-tsgolint` for type-aware checks. CI and `mise` task names are unchanged ([#71](https://github.com/coder/agent-tty/pull/71)). +- Repository tooling switched from ESLint / Prettier to Oxc: `npm run format` / `format:check` now invoke `oxfmt`, and `npm run lint` / `lint:fix` invoke `oxlint` plus `oxlint-tsgolint` for type-aware checks. CI and `mise` task names are unchanged ([#71](https://github.com/coder/agent-tty/pull/71)). ### Fixed +- Default-location screenshot PNGs, snapshot JSON files, and `record export` artifacts are now rolled back when the subsequent artifact-manifest append fails, so a manifest-validation failure no longer leaves an orphaned, unmanifested file under the session's `artifacts/` directory. Explicit `--out` paths supplied by the caller are preserved on failure because they belong to the user, not the session manifest ([#95](https://github.com/coder/agent-tty/pull/95), fixes [#79](https://github.com/coder/agent-tty/issues/79)). - `EventLog.open` now closes the underlying file handle when validation (size-limit check or existing-content parsing) fails, preventing a file-descriptor leak on rejected session host startup ([#51](https://github.com/coder/agent-tty/pull/51)). +### Notes + +- The `engines.node` range remains `>=24.0.0 <26`. An attempted bump to Node 26 was reverted in [#91](https://github.com/coder/agent-tty/pull/91) because `playwright install chromium` hangs on Node 26 during zip extraction ([microsoft/playwright#40724](https://github.com/microsoft/playwright/issues/40724)); the upstream fix is merged but not yet released. + ## [v0.1.1-beta.4](https://github.com/coder/agent-tty/releases/tag/v0.1.1-beta.4) - 2026-04-25 ### Added