Commit Graph
79 Commits
Author SHA1 Message Date
Can Celik 1777e9bba3 feat(graphics): add direct pane frame streaming (#2523)
* feat(graphics): add direct pane frame streaming

* feat(graphics): expose pane visibility

* test(graphics): preserve legacy terminal image output

* fix(graphics): harden streaming lifecycle

* fix(input): preserve mouse releases outside panes
2026-08-09 02:04:39 +03:00
David Heinemeier Hansson 36a8d36a72 feat: make outer pane borders configurable (#2535) 2026-08-09 01:37:57 +03:00
Can Celik 10974c822d feat(input): add per-pane right-click routing (#2504) 2026-08-08 16:26:47 +03:00
Jon KinneyandCan Celik 09cdd88d0a fix(layout): return focus to the pane a split was opened from (#2266)
Closing a focused pane handed focus to the next pane in tree order.
For a pane opened beside another one -- a plugin split, a file viewer,
any transient tool pane -- that is rarely where the user was: it lands
on some unrelated neighbour rather than the pane that opened it.

Track the pane focus came from in TileLayout and prefer it when the
focused pane closes, falling back to tree order when there is no
history, when it points at the pane being closed, or when it points at
a pane that has since gone away. The history lives in the layout, so it
can only ever name a pane in the same tab.

A one-slot history is only sound if internal focus excursions never
write it, so the tree edits that used to bounce focus around now go
through target-taking primitives instead. close_pane removes a
background pane directly, so detach_pane and take_pane_for_move stop
focus-close-refocusing. split_pane splits a target without moving
focus: the runtime split path only focuses the new pane once the spawn
succeeds, which makes a failed split a pure rollback, and the targeted
and unfocused workspace split paths stop fabricating history.
insert_pane_near now takes the focus intent, so an unfocused pane move
leaves the target tab's history alone. The layout-level focused-split
helpers become test-only; production splits all flow through the
target-taking path.

Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-08-05 00:35:15 +03:00
Can Celik adb50cba9b fix(input): preserve shift-tab in pane automation (#2259)
refs #1561
2026-08-04 05:19:40 +03:00
Can Celik 10eb0bc744 fix: propagate host color scheme to pane apps (#2214)
refs #714
2026-08-03 02:05:27 +03:00
Can CelikandJonathan Liebig 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
Ogulcan Celik bc1c052d15 fix: read alternate-screen agent history 2026-07-31 16:22:04 +03:00
Ogulcan Celik b44b5b1013 chore: finish repository organization migration 2026-07-30 02:45:05 +03:00
Ogulcan Celik e16d7d8c07 fix: preserve linked worktree workspace labels 2026-07-28 15:34:13 +03:00
Ogulcan Celik b499e611b6 fix: resolve relative plugin commands from plugin root
refs #1949
2026-07-28 02:19:33 +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
Ogulcan Celik bb29eedb72 fix: delay agent prompt submission
refs #1878
2026-07-27 00:12:25 +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
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 e7fc85bfdb fix: preserve kitty printable key releases
refs #1746
2026-07-23 03:47:44 +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 69d07dba84 fix: make plugin state global across sessions
refs #1174
2026-07-20 23:04:15 +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 e0758c3211 feat: harden named agent cli workflows
refs #1525
2026-07-17 23:59:56 +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 5cfe5e5e73 feat: add configurable sidebar metadata tokens 2026-07-13 03:30:13 +03:00
Pitchfork-and-Torch 4f7fcc48d1 fix: follow foreground cwd for new terminals
refs #1245
2026-07-10 15:06:54 +03:00
Ogulcan Celik c8850a2e3e feat: add copy mode search and tmux word motions
refs #1230
2026-07-10 04:22:10 +03:00
Vladyslav KovalovandVlad Kovalov 010afe5305 fix: refresh tab bar after plugin-driven tab rename (#1179)
refs #1111

Co-authored-by: Vlad Kovalov <kovalov@users.noreply.github.com>
2026-07-09 01:15:05 +03:00
Ogulcan Celik 0a684b4130 fix: clear done status on repeated pane focus 2026-07-07 21:13:34 +03:00
Ogulcan Celik d190c1f55e fix: send shifted punctuation as text in kitty mode
refs #1105
2026-07-07 16:25:36 +03:00
Ogulcan CelikandRobin Gagnon 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
akbashandakbash-bot fbc3f0845a fix: focus parent after worktree removal (#1075)
refs #1004

Co-authored-by: akbash-bot <akbash-bot@users.noreply.github.com>
2026-07-06 16:19:31 +03:00
Ogulcan Celik 15cab964f3 feat: emit layout update events for runtime layout changes 2026-07-04 16:51:10 +03:00
Ogulcan Celik cf3769feb9 feat: follow focused pane cwd for new workspaces
refs #919
2026-07-02 13:58:26 +03:00
Ogulcan Celik 48d58648ae fix: follow cached cwd for new tabs
refs #912
2026-07-02 02:20:40 +03:00
Ogulcan Celik 9150ed6268 feat: add session snapshot api 2026-06-29 21:36:48 +03:00
Ogulcan Celik 8b74fb8a12 feat: emit placement mutation events 2026-06-29 20:39:54 +03:00
Ogulcan Celik 97f78226bf fix: route tui modal mutations through api authority 2026-06-29 18:57:13 +03:00
Ogulcan Celik 1a4e94e57e refactor: route tui mutations through runtime authority 2026-06-29 18:09:25 +03:00
Ogulcan Celik 89ca3ba933 fix: check out existing branches for worktree create
refs #729
2026-06-22 00:51:00 +03:00
Ogulcan Celik 4421c0febb fix: add configurable pane gaps
refs #271
2026-06-21 14:03:59 +03:00
Ogulcan Celik 92a10fc044 fix: protect root agent restore sessions
refs #712
2026-06-21 02:42:39 +03:00
Ogulcan Celik 46a2b259a7 fix: defer api worktree operations
refs #686

refs #657

refs #662

refs https://github.com/ogulcancelik/herdr/discussions/687
2026-06-19 18:59:43 +03:00
Ogulcan Celik d74ba8ca9e fix: emit plugin lifecycle events from ui worktree flows
refs #662
2026-06-18 16:05:43 +03:00
Ogulcan Celik 2fe57a57a2 fix: stabilize flaky plugin capture tests and auto-trigger website deploy 2026-06-16 02:56:25 +03:00
Dillon MulroyandCan Celik 16b69b6faa fix: support key-combo syntax for API send keys (#613)
Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-06-15 18:23:24 +03:00
Ogulcan Celik 4ffd99c2ec fix: keep auto tab labels compact 2026-06-15 04:56:03 +03:00
Ogulcan Celik dcfc45b45d fix: preserve claude session rotations
refs #620
2026-06-15 02:13:30 +03:00