Skip to content

chore(release): 0.6.0 - #172

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main
Open

github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 21, 2026 •

Copy link
Copy Markdown
Contributor

The next agent-tty release. Merging this PR creates the release tag and GitHub Release and starts the publish pipeline.

[0.6.0] - 2026-11-03

Added

  • Native mouse input: new mouse CLI, batch step, and RPC accept zero-based row/column, modifiers, held-button state, wheel presses, and optional pixel cell sizes; bytes are encoded in the child's negotiated tracking mode and recorded in input_mouse events. New mouse-input capability and CAPABILITY_UNAVAILABLE error (exit 12). Requires @coder/libghostty-vt-node >=0.1.0-beta.5 (#179).
  • wait --scope cursor-line (and scope on batch wait steps / waitForRender RPC) matches --text/--regex only against the cursor's row, so a wait after run can no longer be satisfied by the echoed command line (#169).
  • record diff <session-a> <session-b> replays both sessions offline through events.jsonl and emits a line-level screen diff. --at-seq-a / --at-seq-b allow diffing a session against its own earlier state. --json returns { identical, a, b, diff } validated against the new RecordDiffResultSchema (#170).
  • screenshot --out <path> writes the PNG to a chosen path (relative paths resolve against the working directory). The in-session artifact is still published; --out inside the Home's sessions/ folder is now rejected with EXPORT_ERROR for both screenshot --out and record export --out (#241).
  • screenshot --json now lists glyphs the renderer drew as .notdef boxes in result.missingGlyphs (with cells and an optional missingGlyphsTruncated), so harnesses can tell "boxes in the PNG" apart from an incomplete screen (#240).
  • Sessions see AGENT_TTY_ACTIVE=true and AGENT_TTY_SESSION_ID=<sessionId> in their environment (#166).
  • Sessions default to COLORTERM=truecolor, overridable with create --env COLORTERM=<value> (#231). The PTY query responder now answers XTGETTCAP for Tc, RGB, setrgbf, setrgbb and declines DECRQSS SGR, so Neovim turns on termguicolors even under env -i (#271).
  • snapshot, screenshot, and render wait now succeed on a session that has printed nothing. The empty screen reports capturedAtSeq: -1, and wait --after-seq -1 is accepted (#235). record export on an empty log also exports at seq -1 (header-only asciicast or blank WebM) instead of failing (#270).

Changed

  • Standalone wait now defaults --timeout to 30 s (down from 600 s) and shows the default in --help; --timeout 0 still waits forever. An --idle-ms/--screen-stable-ms of 30000 or more without --timeout is rejected up front with INVALID_DURATION (exit 2) (#236). Batch wait steps follow the same 30 s default and up-front rejection (#250).
  • A timed-out wait now emits an error envelope with error.code: "WAIT_TIMEOUT" and ok: false (exit code remains 11); the existing result.timedOut / result.matched fields are kept next to error. Fail-fast batch failures gain the same envelope with error.details.stepIndex (#232).
  • Unexpected errors and Commander usage errors now print a single INTERNAL_ERROR or INVALID_INPUT JSON envelope under --json instead of a raw Node stack. Every session-id-taking command rejects empty / . / .. / path-like IDs with INVALID_SESSION_ID (exit 2) (#237).
  • doctor and the CLI startup now check the running Node against package.json's engines.node (>=24.0.0 <27). An unsupported Node logs one warning on stderr but still runs; doctor reports the full range (#245).
  • Bumped @coder/libghostty-vt-node to 0.1.0-beta.5 (first linux-x64 prebuild that runs on CPUs without AVX-512; still requires AVX2) (#179).

Fixed

  • destroy now stops the program's full process group with SIGHUP then SIGKILL on Linux, so programs that ignore SIGHUP and their background children are reaped (#201). Each group kill is gated on a start-up record (program.json) that proves the group is the session's, closing stale-pid-reuse windows (#221, 5aed887). Idle time-out, EPERM group kills (process of another user), and destroy typed from inside the session's own shell now behave correctly (#216); off-Linux the in-session check uses the controlling terminal through /bin/ps (#246); unreadable /proc/self/stat, session id 0 in a PID namespace, and in-session shell with AGENT_TTY_SESSION_ID unset no longer kill the destroy mid-run (#233, #259).
  • destroy --force and reconcile now identify the host from a new host.json (pid, boot id, start time, pid namespace, machine id, time namespace). A zombie host under a non-reaping init reads failed and can be destroyed; a reused host pid is never signaled; a CLI in another time namespace, PID namespace, or on another machine sharing the Home reads the host as unknown instead of killing an unrelated process or stopping a live session (#260, #275).
  • A reconcile that races a destroy --force can no longer overwrite destroyed with failed: destroy now drops a <session>/destroyed marker and reconcile repairs its own write (#256).
  • create that gives up on an unreachable host now sends the host SIGTERM so no orphan session keeps running after HOST_UNREACHABLE/HOST_TIMEOUT (#247).
  • create, reconcile, and gc no longer race each other: the host pid is in the first manifest, manifest writes are serialized through one writer, reconcile re-reads the manifest before marking failed, and allocateSession validates cwd, shell, and command before creating any folder (#181, #188). Every successful destroy now records destroyed (previously --force could leave a session failed), and the serial manifest writer refuses writes after a terminal record (#194).
  • writeManifest no longer recreates a session folder that gc removed; the artifact commands and gc's own rm now keep a removed folder removed and return SESSION_NOT_FOUND where appropriate (#200, #212).
  • Repeat screenshot or snapshot captures at the same seq no longer delete earlier artifact files if the manifest append fails; identical bytes dedupe, different bytes take <name>-<n>, and symlinks/FIFOs at the target are refused (#191).
  • The per-session socket directory under /tmp/agent-tty/<hash> is now removed when it holds no socket (destroy, host shutdown, reconcile after host crash, and doctor), ending the "one empty folder per throwaway Home" leak (#239).
  • Home registry: one invalid entry in homes.json no longer wipes the rest on the next create (#186). A Home behind a symlink resolves to the same canonical path before and after it exists, so the first create in a new symlinked Home succeeds and home forget finds it (#210).
  • Waited run input is now logged in true PTY order (reserving the seq synchronously with the write), and native mouse input keeps its same-cell dedup state across renderer swaps (#234).
  • PTYs spawned without a session (e.g. the doctor probe) no longer inherit AGENT_TTY_ACTIVE or AGENT_TTY_SESSION_ID from an outer agent-tty session (#178).
  • Hero demo promotion now sanitizes and leak-checks the bundle in memory before writing; validate-bundle --profile canonical rejects artifacts whose real path escapes the bundle root (#187).
  • cleanupEvalHome(os.tmpdir()) now throws instead of deleting the system temp folder; eval _*SchemaParity aliases now actually fail typecheck on drift, and BundleValidationProfileSchema gains the canonical profile (#190).

Maintained by the release-please workflow. Notes are regenerated by Communique on every push to main, so manual edits to this PR are overwritten.

@github-actions github-actions Bot changed the title chore(release): 0.5.1 chore(release): 0.6.0 Aug 21, 2026
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 2 times, most recently from b99a3f3 to 8803e75 Compare August 21, 2026 16:02
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 3 times, most recently from 4877580 to 37f9725 Compare September 24, 2026 12:15
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 22 times, most recently from 4dbc4df to 7eea1fa Compare November 2, 2026 12:23
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 20 times, most recently from 0fc6662 to a3dee26 Compare November 3, 2026 08:42
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch from a3dee26 to e6c5d07 Compare November 3, 2026 09:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants