Commit Graph

59 Commits

Author SHA1 Message Date
Ogulcan Celik 26a7bc860e fix(windows): preserve semantic escape key taps 2026-08-01 05:08:17 +03:00
Can Celik b76adc155d fix(input): preserve native key lifecycle across routing (#2142)
refs #2077

Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com>
2026-08-01 04:27:50 +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
Can Celik 53199270f6 fix: launch argument-free agents on windows (#2075)
refs #2072
2026-07-30 15:38:56 +03:00
Can Celik 38b7b540e1 fix: add opt-in child-group process detection (#2052)
* fix: add opt-in child-group process detection

refs #1982

* fix: preserve lifecycle probes without foreground groups

refs #1982
2026-07-30 15:14:27 +03:00
Ogulcan Celik 44b3adb125 fix(windows): preserve parent agent ownership
refs #1514
2026-07-29 16:24:23 +03:00
Can Celik 5b0be42e04 fix(windows): restore system notifications and sound playback (#2019) 2026-07-29 15:02:32 +03:00
JJ Liebig 6d1bedee3e fix: make native windows checks reliable (#1925) 2026-07-27 14:15:23 +03:00
JJ Liebig 04205ac070 fix: preserve shift-enter in windows panes (#1909)
refs #1743
2026-07-27 02:16:57 +03:00
Ogulcan Celik 61f6400675 fix: repaint after transient terminal resizes 2026-07-26 15:05:28 +03:00
joonhwan 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 a8be6117f6 refactor: simplify macos input source ownership
replaces contributions from sf-jin-ku
2026-07-22 22:10:23 +03:00
Ogulcan Celik 01d371bf7a perf: cache windows foreground process snapshots
refs #1158
2026-07-19 17:50:28 +03:00
Ogulcan Celik c1f7b6f331 fix: preserve lone escape input boundaries
refs #541
2026-07-18 02:51:29 +03:00
Ogulcan Celik e0758c3211 feat: harden named agent cli workflows
refs #1525
2026-07-17 23:59:56 +03:00
Ogulcan Celik 813fec141f test(windows): support headless console runners 2026-07-17 16:23:42 +03:00
Ogulcan Celik a723dc8852 fix(windows): prevent remaining subprocess console flashes
refs #1468
2026-07-17 16:03:47 +03:00
Ogulcan Celik e907e6a366 fix(windows): hide agent manifest curl windows
refs #1468
2026-07-16 20:16:23 +03:00
Ogulcan Celik 947328fa79 feat(macos): support agent environment hints
refs https://github.com/ogulcancelik/herdr/discussions/679
2026-07-16 02:40:39 +03:00
Ogulcan Celik 80d2958aba fix(linux): scope foreground process discovery to panes
refs #1399
2026-07-14 23:40:35 +03:00
Ogulcan Celik 749e85e0fb fix: detach windows server from host terminal
refs #1329
2026-07-12 03:01:45 +03:00
Ogulcan Celik 36b2e2f546 fix: use drawn cursor by default in wsl
refs #930
2026-07-09 03:35:35 +03:00
Ogulcan Celik e4a7095c93 fix: guard windows process tree cycles
refs #1083
2026-07-07 21:20:06 +03:00
akbash 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 220b99a9fa fix: support custom command keybindings on windows
refs #1041
2026-07-05 20:19:13 +03:00
ppggff 2bc1724c2d fix: switch prefix ASCII input source on the foreground client (#1016)
* fix: switch prefix ASCII input source on the foreground client

The macOS prefix ASCII-switch ran in the headless server, whose
TISCopyCurrentKeyboardInputSource read is a stale per-process cache
(refreshed only via a main-run-loop notification the server never pumps),
so prefix could leave the terminal on the wrong input source.

Forward it to the foreground client, like clipboard: sync_prefix_input_source
emits AppEvent::PrefixInputSource as an intent; the server forwards it to the
foreground client and the monolithic app applies it in-process via
RealPrefixInputSource, which pumps its main run loop before the stale TIS read.
Key it on Mode::wants_ascii_input so multi-level prefix commands keep ASCII
until returning to the terminal, and restore the IME for rename text entry.

Adds ServerMessage::PrefixInputSource to the already-unreleased protocol 15.

refs #774

* fix: keep prefix input-source switch out of the headless server process

An App-internal drain (the exhaustive drain at the top of
handle_api_request, reachable from prefix-key runtime mutations) can
consume a queued PrefixInputSource intent before the server's
forwarding drain sees it, applying the TIS switch in the headless
server process and stranding the restore state. Gate the in-process
switch on App.local_input_source_switch, disabled by the headless
server alongside the other local side effects, so a swallowed intent
degrades to a skipped switch. Widen the forwarding-bypass maintenance
test to the handle_internal_event_with_prefix_sync wrapper.

refs #774

* docs: clarify prefix input-source comments and flag docs

refs #774

* fix: bump protocol for prefix input source

refs #774

---------

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-05 03:25:47 +03:00
Ogulcan Celik ef67a97047 perf(linux): cache foreground process group scans
refs #936
2026-07-03 04:02:45 +03:00
Ogulcan Celik a9111cbab2 fix: open scrollback editor on windows without sh
refs #914
2026-07-02 01:16:21 +03:00
Ogulcan Celik 26db26e416 fix: keep remote sessions alive across disconnects 2026-06-30 19:49:55 +03:00
Ogulcan Celik ef0b4bc6e2 fix: support agent env hints
refs #679

related #699
2026-06-20 03:15:21 +03:00
Ogulcan Celik 350e8c7e46 fix: validate clipboard image payloads
refs #534
2026-06-10 03:15:52 +03:00
Ogulcan Celik 77fcde0a27 fix: support paste in modal inputs
refs #302
2026-06-10 02:27:41 +03:00
Ogulcan Celik fb56e64537 fix: improve windows pane behavior 2026-06-08 01:36:51 +03:00
Ogulcan Celik 52e57507e1 ci: tighten windows branch validation 2026-06-07 16:29:45 +03:00
Ogulcan Celik 3c2b46d24a feat: add native windows beta support 2026-06-07 16:29:44 +03:00
sf-jin-ku f5e66b251f feat: switch input source during prefix mode (#434)
On macOS, opt-in under [experimental], temporarily switch the host input
source to the current ASCII-capable layout while prefix mode is active so
prefix commands register even when a CJK IME is composing, then restore the
previous input source when prefix mode exits or is cancelled. No-op when the
current source is already ASCII-capable, on non-macOS platforms, or when any
input source call fails. Pane text input is unaffected.

Also pin next_resize_poll in next_loop_deadline_includes_selection_autoscroll_deadline
so the selection autoscroll deadline stays the earliest; the default resize
poll could otherwise beat it and flake the assertion.

refs #400

Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-06-03 19:13:01 +03:00
Ogulcan Celik 9e302984cc feat: expose foreground cwd in pane info
refs #345
2026-05-29 20:38:55 +03:00
Ogulcan Celik 8e7317e223 fix: raise macos server fd limit
refs #327
2026-05-27 21:36:26 +03:00
Ogulcan Celik af399094f5 feat: open pane links with ctrl-click
refs #307
2026-05-26 18:26:12 +03:00
Ogulcan Celik 9eec3029e1 fix: reduce idle agent checker CPU
refs #300
2026-05-26 14:44:22 +03:00
LaneBirmingham 5954ece9f7 feat: add state detection heuristics for GitHub Copilot CLI (#256)
* feat: add github copilot cli state detection

Add robust state detection heuristics for the GitHub Copilot CLI by matching specific interactive prompt combinations, freeform inputs, and thinking status frames.

refs #232

* docs: keep copilot docs staged for next release

---------

Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-05-23 03:12:56 +03:00
Ogulcan Celik 659badf106 fix: avoid agent detection from runtime arguments
refs #238
2026-05-21 22:17:37 +03:00
Ogulcan Celik 866aaf740e refactor: separate server client boundaries 2026-05-21 20:22:57 +03:00
Ogulcan Celik 5be7d07018 fix: cap clipboard image reads 2026-05-20 14:40:01 +03:00
Ogulcan Celik ed478be983 fix: bridge remote clipboard image paste
refs #205
2026-05-20 02:51:59 +03:00
Ogulcan Celik 67d5e7391f fix: remove macos notification icon handling 2026-05-15 03:47:13 +03:00
Ogulcan Celik fdf6a0180d fix: improve macos system notifications 2026-05-15 03:25:50 +03:00
Ogulcan Celik bfe2f84f4f feat: add system toast delivery 2026-05-15 01:37:57 +03:00
Ogulcan Celik 8375922c06 ci: run checks on macos 2026-05-12 15:05:36 +03:00
Ogulcan Celik bcea1d884a fix: detect macos foreground jobs by process group
fixes #100
2026-05-12 13:59:32 +03:00