Commit Graph

178 Commits

Author SHA1 Message Date
Ogulcan Celik 8d190eddda chore: remove experiments from settings tui 2026-08-01 03:36:11 +03:00
Can Celik 02fe7d7659
feat: support bottom tab bar placement (#2118)
* feat: support bottom tab bar placement

* fix: preserve mouse cleanup under bottom mode bar

refs #2117
2026-07-31 18:15:55 +03:00
Ogulcan Celik bc1c052d15 fix: read alternate-screen agent history 2026-07-31 16:22:04 +03:00
Ogulcan Celik 7db744ab47 fix(sidebar): keep worktree groups packed 2026-07-31 15:40:20 +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 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
Season Saw a79b3d5580
fix: close workspace when api closes its last tab (#1899)
herdr tab close on a workspace's only tab returned tab_close_failed,
while the TUI close-tab action on the same tab closes the tab and
cascades to closing the workspace. Cascade in the API too, emitting
tab.closed then workspace.closed. When the cascade would close a whole
worktree group, return confirmation_required instead, matching
pane.close and the TUI prompt.

refs #1760
2026-07-27 02:25:29 +03:00
Can Celik 8843bbb0c4
fix: improve sidebar worktree hierarchy and reordering (#1873)
* fix: clarify sidebar worktree hierarchy

refs #1694

* feat: reorder worktree groups as a unit

refs #1694
2026-07-26 02:45:44 +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 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 7e821ba7a3 fix: respect OMP config directory override
refs #1696
2026-07-22 23:06:52 +03:00
Ogulcan Celik 0f161fac28 docs: add alternate-screen output fallback 2026-07-21 22:09:38 +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
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
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 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 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
Ogulcan Celik 5b91dae12f feat: configure sidebar entry gaps 2026-07-14 20:41:20 +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
Ogulcan Celik 5cfe5e5e73 feat: add configurable sidebar metadata tokens 2026-07-13 03:30:13 +03:00
Ogulcan Celik 7f3364a468 docs: add versioned config reference 2026-07-13 02:24:09 +03:00
Ogulcan Celik 3661d99c2e docs: add troubleshooting guide
refs #1116
2026-07-12 15:07:17 +03:00
Ogulcan Celik 4617456348 feat: add copy-on-select setting 2026-07-11 02:46:58 +03:00
Tony Solomonik 3b8aeee166
feat: add maki agent support (#1302)
* feat: add maki detection support

Maki always draws a one-line status bar at the bottom of the screen, so the manifest reads just that row: a braille spinner before the `[BUILD]`/`[PLAN]`/`[BASH]` mode label means working, the bare label means idle.

Blocked states come from the panels that replace the input box, the `Permission Required` dialog with its `y Allow`/`n Deny` hint rows and the `Plan complete` form. Maki emits no OSC title or progress, so these screen rules are the only evidence.

Also wires `maki` through process-name identification, per-agent sound overrides, and the website manifest catalog.

* docs: stage maki detection docs
2026-07-11 01:19:51 +03:00
Ogulcan Celik 66be0b655f fix: stop windows installer from rewriting config
refs #1162
2026-07-10 16:09:17 +03:00
Ogulcan Celik c8850a2e3e feat: add copy mode search and tmux word motions
refs #1230
2026-07-10 04:22:10 +03:00
Ogulcan Celik 0de503ccd9 docs: document windows config path 2026-07-10 01:44:49 +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 7a2c230064 docs: enforce localized release doc parity
refs #1151
2026-07-08 02:16:48 +03:00
Ogulcan Celik fb5a46a03c docs: finalize release docs 2026-07-07 19:17:15 +03:00
Ogulcan Celik 17e2b2b878 fix: honor prefix in copy mode
refs #681

Based on PR #1092 by @reobin.

Co-authored-by: Robin Gagnon <me@reobin.dev>
2026-07-07 01:20:13 +03:00
Ogulcan Celik 56edcbcba8 feat: expose pane scroll state 2026-07-06 23:06:00 +03:00