Repository navigation
chore(release): 0.6.0 - #172
Open
github-actions[bot] wants to merge 1 commit into
Open
github-actions[bot] wants to merge 1 commit into
github-actions[bot] wants to merge 1 commit into
Conversation
github-actions
Bot
force-pushed
the
release-please--branches--main
branch
2 times, most recently
from
August 21, 2026 16:02
b99a3f3 to
8803e75
Compare
github-actions
Bot
force-pushed
the
release-please--branches--main
branch
3 times, most recently
from
September 24, 2026 12:15
4877580 to
37f9725
Compare
github-actions
Bot
force-pushed
the
release-please--branches--main
branch
22 times, most recently
from
November 2, 2026 12:23
4dbc4df to
7eea1fa
Compare
github-actions
Bot
force-pushed
the
release-please--branches--main
branch
16 times, most recently
from
November 3, 2026 14:20
28c404b to
7094df2
Compare
github-actions
Bot
force-pushed
the
release-please--branches--main
branch
11 times, most recently
from
November 4, 2026 00:22
e234723 to
123d426
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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-09
Added
record diff <session-a> <session-b>replays two sessions offline and reports an LCS line diff between their canonical visible screens, with--at-seq-a/--at-seq-bfor self-diffs against earlier state (#170).record export --format svg [--animate]writes a deterministic, byte-stable SVG (SMIL-animated or still) with no browser or ffmpeg; bundles JetBrains Mono and symbol-font subsets (#171, #349).screenshot --out <path>writes the PNG to an explicit path (relative or absolute), with a shared--outresolver that also refuses paths inside session storage (#241).screenshot --outandrecord export --outnow create missing parent folders likemkdir -p, except insidesessions/(#290).mouseCLI/RPC command and batch step: mode-aware native mouse input (clicks, drags, wheel) through the libghostty-vt backend, logged asinput_mouseevents; introduces theCAPABILITY_UNAVAILABLEerror (exit 12) (#179).wait --scope cursor-linematches--text/--regexagainst the cursor row only, avoiding echo-of-command false positives; also available on batchwaitsteps (#169).screenshot --jsonreports glyphs drawn as.notdefboxes inmissingGlyphswith their cells, plusmissingGlyphsTruncated;record export --format webmreports the same per-code-point list (#240, #278).AGENT_TTY_ACTIVE=trueandAGENT_TTY_SESSION_ID=<uuid>in their environment (#166).COLORTERM=truecolor, and the PTY query responder answers XTGETTCAPTc/RGB/setrgbf/setrgbband declines DECRQSS SGR, so programs like Neovim enable 24-bit color underenv -ior--env COLORTERM=(#231, #271).inspect --jsonreportseventLogStop(reason,seq) when the host has stopped appending at a limit;WAIT_TIMEOUTand offlineREPLAY_ERRORmessages/details name the stop (#340, #357).Changed
pnpm install/mise run bootstrapand Dependabot can now updatepnpm-lock.yaml(#176).waitdefault timeout is now 30 s (was 600 s);wait --helpshows the default. Windows that cannot finish inside the timeout (--idle-ms,--screen-stable-ms) are rejected up front withINVALID_DURATION. Batchwaitsteps share the same default and the same window rule (#236, #250, #277).waitnow returns an error envelope withok: false,error.code: "WAIT_TIMEOUT"(exit 11 unchanged), while preservingresult.timedOut/matched. Fail-fastbatchfailures emit the matching error envelope with step details (#232, #273, #301).waitthat fails every poll now stops with the renderer's error (for exampleREPLAY_ERROR) instead of reportingWAIT_TIMEOUT(#301).INTERNAL_ERRORJSON envelope on stdout under--json, and the CLI exits promptly after it instead of hanging on open handles. Empty/invalid session IDs returnINVALID_SESSION_ID(exit 2) on every command. Commander usage errors emit anINVALID_INPUTenvelope under--json(#237, #287).detailsacross RPC (e.g.details.path,details.errno), matching offline errors (#313).engines.node(>=24.0.0 <27) at startup with a one-line stderr warning;doctorfails on versions outside that range (#245).snapshot --include-cellsnow accepts RPC responses up to 64 MiB (previously capped at 1 MiB); larger successes returnPROTOCOL_ERRORwith the size (#320).config.jsonerrors are typed: unreadable →STORAGE_READ_ERROR, invalid JSON/schema →INVALID_INPUT.liston an unreadable sessions dir returnsSTORAGE_READ_ERROR.helpexits 0 (#287).screenshot/record exportwith a non-folder or dangling symlink atartifacts/now giveSTORAGE_WRITE_ERROR(exit 8) with a clear message (#287, #301).record export --format webmon a session that printed nothing exits 0 with a blank video atcapturedAtSeq: -1; asciicast reports-1instead of0(#270).destroytyped into the session's own shell now forwards SIGINT/SIGTERM to its detached re-run copy and exits 130/143 to match (#281).destroy --forcerecords a session asdestroyedwhen the program-group read fails twice with EACCES/EPERM/EIO/EISDIR/ENOTDIR/ELOOP/ENAMETOOLONG, or when it cannot read the program group at all (#327, #331, #334).Fixed
snapshot/screenshoton a session that has printed nothing now return an empty screen or blank PNG atcapturedAtSeq: -1instead of failing withRPC_ERROR(#235).screenshot --hide-cursoractually hides the block cursor in the PNG (was previously byte-identical to--show-cursor) (#289).max-speedWebM respects recorded time and holds one video frame before resizes (#358, #364).screenshot/snapshot --renderer ghostty-webon long logs no longer time out at 5 s: the host streams keep-alives and replays the backlog in bounded slices, so clients wait as long as replay progresses (#359).ghostty-webpage crash during replay is now reported asREPLAY_ERROR(exit 10,retryable: false) on live and offline paths with a message that names the known cause, instead ofRPC_ERROR/INTERNAL_ERRORwith retries that can never succeed (#363).createunder heavy host load now waits for the detached host as long as it is alive (up to 30 s on a monotonic clock) and treats first-probeEPIPEas "not ready yet", instead of failing withHOST_UNREACHABLEafter a fixed 50-poll budget (#362).createthat gives up on its host now instructs that host to stop the session, so no orphanrunningsession is left behind (#247).artifacts/manifest.json: appends run under a cross-process lock with stale-owner recovery (#282).create/reconcile/gc/destroy: hosts record pids up front,writeManifestno longer resurrects removed session folders,gckeeps exited sessions whose program group still runs (sodestroycan end them), anddestroy --forceprovably covers unshared/hidden-proc cases (#181, #194, #200, #201, #216, #221, #302, #312).ptyno longer leaks an outer session id into session-less PTYs (#178).runinput is now logged in PTY order, and mouse motion dedup state is preserved across renderer swaps (#234).host.jsonrefuses to grow a hostname-mismatched stub (#239, #288, #305).idcapped at 128 chars; response cap raised to 64 MiB withPROTOCOL_ERRORabove; truncated error messages no longer split surrogate pairs; older-host oversize responses are reported asPROTOCOL_ERROR(#315, #319, #320, #322).createvalidatescwdand shell before creating the session directory (#188).--outwrites retry against a swapped output folder and refuse unsearchable parents, and a failedscreenshot --outundoes its in-session capture (#279, #300).--animatesurfaces a clearEXPORT_ERRORnaming the first bad event (#349).Breaking Changes
waitdefault timeout dropped from 600 s to 30 s (#236). Scripts that relied on waiting longer than 30 s must pass--timeoutexplicitly (or--timeout 0to wait without a limit). Batchwaitsteps share the new default (#250).waitreturnsok: falsewitherror.code: "WAIT_TIMEOUT"; consumers checking.ok === trueon a timeout will now seefalse..result.timedOut/matchedstill carry the old fields. Fail-fastbatchfailures also now emitok: false(#232).waiton persistent renderer failure now exits 9RPC_ERROR(or the renderer's ownCliErrorcode such asREPLAY_ERROR), not exit 11WAIT_TIMEOUT(#301).COLORTERMfrom the shell that runsagent-tty createno longer reaches the session; sessions seeCOLORTERM=truecolorunless overridden with--env COLORTERM=<value>(#231).INVALID_SESSION_IDinstead of exit 1 with a stack trace (#237).RPC_ERROR"RPC result failed validation" for new optional fields such aseventLogStop,mouse-inputcapability, ordetailson live errors; newer CLI against older hosts works fine (#179, #313, #357).record export --format asciicaston an empty log names its filerecording--1-asciicast.cast(wasrecording-0-asciicast.cast);capturedAtSeqcan now be-1in result schemas (#235, #270).screenshot/record export --outpaths that resolve insidesessions/are rejected with exit 7EXPORT_ERROR(previously accepted forrecord export) (#241).Maintained by the release-please workflow. Notes are regenerated by Communique on every push to main, so manual edits to this PR are overwritten.