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-05
Added
agent-tty mousecommand, batch step, andmouse-inputRPC capability: zero-based row/column clicks, drags, motion, wheel, and modifier state, encoded through@coder/libghostty-vt-node(now pinned at0.1.0-beta.7). Suppressed events still get a sequence number withreported: false; cells outside the grid failINVALID_INPUT; renderers without the native encoder failCAPABILITY_UNAVAILABLE(exit 12) (#179 by @pmarreck, with mode-freshness and log-order fixes).wait --scope cursor-line(also on batchwaitsteps and thewaitForRenderRPC): match--text/--regexonly against the row the cursor is on, so a post-command wait cannot be satisfied by the terminal's own echo.--regex 'READY> $' --scope cursor-linebecomes a precise prompt wait (#169).record diff <a> <b>command: offline, replayed line-diff of two sessions' canonical visible screens, with--at-seq-a/--at-seq-bfor intra-session diffs.--jsonreturns{ identical, a, b, diff }withequal|delete|addops; human mode prints a unified-style diff (#170, #300).screenshot --out <path>writes the PNG to a chosen path (parallel torecord export --out), with a shared--outresolver. Missing parent folders are created likemkdir -p, parents must be writable and searchable, and--outinside the Home'ssessions/is refused. The in-session capture and its manifest entry are still published, and are rolled back if the--outcopy fails (#241, #279, #290, #300).screenshot --jsonreportsmissingGlyphs(per-cell codepoints that Chromium drew as.notdefboxes) andmissingGlyphsTruncated;record export --format webm --jsonreportsmissingGlyphs(codepoint only) for glyphs drawn as boxes in any painted frame. The judge resolves which font face drew each probe by PostScript name, and the built-in font stack now bundlesNoto Sans Symbols 2andNoto Sans MathWOFF2 subsets (OFL-1.1) to cover 4,761 additional symbol codepoints, kept behindmonospaceso host color-emoji fonts still win (#240, #278).AGENT_TTY_ACTIVE=trueandAGENT_TTY_SESSION_ID=<id>for session detection and self-identification. Session-less PTYs (thedoctorprobe) strip any inherited values (#166 by @prmartinow, #178).COLORTERM=truecolor, and the host answersXTGETTCAPqueries forTc/RGB/setrgbf/setrgbband declinesDECRQSS SGRon the live PTY, so Neovim (including underenv -i) turnstermguicolorson and screenshots keep 24-bit highlights. Opt out with--env COLORTERM=<value>(#231, #271).snapshot,screenshot, and renderwaitnow return a valid blank result withcapturedAtSeq: -1on a session that has printed nothing (previously failed withRPC_ERROR).record export --format asciicast/webmalso accept an empty log at seq -1 (WebM produces a blank video) (#235, #270).snapshot --include-cellsnow streams host responses up to 64 MiB, covering realistic 500×200 styled grids; a larger success is refused withPROTOCOL_ERROR. The live snapshot RPC timeout is raised to 60 s when cells are requested (PR #320).[agent-tty] warn: Node X is not supported. agent-tty requires <engines.node>.when the running Node is outside the packageengines.noderange, anddoctornow enforces the same range instead of a hard-coded24+(#245).Changed
waitdefault--timeoutis now 30 s (was 600 s) and is shown in--help;--timeout 0keeps the "no limit" behavior. Batchwaitsteps default to the same 30 s (#236, #250).waitnow returnsok: falsewitherror.code: "WAIT_TIMEOUT"(exit 11) while still carrying theresult.timedOut: truefields for existing readers; fail-fastbatchunder--jsonprints a parallel error envelope with the failed step's code anddetails.stepIndex. Without--json, the message now names the timeout:Wait timed out after 30000 ms (the default; pass --timeout <ms>, or --timeout 0 to wait without a limit).(#232, #273, #301).waitrejects--idle-ms/--screen-stable-mswindows that cannot finish inside the effective timeout withINVALID_DURATION(exit 2) before contacting the host; batch wait steps get the same check withINVALID_INPUT+details.stepIndex(#277).--jsoncommand now prints exactly one envelope. Unexpected errors becomeINTERNAL_ERRORon stdout (stack goes to debug logs); empty/path-like session IDs becomeINVALID_SESSION_ID; Commander usage errors becomeINVALID_INPUTunder the command nameagent-tty;config.jsonread and parse failures are typed (STORAGE_READ_ERROR/INVALID_INPUT);helpexits 0. The CLI now exits as soon as stdio flushes afterINTERNAL_ERRORinstead of hanging on a leaked handle (#237, #287)./tmp/agent-tty-<uid>(mode0o700, owner-checked).inspect --json'shost.rpcSocketPathmoves accordingly; a one-release fallback keeps older hosts reachable. The empty per-Home socket directory is now removed after the last session and after a reconciled host crash (#239, #288).destroysent via Ctrl-C/SIGTERM to a copy that re-ran in a new session is now forwarded; the copy exits128+signal(130/143) (#285, #281).detailsover RPC (for exampledetails.path/details.errnoonsnapshot/screenshotwhen the artifacts path is a file or a symlink loop). Max RPC request-id length is capped (128 chars) and shortened error messages no longer split surrogate pairs (#313, #315, #319, #322).Fixed
create, kill a destroyed session's leftover without recording it, or leak an unreachable host. Highlights:createraces closed by writing the manifest with the host pid up front and serializingsession.jsonwrites (#181); idle/EPERM/in-session-destroy gaps closed with proper hang-up, group-waits, and a re-run-in-new-session for in-sessiondestroy(#216);destroytyped into a shell job off Linux now matched by controlling terminal (#246); a failedcreatenow stops its host and reportsdetails.sessionId(#247, #294); the host record is written at create time and only trusted after a start-up record (#260, #303);gcnow keeps a session whose program group still runs (frozen double-judge via SIGSTOP/SIGCONT, zombie chains handled) and only removes a session when it can prove the group gone or out-of-view (#302, #326, #312);destroy --forceends a session whose program group it cannot read (#327) or cannot see in/proc(#334); Windows late-host and marker-write races closed (#324); plus #178, #194, #201, #221, #233, #256, #259, #274, #275, #276, #283, #284, #291, #305, #330, #331, #333.screenshot/snapshotat the same seq publish vialink(orcopyFilewithCOPYFILE_EXCL) and never overwrite an earlier capture's file, falling back to<name>-<n>when bytes differ (#191).record exportkeeps a valid manifest entry when the written file's size still matches, preserving the entry under mtime changes from SMB/Windows servers (#316).writeManifestno longer resurrects agc-removed session folder (#200), artifact writes andgc'srmkeep a removed folder removed (#212), a Home resolves the same way behind a symlink before and after it exists (#210), and the APFSEINVALfrom writes into a folder being removed now maps toSESSION_NOT_FOUND(#318, #321). One invalid Home Registry entry no longer causes all other Homes to be lost on the nextcreate(#186).--show-cursorand--hide-cursornow produce different PNGs; the canvas is forced to redraw when the cursor toggles (#289). Same-cell mouse motion stays deduplicated after child-program output and across renderer swaps; mouse input now has its own renderer manager so aghostty-websnapshot no longer loses the libghostty-vt encoder state (#234, #293).RPC_ERROR) instead of reportingWAIT_TIMEOUT, soWAIT_TIMEOUTonly means the timeout actually elapsed; batch wait-step timeout messages now name the timeout (#301).--outrejects a0200(write but no search) parent folder before writing, re-checks the parent just before the rename, and uses a temp-file+rename for WebM so a symlinked--outpath is replaced (never written through) (#279). A failedscreenshot --outcopy now rolls back the in-session capture and its manifest entry (#300).inspect/snapshot/screenshotartifact-path check now reports a non-folder withSTORAGE_WRITE_ERRORinstead of a renderer invariant (#287); internal errors carry usefulcauseanddetails.errno(#301); the host stays running when an RPC error response cannot be built (#315); waited-run input is logged in PTY order (#234).Breaking Changes
waitwithout--timeoutnow stops at 30 s (was 600 s);--idle-ms/--screen-stable-mswindows that cannot fit in the effective timeout are rejected up front withINVALID_DURATION(#236, #277). Batchwaitsteps default to the same 30 s (#250).wait, and a fail-fastbatchwith a failed step, now emitok: falsewitherror.codeset (exit code unchanged). Automation that branches on.okwill need to read.result.timedOut/.result.stepsundererroras well (#232)./tmp/agent-tty/<hash>/<id>to/tmp/agent-tty-<uid>/<hash>/<id>. A fallback still reaches older 0.5.0 hosts for one minor release; a CLI running under a different uid (for examplesudo agent-tty) can no longer reach a host started by your own uid (#288).capturedAtSeqcan now be-1for captures on a silent session; render-wait--after-seqaccepts-1. Readers that requirecapturedAtSeq >= 0need to accept-1(#235, #270).@coder/libghostty-vt-nodeis pinned to0.1.0-beta.7(needs AVX2 onlinux-x64; no longer requires AVX-512). Native snapshots inherit Ghostty 1.4.0 upstream behavior (#179, #293).Full Changelog: v0.5.0...main
Maintained by the release-please workflow. Notes are regenerated by Communique on every push to main, so manual edits to this PR are overwritten.