Commit Graph

731 Commits

Author SHA1 Message Date
Ogulcan Celik ecb296dd0b fix: avoid renders for passive mouse motion
refs #1865
2026-07-26 00:15:42 +03:00
Can Celik b01fc37e66 perf: avoid full pane renders for spinner animation (#1868) 2026-07-25 23:20:08 +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
Can Celik d4e0dd3d90 perf: eliminate repeated workspace git discovery (#1842)
* perf: eliminate repeated workspace git discovery

refs #1838

* fix: keep workspace labels current without extra redraws

refs #1838

* fix: retain discovered workspace git metadata

refs #1838
2026-07-25 04:26:55 +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
Ogulcan Celik 5f1957c27b fix: harden hermes lifecycle detection 2026-07-25 01:05: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 169a4fd90c fix: answer XTWINOPS size queries in panes
refs #835
2026-07-24 02:39:51 +03:00
Ogulcan Celik 58e812b238 fix: consume handled url click gestures
refs #1761
2026-07-24 02:10:47 +03:00
Ogulcan Celik 36de78dd4f fix: preserve kitty graphics during host repaints
refs #1628
2026-07-24 01:31:06 +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 a02c3a69bb refactor: centralize new terminal cwd selection
replaces contributions from Pitchfork-and-Torch
2026-07-22 22:41:01 +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 f23e3779dc refactor: clarify opencode event state mapping
replaces contributions from soar
2026-07-22 21:54:49 +03:00
Ogulcan Celik 73d17682ce refactor: simplify cursor session reporting
replaces contributions from udirom
2026-07-22 21:40:05 +03:00
Ogulcan Celik 08ca798518 refactor: simplify kimi lifecycle reporting
replaces contributions from wbxl2000
2026-07-22 20:00:54 +03:00
Ogulcan Celik d3b4d5b0e1 refactor: simplify qoder session reporting
replaces contributions from wayneleelwc
2026-07-22 19:36:40 +03:00
Ogulcan Celik 1d238bc9a3 refactor: replace pane mouse and clipboard internals
replaces contributions from othavi0
2026-07-22 18:59:01 +03:00
Ogulcan Celik ef85fa0c7e fix: keep reading while pty input is blocked
refs #1295
2026-07-22 04:00:28 +03:00
Ogulcan Celik 08640bb3dd fix: fall back to sh for remote path discovery
refs #1201
2026-07-22 03:12:13 +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 de94cf8330 fix: discover canonical mise remote installs
refs #1201
2026-07-21 15:29:13 +03:00
Ogulcan Celik 44f2211608 fix: use pi settled lifecycle event 2026-07-21 05:18:26 +03:00
Ogulcan Celik 69d07dba84 fix: make plugin state global across sessions
refs #1174
2026-07-20 23:04:15 +03:00
Ogulcan Celik d956a6b56d fix: show agent targets before options in help 2026-07-20 20:22:30 +03:00
Ogulcan Celik 6f7ef04e7d fix: bound stalled agent prompt waits 2026-07-20 15:22:26 +03:00
Ogulcan Celik 28b628d79d fix: report kimi questions as blocked 2026-07-20 15:18:03 +03:00
akbash 9450b168c7 fix: avoid rechecking cached pane cwd (#1616)
refs #1603

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-07-20 02:13:40 +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
akbash f76f895efe fix: preserve plugin command arguments (#1613) 2026-07-19 23:07:10 +03:00
Ogulcan Celik 08409d167d fix: show current workspace name in close confirmation
refs #1364
2026-07-19 22:11:31 +03:00
Ogulcan Celik a26a654351 feat: connected tree glyphs, workspace grouping, and search auto-select in navigator
refs #1611
2026-07-19 20:44:44 +03:00
Ogulcan Celik 01d371bf7a perf: cache windows foreground process snapshots
refs #1158
2026-07-19 17:50:28 +03:00
Ogulcan Celik b580103b95 fix: preserve terminal live follow through resize 2026-07-19 04:49:57 +03:00
Ogulcan Celik a51a15914a fix: support javascript integrations on windows
refs #1531
2026-07-18 23:56:20 +03:00
Ogulcan Celik 60c040057e fix: serialize opencode lifecycle reports
refs #1519
2026-07-18 23:54:14 +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 02a6e874f6 perf: batch contiguous terminal diff writes
refs #283
2026-07-18 03:56:51 +03:00
Ogulcan Celik c1f7b6f331 fix: preserve lone escape input boundaries
refs #541
2026-07-18 02:51:29 +03:00