Commit Graph
109 Commits
Author SHA1 Message Date
Can Celik 6b526626f6 fix: keep the saved layout when panes die during host shutdown (#5510)
* fix: keep the saved layout when panes die during host shutdown

refs #5349

* test: check hangup recording with the server signal monitor installed

refs #5349
2026-10-23 17:03:57 +03:00
JJ Liebig 9168dd3323 fix: use newer stable releases on the preview channel
Preview update checks select a newer stable release while retaining the preview preference for future builds. Preserve implicit Windows preferences with a TOML-aware edit and cover release selection, config forms, and install behavior with regression tests.
2026-10-23 14:32:13 +02:00
github-actions[bot] 2f3432c688 release: synchronize metadata for v0.9.5 2026-10-14 16:07:47 +00:00
JJ Liebig dec3156a6f fix: recover endpoint connections promptly after wake (#5249)
* fix: recover endpoint connections promptly after wake

refs #4721

* test: wait for asynchronous endpoint pipe closure

refs #4721
2026-10-14 00:54:10 +02:00
github-actions[bot] 1cbd794559 release: synchronize metadata for v0.9.4 2026-10-13 15:41:33 +00:00
Can Celik 241b99cd39 refactor: share cli and api command contracts (#5212)
* refactor: share cli and api command contracts

* fix: address cli contract review findings
2026-10-13 04:25:38 +03:00
Can Celik c4653a4f10 fix: keep the server running on hangup and log why it stops (#4965) 2026-10-05 19:21:31 +03:00
JJ Liebig 347f9c99bc feat: use native actionable Windows notifications (#4803)
refs #4773
2026-09-30 18:56:30 +02:00
github-actions[bot] f9a99bd2de release: synchronize metadata for v0.9.3 2026-09-29 19:29:39 +00:00
github-actions[bot] 1ab85d31ac release: synchronize metadata for v0.9.2 2026-09-29 13:19:53 +00:00
Can Celik fff6c820aa refactor: extract libghostty-vt binding into ghostty-vt workspace crate (#4661)
* refactor: extract libghostty-vt binding into ghostty-vt workspace crate

* fix: build libghostty-vt into each build's out dir
2026-09-27 00:06:29 +03:00
Can CelikandJJ Liebig 0ff0f27e22 fix: preserve session layouts across shutdown and restore failures (#4400)
* fix: preserve session layouts across shutdown and restore failures

refs #4320

* test: update subscription fixture for pane restore errors

---------

Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-21 00:29:45 +03:00
JJ Liebig 101ccc20d3 fix(windows): prefer pwsh for the default pane shell (#4297)
* fix(windows): prefer pwsh for the default pane shell

Windows panes launched Windows PowerShell 5.1 (powershell.exe) whenever [terminal] default_shell was unset, ignoring PowerShell 7 even when pwsh.exe resolved on PATH. Resolve the unset default against PATH and prefer pwsh.exe, falling back to the inbox powershell.exe. An explicit default_shell still wins.

* fix(windows): validate pwsh before using it as the default shell

portable-pty resolves the configured shell with Path::exists and passes that path to CreateProcessW, which does not fall through to later PATH entries. Selecting an invalid pwsh.exe would therefore break new panes instead of falling back. Only prefer a pwsh.exe that starts with the PE MZ magic, and return its path so the validated binary is the one launched.

* fix(windows): validate the full PE header before preferring pwsh

Checking only the DOS MZ signature still accepted truncated images, DLLs, and foreign-architecture binaries. Because portable-pty passes the resolved path straight to CreateProcessW without trying later PATH entries, validate the PE signature, the COFF header (machine, executable-image bit, not a DLL, section count), and the optional header before preferring pwsh.exe.

* fix(windows): accept native ARM64 pwsh and validate the section table

Herdr ships an x64 Windows build that also runs on Windows ARM64 under x64 emulation, so cfg!(target_arch) cannot tell whether a native ARM64 pwsh.exe is launchable. Accept every executable machine type Windows supports instead of rejecting ARM64 on the x86_64 build. Also bound-check the section table (40 bytes per declared section) after the optional header so a truncated table falls back instead of being selected.

* fix(windows): detect the native host machine for pwsh compatibility

Machine compatibility was derived from cfg!(target_arch), which reports the emulated x64 process on Windows ARM64, and then briefly accepted ARM64 on every host. Read the native machine with IsWow64Process2 in the platform layer instead: ARM64 Windows accepts ARM64/x64/x86 images, x64 accepts x64/x86, and x86 accepts only x86.
2026-09-17 17:45:07 +02:00
github-actions[bot] 956f23ff6b release: synchronize metadata for v0.9.1 2026-09-16 18:40:20 +00:00
Mark JaquithandJJ Liebig b0f21ed2cb feat: add cursor-based editing to text inputs (#3698)
* feat: add cursor-based editing to text inputs

refs #1803

* fix: preserve dialog actions with associated text

refs #1803

* refactor: simplify text editor outcomes and tests

refs #1803

---------

Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
2026-09-14 21:47:53 +02:00
Ogulcan Celik b99002ac99 release: v0.9.0 2026-09-07 22:12:53 +03:00
Ogulcan Celik 8a6d697308 refactor: separate website presentation from runtime 2026-09-01 14:48:45 +03:00
Ogulcan Celik 9eb521456a release: v0.8.2 2026-08-19 20:49:54 +03:00
Ogulcan Celik 09b2554ded release: v0.8.1 2026-08-18 23:34:58 +03:00
JJ Liebig cb727d0555 fix: use verified local packages for windows updates (#2816)
refs #2751
2026-08-14 22:48:59 +03:00
Can CelikandDavid Heinemeier Hansson e48d83067a feat: add configurable tab bar status (#2586)
* feat: show a zoom indicator in the desktop tab bar

Reserve the right edge of the tab row for a ZOOM pill while the
focused pane is zoomed, matching the accent style of the mode bars.
The per-tab Z suffix stays; the pill makes the zoomed state visible
at a glance like tmux's status-right flag.

* feat: optionally show the hostname in the desktop tab bar

Add ui.tab_bar_hostname to display the machine's hostname at the right
edge of the tab row, like tmux's #h in status-right. The value resolves
where the server renders, so remote sessions show the remote host. Off
by default.

* fix: strip control characters from the tab bar hostname

* fix: hide the hostname when it would squeeze out the tab strip

* feat: add configurable tab bar status

* fix: harden tab bar status updates

* fix: terminate tab bar status process trees

* fix: disable status commands on unsupported platforms

* fix: skip unchanged status command renders

* fix: keep tab bar status opt-in by default

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-08-10 01:20:09 +03:00
Can Celik 2863b71513 feat(windows): support remote attach to unix hosts (#2329)
* feat(windows): support remote attach to unix hosts

* fix(remote): preserve unix bridge behavior
2026-08-05 19:34:24 +03:00
Ogulcan Celik 346411fa21 release: v0.8.0 2026-08-03 21:52:56 +03:00
akbashandOgulcan Celik d742e51530 fix: preserve claude settings formatting (#2089)
refs #2066

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-08-02 16:03:07 +03:00
Matt ColesandMatt Coles b4112743cf fix(client): restore terminal on sighup and sigterm
Enable termination-signal handling so SIGHUP and SIGTERM follow the graceful
quit path and restore terminal state. Log handler registration failures and
add PTY coverage for direct SIGHUP and server EOF restoration

Co-authored-by: Matt Coles <macols@amazon.com>
2026-07-31 00:46:01 +03:00
Can Celik 0732039eaf fix: preserve windows sessions after ssh logout (#2098)
* fix: preserve windows sessions after ssh logout

refs #2008

* chore: document windows wmi safety

refs #2008
2026-07-30 23:39:03 +03:00
Ogulcan Celik b44b5b1013 chore: finish repository organization migration 2026-07-30 02:45:05 +03:00
Ogulcan Celik f6060cf682 fix: scope agent skill installation
refs #2022
2026-07-29 21:21:22 +03:00
joonhwanandOgulcan Celik 6cfaa079a9 feat: switch IME to ASCII in prefix mode on Windows (Korean IME) (#1823)
* feat: switch IME to ASCII in prefix mode on Windows

Extend switch_ascii_input_source_in_prefix to Windows: detect IME state
via WM_IME_CONTROL and toggle to ASCII with SendInput for the Korean IME.
Other IME languages are detected and left unchanged.

refs #1802

* docs: clarify Windows (Korean IME) support for prefix ASCII switching

Follow-up to the Windows prefix ASCII switch, which extended
switch_ascii_input_source_in_prefix to Windows but left the surrounding
text describing macOS only.

- Settings row label: "(macOS)" -> "(macOS/Windows)", plus its test.
- Generalize the Windows behavior wording to "switches the IME to
  English (ASCII) input" in the config-reference.json entry and the
  model.rs doc comment, and state that Windows support is currently
  limited to the Korean IME.
- Add a :::caution aside noting the Korean-IME-only limitation to the
  en/ja/zh preview docs, keeping the three translations in sync.

refs #1802

* fix: warn when prefix IME toggle injection is incomplete

SendInput can queue fewer events than requested (for example when blocked
by UIPI), which would otherwise leave the IME silently stuck in ASCII or
native mode. Log a warning with the sent and expected counts so the failure
is diagnosable.

refs #1802

* fix: guard prefix IME restore and correct open-status naming

Address maintainer review on the Windows prefix ASCII switch:

- Restore only when safe: store the foreground window at switch time and,
  before toggling back, require that the same window is still focused and
  the IME is still in English. This stops restore from toggling another
  application or overriding a manual return to Hangul during prefix mode.
- Report injection success from send_vk_tap and only arm restoration when
  the initial toggle landed; on a partial injection retry the dropped
  key-up so a key is not left logically held down. The injection policy is
  split into send_vk_tap_with(inject) so the success, partial, and failure
  branches are unit-tested without the real SendInput.
- Correct the WM_IME_CONTROL sub-command naming: 0x0005 is IMC_GETOPENSTATUS
  (IME open state), not IMC_GETCONVERSIONMODE. Behavior is unchanged; the
  constant, comments, and tests now describe the open-status read.

refs #1802

* fix: bound IME open-status read with a timeout

The prefix IME switch reads IMC_GETOPENSTATUS via WM_IME_CONTROL, which
crosses into the terminal-emulator process. A plain SendMessageW would block
herdr's client thread until that process responds, indefinitely if it hangs.
Read through SendMessageTimeoutW with SMTO_ABORTIFHUNG and a short timeout
instead; on timeout the switch is skipped and restore does nothing, so a hung
host process can no longer freeze prefix-mode entry or exit.

refs #1802

* fix: preserve windows ime restoration after partial injection

refs #1802

---------

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-25 20:52:45 +03:00
Ogulcan Celik cd5ea1be0e chore: relicense herdr under apache-2.0 2026-07-22 22:56:57 +03:00
Ogulcan Celik ef4c23f577 release: v0.7.5 2026-07-21 21:04:32 +03:00
Ogulcan Celik 3f80947678 feat: make agent automation a first-class cli primitive 2026-07-19 23:56:07 +03:00
akbashandakbash-bot f11be93e04 fix: report unknown config keys (#1575)
* fix: report unknown config keys

refs #1573

* fix: preserve mixed config warning context

refs #1573

---------

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-07-18 21:27:48 +03:00
Ogulcan Celik 50aaa2ec04 release: v0.7.4 2026-07-15 19:30:39 +03:00
Ogulcan Celik 749e85e0fb fix: detach windows server from host terminal
refs #1329
2026-07-12 03:01:45 +03:00
Ogulcan Celik 299dd4163a release: v0.7.3 2026-07-08 01:53:09 +03:00
Ogulcan Celik 199c27609c release: v0.7.2 2026-07-07 19:19:22 +03:00
akbashandakbash-bot c17c419c10 fix: write pane copies to native windows clipboard (#1082)
refs #1067

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-07-06 17:13:36 +03:00
Ogulcan Celik 045f506ec8 fix: keep windows wait connections open
refs #963
2026-07-03 20:38:05 +03:00
Ogulcan Celik 13cb5d9ae6 feat: add shell completions
refs #435
2026-06-30 17:49:37 +03:00
Ogulcan Celik 6703413fc7 feat: expose api schema from cli 2026-06-29 22:58:34 +03:00
Ogulcan Celik 25aeaa46f6 feat: generate socket protocol schema 2026-06-29 22:27:19 +03:00
Ogulcan Celik 23b96e48c3 release: v0.7.1 2026-06-24 16:27:01 +03:00
Ogulcan Celik a66f4c64e9 fix: force system conpty on windows
refs #761
2026-06-23 21:43:23 +03:00
Ogulcan Celik 052f20214b fix: preserve windows terminal multiline paste
refs #670
2026-06-19 22:24:20 +03:00
Ogulcan Celik 0bf9bb58eb release: v0.7.0 2026-06-15 19:13:42 +03:00
Ogulcan Celik 8b99847619 release: v0.6.10 2026-06-11 13:12:43 +03:00
Ogulcan Celik a965b055bc release: v0.6.9 2026-06-10 23:51:47 +03:00
Ogulcan Celik 3c2b46d24a feat: add native windows beta support 2026-06-07 16:29:44 +03:00
Ogulcan Celik 3abda6138e release: v0.6.8 2026-06-04 01:03:14 +03:00