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
mousecommand and batch step for mode-aware native mouse input (clicks, drags, wheel), encoded in the child program's negotiated tracking mode. Requires thelibghostty-vtrenderer with the optional@coder/libghostty-vt-nodenative package; a newmouse-inputcapability andCAPABILITY_UNAVAILABLEerror (exit12) is returned otherwise (#179 by @pmarreck, #234, #293).wait --scope cursor-linematches--text/--regexagainst only the cursor's row, avoiding false positives from a terminal echoing the command that was just typed. Available asscopeon batchwaitsteps and thewaitForRenderRPC (#169).record diff <session-id-a> <session-id-b>: a new offline command that replays two sessions from their event logs and emits an LCS line diff (--at-seq-a/--at-seq-bsupported, including-1for an empty log), as JSON ({ identical, a, b, diff }) or a unified-style human diff (#170, #300).screenshot --out <path>writes the PNG to a chosen location while still publishing the in-session capture. Shares a hardened resolver withrecord export --outthat creates missing parent folders (likemkdir -p) and refuses paths under session storage (#241, #279, #290).screenshot --jsonnow reportsmissingGlyphsandmissingGlyphsTruncated: glyphs drawn as.notdefboxes, with the cells where they appear.record export --format webmreportsmissingGlyphs(code-point only) for glyphs that any painted frame drew as a box. The bundled font stack now also ends with Noto Sans Symbols 2 and Noto Sans Math (OFL-1.1 subsets without Emoji code points) to cover more symbols out of the box (#240, #278).AGENT_TTY_ACTIVE=trueandAGENT_TTY_SESSION_ID=<id>so programs can detect the active session and reference their own session id (#166 by @prmartinow, #178).COLORTERM=truecolor, and the host now answers Neovim'sXTGETTCAP(Tc,RGB,setrgbf/setrgbb) and declinesDECRQSS SGR, so 24-bit color turns on even withenv -ior--env COLORTERM=. Opt back out with another--env COLORTERM=<value>(#231, #271).Changed
wait --timeoutdefaults to 30 s (was 600 s) and the default is shown in--help. Pass--timeout 0to wait indefinitely. A batchwaitstep withouttimeoutalso defaults to 30 s. Windows (--idle-ms/--screen-stable-ms) that cannot finish within the timeout are now rejected up front withINVALID_DURATION(exit2) (#236, #250, #277).waitnow emitsok: falsewitherror.code: "WAIT_TIMEOUT"(exit code remains11) while still carryingresult.timedOut/matched/capturedAtSeq. Fail-fastbatch --jsonwith a failing step now returns an error envelope with the step's code and the fullresult.steps(#232). Human-mode messages now name the timeout, e.g.Wait timed out after 30000 ms (the default; pass --timeout <ms>, or --timeout 0 to wait without a limit).(#273, #301).waitthat fails every renderer poll now stops with the renderer's own error (exit9RPC_ERROR), notWAIT_TIMEOUT.WAIT_TIMEOUTis now reserved for the deadline running out (#301)./tmp/agent-tty-<uid>/(mode0o700).inspect --jsonreports the newhost.rpcSocketPath; a one-release fallback still reads sockets at the old/tmp/agent-tty/path for sessions started by older builds (#288).snapshot --include-cellsresponses are now accepted up to 64 MiB (was 1 MiB), so styled captures on terminals up to ~1.2 M cells succeed. A response that still exceeds the cap is reported asPROTOCOL_ERRORwithdetails.maxResponseChars(#320, #322).CliError.detailsfrom the session host now carry through the RPC so live errors see the samedetailsas offline ones (for examplesnapshot/screenshotnow reportdetails.pathanddetails.errno) (#313).npx playwright install chromiumonce after upgrading (#192).@coder/libghostty-vt-nodeto0.1.0-beta.7: fixes same-cell mouse motion dedup after program output and lowers thelinux-x64prebuild to the x86-64 baseline (still needs AVX2) (#179, #293).Fixed
snapshot,screenshot, and renderwaiton a session that has not printed yet now return an empty screen / blank PNG atcapturedAtSeq: -1instead of failing withRPC_ERROR.record exporton an empty log also exports at seq-1(asciicast header-only, WebM a blank video) (#235, #270, #300).screenshot --show-cursorand--hide-cursornow produce different PNGs: the canvas is force-redrawn when the cursor toggle changes, so the default (hidden) no longer shows a block cursor (#289).--json(never a raw Node stack):INTERNAL_ERRORfor unexpected failures,INVALID_SESSION_IDfor empty/./../path-like IDs across every command, andINVALID_INPUTfor Commander usage errors (#237). The CLI now exits deterministically afterINTERNAL_ERRORinstead of hanging on leaked handles, andsnapshot/screenshot/record exportnow reportSTORAGE_WRITE_ERROR(withdetails.errno) when the artifacts path is a file, a symlink loop, or a dangling symlink (#287, #301).doctorchecks against theengines.noderange inpackage.json(currently>=24.0.0 <27) instead of a hard-coded24+(#245).manifest.json.locknow serializes publish+append across the host and CLI processes (#282, #299, #318). Repeatscreenshot/snapshotcaptures at the same seq now publish vialinkso a failed append never deletes an earlier capture's file (#191). Tworecord exportruns at the same seq no longer leave a manifest entry pointing at bytes that were replaced (#300, #316). A failedscreenshot --outcopy now removes the in-session capture and its manifest entry (#300).runinput is now logged in PTY order relative to concurrenttype/paste/send-keys(no more log/PTY reorder wheninput_runawaits its write), and native mouse state is preserved across renderer swaps by giving mouse its ownHostRendererManager(#234).destroytyped into the session's own interactive shell now reliably prints its result: the copy is re-run in a new session and forwards SIGINT/SIGTERM (exits130/143); off-Linux it finds the session by its controlling terminal;/proc/self/statthat cannot be read (or reports session id0) is counted as inside the program's session; and the Windows path has bounded retries plus a late-host marker watch so a failedcreatenever leaves a serving host (#216, #246, #259, #281, #324, #327, #331, #333, #334).createthat gives up on its host now stops that host, so a late-starting host can no longer serve a failed session. Everycreateerror after the first manifest write now carrieserror.details.sessionId, and text-mode printsSession <id> failed to start.on stderr first (#247, #294, #312).create/reconcile/gcraces closed so another agent'sgccannot remove a starting session (#181);writeManifestno longer recreates a folder thatgcremoved (#200, #210, #212);gckeeps an exited session whose program group still runs (even a fast fork chain under a non-reaping PID 1) sodestroycan end the leftover (#302, #326); a host record from another machine or time namespace reads as unknown instead of killing a live session (#275); anddestroy --forcenow ends sessions whoseprogram.jsoncannot be read (EACCES, EIO) (#327).createoverwrite the file (#186)./tmp/agent-tty/(#239).[message truncated], surrogate pairs are kept whole, the request-id echo is capped at 128 characters, and responses from an older host over the 64 MiB cap now reportPROTOCOL_ERROR(not retryable) (#315, #319, #322).EINVALfrom a removed session folder is now mapped toSESSION_NOT_FOUND(#318, #321); WebM size and SHA-256 come from the temp file to survive a post-rename overwrite (#321); native mouse dedup is preserved after a renderer swap (#293); session-less PTYs (e.g. thedoctorprobe) no longer inherit the outer session's env (#178); and thevalidate-bundle --profile canonicaltool now rejects symlinks that escape the bundle root (#187).Breaking Changes
wait --timeoutdefault dropped from 600 s to 30 s (also for batchwaitsteps). Scripts that relied on the old 10-minute default must pass an explicit--timeoutor"timeout": <ms>on the step. Pass--timeout 0/"timeout": 0for no limit (#236, #250).wait --jsonnow emitsok: falsewitherror.code: "WAIT_TIMEOUT"and the existingresultfields alongsideerror. Callers that branch on.okfor a timeout will see the opposite value; exit code is unchanged (11). Fail-fastbatch --jsonwith a failing step is affected the same way (#232)./tmp/agent-tty-<uid>/. A CLI running as a different uid (e.g.sudo agent-tty …) can no longer reach hosts your uid started. Scripts that hand-built the old socket path must readinspect --json'shost.rpcSocketPath. The old-path fallback for sessions started by 0.5.0 or earlier is slated for removal in 0.7.0 (#288).npx playwright install chromiumonce after upgrading; until thenscreenshotandrecord export --format webmreport the capability as degraded indoctor. Exported WebM is now VP9 (was VP8) (#192).waitwhose renderer repeatedly fails now exits9RPC_ERRORwith the renderer's own message, not11WAIT_TIMEOUT. Callers that treated every exit-11 as a timeout must branch onerror.code(#301).capturedAtSeq: -1is now a valid value in snapshot, screenshot, render-wait, andrecord exportresults on an empty event log. JSON consumers that assertedcapturedAtSeq >= 0must relax that check (#235, #270).agent-tty mouse …) requires thelibghostty-vtrenderer with the optional@coder/libghostty-vt-node0.1.0-beta.7 package; the Linuxx64prebuild still requires AVX2.CAPABILITY_UNAVAILABLE(exit12) is a new error code (#179).New Contributors
Maintained by the release-please workflow. Notes are regenerated by Communique on every push to main, so manual edits to this PR are overwritten.