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
20 times, most recently
from
November 3, 2026 08:42
0fc6662 to
a3dee26
Compare
github-actions
Bot
force-pushed
the
release-please--branches--main
branch
from
November 3, 2026 09:32
a3dee26 to
e6c5d07
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-03
Added
mouseCLI, 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 ininput_mouseevents. Newmouse-inputcapability andCAPABILITY_UNAVAILABLEerror (exit 12). Requires@coder/libghostty-vt-node >=0.1.0-beta.5(#179).wait --scope cursor-line(andscopeon batch wait steps /waitForRenderRPC) matches--text/--regexonly against the cursor's row, so a wait afterruncan no longer be satisfied by the echoed command line (#169).record diff <session-a> <session-b>replays both sessions offline throughevents.jsonland emits a line-level screen diff.--at-seq-a/--at-seq-ballow diffing a session against its own earlier state.--jsonreturns{ identical, a, b, diff }validated against the newRecordDiffResultSchema(#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;--outinside the Home'ssessions/folder is now rejected withEXPORT_ERRORfor bothscreenshot --outandrecord export --out(#241).screenshot --jsonnow lists glyphs the renderer drew as.notdefboxes inresult.missingGlyphs(with cells and an optionalmissingGlyphsTruncated), so harnesses can tell "boxes in the PNG" apart from an incomplete screen (#240).AGENT_TTY_ACTIVE=trueandAGENT_TTY_SESSION_ID=<sessionId>in their environment (#166).COLORTERM=truecolor, overridable withcreate --env COLORTERM=<value>(#231). The PTY query responder now answers XTGETTCAP forTc,RGB,setrgbf,setrgbband declines DECRQSS SGR, so Neovim turns ontermguicolorseven underenv -i(#271).snapshot,screenshot, and renderwaitnow succeed on a session that has printed nothing. The empty screen reportscapturedAtSeq: -1, andwait --after-seq -1is accepted (#235).record exporton an empty log also exports at seq -1 (header-only asciicast or blank WebM) instead of failing (#270).Changed
waitnow defaults--timeoutto 30 s (down from 600 s) and shows the default in--help;--timeout 0still waits forever. An--idle-ms/--screen-stable-msof 30000 or more without--timeoutis rejected up front withINVALID_DURATION(exit 2) (#236). Batchwaitsteps follow the same 30 s default and up-front rejection (#250).waitnow emits an error envelope witherror.code: "WAIT_TIMEOUT"andok: false(exit code remains 11); the existingresult.timedOut/result.matchedfields are kept next toerror. Fail-fastbatchfailures gain the same envelope witherror.details.stepIndex(#232).INTERNAL_ERRORorINVALID_INPUTJSON envelope under--jsoninstead of a raw Node stack. Every session-id-taking command rejects empty /./../ path-like IDs withINVALID_SESSION_ID(exit 2) (#237).doctorand the CLI startup now check the running Node againstpackage.json'sengines.node(>=24.0.0 <27). An unsupported Node logs one warning on stderr but still runs;doctorreports the full range (#245).@coder/libghostty-vt-nodeto0.1.0-beta.5(firstlinux-x64prebuild that runs on CPUs without AVX-512; still requires AVX2) (#179).Fixed
destroynow 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), anddestroytyped 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 withAGENT_TTY_SESSION_IDunset no longer kill the destroy mid-run (#233, #259).destroy --forceand reconcile now identify the host from a newhost.json(pid, boot id, start time, pid namespace, machine id, time namespace). A zombie host under a non-reaping init readsfailedand 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 asunknowninstead of killing an unrelated process or stopping a live session (#260, #275).destroy --forcecan no longer overwritedestroyedwithfailed:destroynow drops a<session>/destroyedmarker and reconcile repairs its own write (#256).createthat gives up on an unreachable host now sends the host SIGTERM so no orphan session keeps running afterHOST_UNREACHABLE/HOST_TIMEOUT(#247).create,reconcile, andgcno 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, andallocateSessionvalidatescwd, shell, and command before creating any folder (#181, #188). Every successfuldestroynow recordsdestroyed(previously--forcecould leave a sessionfailed), and the serial manifest writer refuses writes after a terminal record (#194).writeManifestno longer recreates a session folder thatgcremoved; the artifact commands andgc's ownrmnow keep a removed folder removed and returnSESSION_NOT_FOUNDwhere appropriate (#200, #212).screenshotorsnapshotcaptures 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)./tmp/agent-tty/<hash>is now removed when it holds no socket (destroy, host shutdown, reconcile after host crash, anddoctor), ending the "one empty folder per throwaway Home" leak (#239).homes.jsonno longer wipes the rest on the nextcreate(#186). A Home behind a symlink resolves to the same canonical path before and after it exists, so the firstcreatein a new symlinked Home succeeds andhome forgetfinds it (#210).runinput 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).doctorprobe) no longer inheritAGENT_TTY_ACTIVEorAGENT_TTY_SESSION_IDfrom an outer agent-tty session (#178).validate-bundle --profile canonicalrejects artifacts whose real path escapes the bundle root (#187).cleanupEvalHome(os.tmpdir())now throws instead of deleting the system temp folder; eval_*SchemaParityaliases now actually fail typecheck on drift, andBundleValidationProfileSchemagains thecanonicalprofile (#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.