Commit Graph

26 Commits

Author SHA1 Message Date
Ogulcan Celik 5cfe5e5e73 feat: add configurable sidebar metadata tokens 2026-07-13 03:30: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 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 dcfc45b45d fix: preserve claude session rotations
refs #620
2026-06-15 02:13:30 +03:00
Ogulcan Celik fbd20ad6e4 feat: add plugin v1 system
Add manifest-driven plugin actions, event hooks, pane entrypoints, link handlers, and host APIs.

Support plugin link, GitHub install, build commands, installed plugin registry, pane movement, runtime context, and plugin docs.
2026-06-14 03:47:07 +03:00
Ogulcan Celik 36a1b7f864 feat: distribute agent detection manifests 2026-06-10 15:33:45 +03:00
Ogulcan Celik ee51c5e5fb feat: use pty-first agent detection 2026-06-09 04:26:19 +03:00
Ogulcan Celik 3c2b46d24a feat: add native windows beta support 2026-06-07 16:29:44 +03:00
Ogulcan Celik 295b09ca25 feat: make claude codex opencode hooks session-only 2026-06-02 21:25:32 +03:00
Ogulcan Celik fc4e1bbf6b perf: reduce sidebar git polling overhead
refs #353
2026-05-30 23:58:34 +03:00
Ogulcan Celik 3750e0bae2 feat: add pane metadata reporting
refs #36
2026-05-26 17:10:28 +03:00
Ogulcan Celik db67e9d74f feat: restore agent sessions
refs #233
2026-05-23 21:37:05 +03:00
Ogulcan Celik 062259ba3e fix: arbitrate stale agent state evidence
refs #249
2026-05-22 19:55:07 +03:00
Ogulcan Celik 0148c1379b feat: add git worktree workspace management
refs #137
2026-05-22 02:23:35 +03:00
Ogulcan Celik 8d4cc05be0 feat: add homebrew update handling
refs #127
2026-05-17 00:18:14 +03:00
Ogulcan Celik 72770305d3 feat: add hook-owned custom agent status labels 2026-05-16 02:26:14 +03:00
Ogulcan Celik 55cdf2e8f8 fix: stabilize integration agent state reports 2026-05-11 16:13:17 +03:00
Ogulcan Celik 819a71ea7a fix: refresh git status off the main loop
fixes #85
2026-05-09 21:57:26 +03:00
Can Celik 3397e1ce29 feat: add persistent server-client sessions
Make herdr persistent by default.

   Launching herdr now starts or reattaches to a background session
   server. Clients can detach and reattach while panes and agent
   processes keep running. Session mode now supports multi-client attach,
   auto-detect startup, and a thin-client/headless-server split.

   This also refactors the large app, ui, input, pane, config,
   workspace, and persistence modules into smaller focused submodules,
   while preserving behavior and colocating tests with the code they
   exercise.

   Upgrade notes:
   - persistence mode is now the default
   - in-app quit detaches the current client instead of stopping the server
   - use `herdr server stop` to stop the background session
   - use `--no-session` for the old single-process behavior
   - default socket paths now live under the config directory
2026-04-21 16:30:04 +03:00
Ogulcan Celik 0b831c8627 feat: allow hook-reported custom agent labels 2026-04-16 22:17:09 +03:00
Ogulcan Celik 4a3b8f2fcf fix: forward pane osc 52 clipboard writes 2026-04-10 14:32:07 +03:00
Othavio Quiliao 6c62dba44e fix: forward OSC 52 clipboard writes from pane children
herdr embeds `libghostty-vt` as a headless terminal emulator per pane,
and its readonly stream handler silently drops `.clipboard_contents`
actions. As a result, any child process that writes OSC 52 to copy to
the system clipboard (for example Amp, which enables mouse reporting
and handles selection internally) has its sequence swallowed before it
can reach the host terminal — the user sees the child's "copied" toast
but the system clipboard is never updated.

This change adds an `Osc52Forwarder` that observes raw PTY bytes in
`process_pty_bytes`, reconstructs completed `ESC ] 52 ; (c|) ; <base64>
(BEL|ST)` sequences (write/clear only — queries are dropped since herdr
has no path to reply to the child), and returns them through the
existing `ProcessBytesResult`. The reader task forwards the bytes to
the main loop via a new `AppEvent::ClipboardWrite`, which is written
to stdout from `handle_internal_event`. Routing through the main loop
keeps stdout writes serialized with `terminal.draw` and the other
existing host-terminal emitters, so the new forwarder does not race
with rendering.

Existing herdr-native selection (mouse drag in panes without mouse
reporting) is unchanged and still writes through `selection::write_osc52`.
2026-04-10 14:32:07 +03:00
Can Celik ca4270b31f feat: add authoritative pi hook integration 2026-04-01 19:32:26 +03:00
Ogulcan Celik f8c4d6a5f1 feat: add per-agent sound overrides 2026-03-28 00:32:35 +03:00
Ogulcan Celik a57b97285c initial release
terminal workspace manager for AI coding agents.
single rust binary, runs inside your existing terminal.
workspaces, tiled panes, intelligent agent state detection.

https://herdr.dev
2026-03-27 21:37:05 +03:00