Repository navigation
Terminal M0: libghostty-vt core, PTY, view, AOT self-test - #1
Merged
Merged
Conversation
…f-test - Design docs and research for the integrated terminal (docs/terminal). - libghostty-vt pinned at ghostty b3dc3d7 with overlays O1-O4 (win32-input-mode, disabled kitty paste events, deferred OSC 52 reads, modifyOtherKeys export); Zig 0.16.0 build scripts (tools/terminal). - libtcodepty + tcode-pty-spawn: posix_spawn-based PTY with exit watching (pidfd/kqueue), gather reads, signals and process info (native/tcodepty). - TCode.Terminal.Core (facade over libghostty-vt), TCode.Terminal.Pty (Unix PTY, Windows ConPTY), TCode.Terminal.Avalonia (TerminalView, Control.Render), tcode-ptyhost --self-test (NativeAOT, runs vim). - StreamMark as a git submodule (external/StreamMark); NuGet source moved to packages/streammark (tools/streammark/pack.sh). - CI: .github/workflows/terminal.yml (native builds, tests on 3 OSes, AOT self-test). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…erlay - tools/terminal/ghostty_bindgen.py generates all structs/enums from ghostty_type_json() (explicit layouts) and all 202 functions from the headers; replaces the hand-written M0 subset. Layout/enum tests compare every generated type with the manifest on each RID. - FrameCapturer: 8-byte packed cells, per-row style tables, grapheme clusters, row ids/versions/content hashes, dirty-row capture with row sharing. - Differential test (incremental vs full rebuild) found two upstream missed-dirty bugs; overlay O5 marks rows dirty when semantic_prompt or wrap flags change. - TerminalView renders from the packed snapshot (palette resolved in the view). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…re O5 fixes - TerminalCore installs all libghostty callbacks: title, pwd, bell, clipboard write / deferred read (O3, CompleteClipboardRead), notifications, progress, OSC 133 semantic prompts, render hold, reset, unknown OSC (633). - DA1/DA2/DA3, XTVERSION, XTWINOPS sizes, 2048 and 996 are answered by the core from its own state (10 §2); SetDefaultColors, Clear (⌘K), width policy (2027 default), terminfo name, title report off. - CommandTracker: OSC 133 / 633 (nonce-checked) command records with tracked anchors and output reading via select_output. - Differential test fixes: C# \x escapes in fragments; O5 now also marks the previous row dirty when a stale spacer_head is cleared (450k-step sweep clean). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- InputModes read from the core after each write batch (DECCKM, keypad, 1035/1036, DECBKM, modifyOtherKeys via O4, kitty flags, mouse tracking/format, 2004, 1004, 2027, 9001 via O1, cursor-at-prompt); InputModes.Defaults matches terminal reset. - InputEncoder (UI thread, not bound to a terminal): legacy/kitty key encoding, mouse encoding with geometry, focus reports, macOS option-as-alt. - TerminalCore.EncodePaste with a write_pty capture scope (bracketed paste, unsafe paste requires confirmation); PasteEncoder for terminal-less encoding. - Bindgen emits public enums (TerminalKey) into TCode.Terminal.Core. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ames Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lp32, PTY stress tests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…), fuzz corpus + generator, esctest2 driver Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r late exits; GC before counting handles in stress tests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d-pool growth is not a leak) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ion actors, output log, flow control, attach/resume Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…iod, signals, host log Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ack), periodic save, onQuit modes, SIGTERM save Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…docs: M2 status Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…host - Desktop references Terminal.Avalonia / Protocol; pty host copied to ptyhost/ and AOT-published with the app - PtyHostService (discover/start/configure), TerminalSession (UI-side core on one worker, coalesced frames, ack after batch, resize via record) - TerminalTabViewModel / TerminalTabView: lifecycle (restart on exit or host loss), keys, text, paste (unsafe refused), copy, select, wheel, links - TerminalView input events and key mapping (unit-tested) - Fix: tcode-pty-spawn rejected argv0-only launches (argc < 5), found by AOT smoke - Fix: host starts the output pump after the create response is queued (exit notifications were dropped on fast exits) - Smoke: terminal step in TCode --smoke (AOT host, real shell output) Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…ree on Linux CI, exit 139); drop the Desktop test CI step until StreamMark packages are part of CI Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…s lost when the writer had dequeued it but not yet written) Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…se confirmation bars Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…) applies at its exact position; fixes the chunk-boundary flake in DECSET_DECAWM_NoLineWrapOnTabWithLeftRightMargin (10/10 after, 1 failure in 3 before) Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
- TerminalSession: search entry points on the UI-side worker (set/step/close) - TerminalTabViewModel: open/close, count (SelectedIndex counts from the newest match; verified by test), Enter/Shift+Enter/Esc - TerminalTabView: floating bar; focus moves to the search box and back - TerminalCore.ActiveSearch made public Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
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.
Integrated terminal, milestone M0 (docs/terminal/13-roadmap.md). Design and research live in
docs/terminal/.What's included
b3dc3d7plus overlays O1–O4 (native/ghostty/overlays), built with Zig 0.16.0 (tools/terminal/build-ghostty.sh). C# facadeTCode.Terminal.Core: write, resize, modes, plain-text export, snapshot round trip, frame capture.libtcodeptyand thetcode-pty-spawnhelper for Unix (posix_spawn, pidfd/kqueue exit watching, gather reads), plus a ConPTY implementation for Windows (TCode.Terminal.Pty).TCode.Terminal.Avalonia.TerminalView, drawn inControl.Render, with a headless snapshot test.tcode-ptyhost --self-test(NativeAOT) checks core parsing, the overlays, snapshots, a PTY round trip, and running vim.external/StreamMark). The NuGet source moved topackages/streammark(tools/streammark/pack.sh)..github/workflows/terminal.ymlbuilds the native libraries (Linux/Windows cross-compiled with zig, macOS on a macOS runner) and runs tests and the AOT self-test on Linux, macOS and Windows.Verified locally (osx-arm64)
Not yet verified
🤖 Generated with Claude Code