aboutsummaryrefslogtreecommitdiff
path: root/src/workspace
AgeCommit message (Collapse)Author
2026-09-01refactor: render the shell in the client (#3487)Can Celik
* feat: add opt-in client-rendered shell * feat: add client-owned shell mouse controls * feat: complete client-owned shell chrome * feat: add client-owned shell settings and notifications * feat: run client shell custom commands * feat: render popup terminals in client shell * feat: add client-owned scrollback and copy mode * fix: preserve client worktree trust defaults * feat: render startup diagnostics in client shell * feat: render onboarding in client shell * feat: render product announcements in client shell * feat: render release notes in client shell * feat: render mobile switcher in client shell * feat: render kitty graphics in client shell * fix: preserve client shell lifecycle coherence * refactor: route client shell commands through endpoint connections * refactor: make the client-rendered shell the default * refactor: remove monolithic launch mode * refactor: complete client-rendered shell cutover * perf: retain client pane surface updates * perf: scale retained pane surface updates * perf: remove remote pane input latency * test: make client shell checks platform-independent * fix: prevent client timer starvation * test: fix client shell platform gates * test: accept retained surfaces in cross-area checks * test: make client mode assertions platform-neutral * fix: badge only outdated integrations
2026-08-30fix: reject oversized git ref files in workspace status reads (#3373)caner-akca
* fix: reject oversized git ref files in workspace status reads refs #3343 * fix: treat oversized loose refs as unavailable instead of absent refs #3343 * fix: classify git ref read errors instead of probing path existence A loose ref behind a metadata or I/O error (for example an unsearchable refs/heads directory) previously read as absent, because Path::exists() also returns false on metadata errors, letting a stale same-name packed-refs OID enter the workspace status fingerprint. The reader now classifies the open error itself: NotFound and NotADirectory mean the loose ref is absent (packed-refs fallback stays legitimate), every other error marks the ref unavailable with no fallback. This also removes the racy second existence probe. refs #3343 * fix: reject empty loose git refs refs #3343 * fix: reject dangling loose git refs refs #3343 * fix: reject dangling git refs with invalid target paths refs #3343
2026-08-12perf: avoid repeated Git config reads (#2688)JJ Liebig
refs #2643 Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-08-11fix: derive repo name for embedded bare layouts (#2660)akbash
refs #2657 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-08-05fix(layout): return focus to the pane a split was opened from (#2266)Jon Kinney
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-03fix: propagate host color scheme to pane apps (#2214)Can Celik
refs #714
2026-07-28perf: skip rendering hidden pty updatesOgulcan Celik
2026-07-28fix: preserve linked worktree workspace labelsOgulcan Celik
2026-07-28perf: replace agent spinners with static status marksOgulcan Celik
2026-07-25perf: eliminate repeated workspace git discovery (#1842)Can Celik
* 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-22refactor: centralize new terminal cwd selectionOgulcan Celik
replaces contributions from Pitchfork-and-Torch
2026-07-20feat: add plugin-driven agent views and startup hooksOgulcan Celik
2026-07-16fix: follow foreground process group leader cwdOgulcan Celik
refs #1472
2026-07-16fix(windows): suppress noninteractive process windowsOgulcan Celik
refs #1468
2026-07-15feat: add floating popup panesOgulcan Celik
refs #1125
2026-07-13feat: add configurable sidebar metadata tokensOgulcan Celik
2026-07-10fix: follow foreground cwd for new terminalsPitchfork-and-Torch
refs #1245
2026-07-04refactor: route pane layout tui actions through runtime wrappersOgulcan Celik
2026-06-17feat: sort agent panel by priorityOgulcan Celik
refs #318
2026-06-15fix: keep auto tab labels compactOgulcan Celik
2026-06-14fix: preserve tab identity across restored sessionsOgulcan Celik
2026-06-14feat: add plugin v1 systemOgulcan Celik
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-13feat: add pane move api and cliOgulcan Celik
refs #299
2026-06-12fix: stabilize public pane and tab idsOgulcan Celik
refs #569
2026-06-07fix: support worktree actions from bare reposOgulcan Celik
refs #497
2026-06-05feat: add pane navigation controlsOgulcan Celik
refs #421 refs #330 related discussions: https://github.com/ogulcancelik/herdr/discussions/422 https://github.com/ogulcancelik/herdr/discussions/438 https://github.com/ogulcancelik/herdr/discussions/442
2026-06-02fix: resolve git branch names in reftable repos (#423)Lane
* fix: resolve git branch names in reftable repos refs #384 * fix: limit git plumbing to reftable refs refs #384 --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-05-30perf: reduce sidebar git polling overheadOgulcan Celik
refs #353
2026-05-30fix: use login shells for macos panesOgulcan Celik
refs #350
2026-05-29feat: expose foreground cwd in pane infoOgulcan Celik
refs #345
2026-05-26feat: add pane metadata reportingOgulcan Celik
refs #36
2026-05-22feat: add git worktree workspace managementOgulcan Celik
refs #137
2026-05-21refactor: separate server client boundariesOgulcan Celik
2026-05-20feat: add configurable default shellOgulcan Celik
refs #196
2026-05-19fix: show agent names in sidebarOgulcan Celik
refs #145
2026-05-17refactor: extract terminal state and runtime from panesOgulcan Celik
2026-05-17feat: add agent start for server-owned terminalsOgulcan Celik
2026-05-17feat: add terminal identity and agent cli facadeOgulcan Celik
2026-05-16feat: add hook-owned custom agent status labelsOgulcan Celik
2026-05-11fix: stabilize integration agent state reportsOgulcan Celik
2026-04-21feat: add persistent server-client sessionsCan Celik
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