Commit Graph

297 Commits

Author SHA1 Message Date
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 b33e5f973f fix: copy retained mouse selections with keyboard shortcuts
refs #1782
2026-07-25 02:54:20 +03:00
Can Celik 8afd52ae57
fix: bundle modern ConPTY on Windows (#1828)
refs #1533
refs #1644
2026-07-25 02:40:14 +03:00
corrius 38d2b0780c
feat: filter keybind help (#1832)
* feat: filter keybind help

refs #1825

* fix: recognize shifted slash in keybind help

---------

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-24 22:52:17 +03:00
Enrico Carlesso e9b22084e0
feat: add grok cli integration for native session restore (#1807)
* feat: add grok cli integration for native session restore

tl;dr: adds `herdr integration install grok` (session-identity tier: a
SessionStart hook reports the grok session id for native restore; state
stays screen-detected via the bundled manifest).

Grok merges every ~/.grok/hooks/*.json, so install writes a
self-contained hooks/herdr.json registering a SessionStart hook next to
hooks/herdr-agent-state.sh, and never touches other hook files. The hook
prefers $GROK_SESSION_ID (injected into every grok hook process) and
reports through the socket API; herdr:grok is a reserved-native-state
source so screen detection stays authoritative. Restore uses
`grok --resume <id>`. Additive JSON API change; no protocol bump; the
schema artifact is regenerated.

refs #1800

* fix: honor GROK_HOME and validate grok hook config in status

Review follow-ups: grok_dir now resolves GROK_CONFIG_DIR (herdr test
seam) before GROK_HOME (the grok CLI's own config-home override) before
~/.grok, so hook installs land where grok actually looks. Integration
status now also validates the herdr-owned hooks/herdr.json next to the
hook script — missing, corrupt, or no-longer-referencing configs report
the install as outdated instead of masking a hook grok never invokes.

refs #1800

* fix: validate the exact grok session hook command in status

The config validator matched on a filename substring, so a SessionStart
command like `echo herdr-agent-state.sh`, or one invoking the script
without the `session` action, still reported the integration as current
while grok never delivered a session id. Status now compares against the
exact command the installer writes, via a shared builder, and the
degradation tests cover both nonfunctional shapes.

refs #1800

* fix: require a command-type grok session hook in status validation

A config entry carrying the exact generated command under a non-command
hook type (e.g. "http") is never executed by grok, so it must not report
the integration as current. The validator now also requires
type = "command", with a degradation test for the mismatched-type shape.

refs #1800

* fix: validate the complete grok hook config

refs #1800

---------

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-24 22:05:20 +03:00
Ogulcan Celik c0fb777ed7 fix: report truncated pane reads
refs #1717
2026-07-24 04:00:13 +03:00
Ogulcan Celik e608a75159 fix: make known-agent exit process-owned
refs #1792
refs #1648
2026-07-24 02:50:58 +03:00
Ogulcan Celik 58e812b238 fix: consume handled url click gestures
refs #1761
2026-07-24 02:10:47 +03:00
akbash 503613c8ec
fix: inherit host palette in pane queries (#1759)
refs #1752

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-24 01:28:35 +03:00
Ogulcan Celik e7fc85bfdb fix: preserve kitty printable key releases
refs #1746
2026-07-23 03:47:44 +03:00
Ogulcan Celik 2a20e90a02 fix: preserve physical escape on windows
refs #1736
2026-07-23 01:49:54 +03:00
Ogulcan Celik 7e821ba7a3 fix: respect OMP config directory override
refs #1696
2026-07-22 23:06:52 +03:00
Ogulcan Celik cd5ea1be0e chore: relicense herdr under apache-2.0 2026-07-22 22:56:57 +03:00
Ogulcan Celik c234f221f9 feat(docs): publish versioned release documentation 2026-07-22 14:59:09 +03:00
Ogulcan Celik 0f161fac28 docs: add alternate-screen output fallback 2026-07-21 22:09:38 +03:00
Ogulcan Celik ef4c23f577 release: v0.7.5 2026-07-21 21:04:32 +03:00
Ogulcan Celik bc064e9d03 docs: finalize release docs and refresh agent skill 2026-07-21 21:01:27 +03:00
Ogulcan Celik 7c18900346 docs: document alternate-screen automation limits 2026-07-21 19:09:04 +03:00
Ogulcan Celik 1955406eaf fix: link plugins without a running server
refs #1670
2026-07-21 17:37:43 +03:00
akbash 6382bd433a
fix: reject oversized text pastes safely (#1676)
refs #1665

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-07-21 17:33:07 +03:00
akbash fd29addd71
fix: bound linux sound player lifetime (#1677)
refs #1622

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-07-21 17:26:04 +03:00
Ogulcan Celik 1f2487554b docs: explain Windows cursor and IME trade-off
refs #1637
2026-07-21 02:53:44 +03:00
Ogulcan Celik 69d07dba84 fix: make plugin state global across sessions
refs #1174
2026-07-20 23:04:15 +03:00
Ogulcan Celik 6f7ef04e7d fix: bound stalled agent prompt waits 2026-07-20 15:22:26 +03:00
Ogulcan Celik d30ab1b54f feat: add plugin-driven agent views and startup hooks 2026-07-20 00:55:36 +03:00
Ogulcan Celik 3f80947678 feat: make agent automation a first-class cli primitive 2026-07-19 23:56:07 +03:00
Ogulcan Celik a51a15914a fix: support javascript integrations on windows
refs #1531
2026-07-18 23:56:20 +03:00
akbash 74db2f3a79
fix: detect codex working with static titles (#1574)
* fix: detect codex working with static titles

refs #1563

* fix: ignore interrupted codex footer

refs #1563

---------

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-07-18 23:29:04 +03:00
akbash 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 e298e45890 feat: add optional workspace name prompt 2026-07-18 01:55:46 +03:00
Ogulcan Celik e0758c3211 feat: harden named agent cli workflows
refs #1525
2026-07-17 23:59:56 +03:00
Ogulcan Celik a723dc8852 fix(windows): prevent remaining subprocess console flashes
refs #1468
2026-07-17 16:03:47 +03:00
Ogulcan Celik 550e9f8cc0 fix: follow foreground process group leader cwd
refs #1472
2026-07-16 23:13:41 +03:00
Ogulcan Celik 616d1dd812 fix(windows): suppress noninteractive process windows
refs #1468
2026-07-16 21:23:53 +03:00
Ogulcan Celik e907e6a366 fix(windows): hide agent manifest curl windows
refs #1468
2026-07-16 20:16:23 +03:00
akbash 8915f01c65
fix: stop agent wait when pane closes (#1488) 2026-07-16 19:43:25 +03:00
Ogulcan Celik 9c9490d764 feat: configure collapsed sidebar startup state
refs #1463
2026-07-16 03:28:57 +03:00
Ogulcan Celik b16465afbb feat: add configurable sidebar token styles 2026-07-16 03:21:36 +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 a22454f27c fix: preserve plugins during live handoff
refs #893
2026-07-16 00:32:22 +03:00
Ogulcan Celik 50aaa2ec04 release: v0.7.4 2026-07-15 19:30:39 +03:00
Ogulcan Celik 17208b0641 docs: finalize next release documentation 2026-07-15 19:25:20 +03:00
Ogulcan Celik a0678a38b9 docs: add popup pane usage examples
refs #1125
2026-07-15 04:42:54 +03:00
Ogulcan Celik 2c7c8beb07 feat: add floating popup panes
refs #1125
2026-07-15 04:02:14 +03:00
Ogulcan Celik 88370e1516 feat: add isolated pane graphics streaming 2026-07-15 02:32:52 +03:00
akbash 3023228736
fix: preserve associated emoji input (#1410)
refs #1404

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-07-14 22:46:33 +03:00
Ogulcan Celik 5b91dae12f feat: configure sidebar entry gaps 2026-07-14 20:41:20 +03:00
akbash 2e5da968ea
fix: forward outer focus events to panes (#1388)
* fix: forward outer focus events to panes

refs #1337

* fix: preserve ordered focus forwarding

refs #1337

---------

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-14 01:06:11 +03:00
Ogulcan Celik 6e85ff07f1 docs: explain modified-arrow shell bindings
refs #1370
2026-07-13 17:11:24 +03:00
Ogulcan Celik 2cee801ea8 docs: streamline configuration guide 2026-07-13 15:34:30 +03:00