Commit Graph
14 Commits
Author SHA1 Message Date
gitea-adminandClaude Fable 5.1 3f11734ce4 Decode streamed update output at character boundaries
The update popup kept the last 64 KiB of raw bytes and decoded the
whole buffer on every refresh. Cutting the buffer, or reading a chunk
that ended inside a multi-byte sequence, made the UTF-8 decode fail and
sent everything through the GB18030 fallback, garbling the display.

Clip the retained tail at a UTF-8 boundary and decode still-growing
streams with an incremental decoder that holds back an incomplete
trailing sequence instead of treating it as corruption.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 03:00:09 +00:00
gitea-adminandClaude Fable 5.1 ebbd5821fd Harden Hub startup and display-name handling
- Display names starting with '-' were parsed by tmux rename-window as
  flags. The alias was persisted before tmux rejected it, so every later
  start/refresh/open failed in refresh_labels until aliases.json was
  edited by hand. Guard rename-window with '--', apply the name before
  persisting it, and roll back the in-memory table on failure.
- Start the Hub tmux server with -f /dev/null by default. Reading the
  user's ~/.tmux.conf let theme status-formats replace the Sessions bar
  and root-table bindings leak into Herdr; HERDR_HUB_TMUX_CONFIG still
  opts into a custom file.
- An unreadable aliases.json blocked start/refresh/open/choose. Degrade
  to default names with a warning (stderr, or the popup message) and
  leave the file untouched for `doctor` to report.
- `doctor` crashed with a traceback when a *_BIN override pointed at a
  missing executable; report it as a failure instead.
- Refuse to run inside another tmux server before discovery and server
  creation, so no unattached Hub is left behind.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 02:58:45 +00:00
gitea-adminandClaude Fable 5.1 6b906de476 Fix retry crash for unregistered remotes in the Sessions popup
Opening a window whose target was removed from the registry (its tab
stays open by design) and failing landed in the action menu with a
"重试连接" row that indexed self.entries directly and raised KeyError,
killing the popup with a traceback.

Only offer the retry action for registered targets, degrade a stale
retry row to a message, and keep the popup alive when a handler raises
anything unexpected instead of dying with a traceback.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 02:58:45 +00:00
gitea-admin 6f933e1c80 Add Herdr update and live handoff menu actions
The Ctrl+A h command menu gains two host-scoped actions: a plain
`herdr update` that streams updater output into the popup, and an
experimental update-and-hot-restart flow that verifies a live server
handoff and reconnects the originating Hub tab once the popup closes.

Remote updates use the remote host's own proxy settings. A standalone
helper reads literal proxy assignments from shell profiles and running
Clash/Mihomo listeners without executing startup files; Windows reads
process, user and machine proxy variables through PowerShell.
2026-10-03 02:51:44 +00:00
gitea-admin a5e8e32f1e Add shortcut help popup 2026-09-18 14:32:58 +00:00
gitea-admin 6e420b2db5 Add Herdr agent fork command menu 2026-09-18 09:07:04 +00:00
gitea-admin d6697d46f8 Keep session manager open on launch failure 2026-09-12 18:25:39 +00:00
gitea-admin e5c5c3015f Document Termux copy workflow 2026-09-09 15:57:02 +00:00
gitea-admin 36bee161cb Simplify session manager interaction model 2026-09-03 14:42:25 +00:00
gitea-admin 58e68b26de Allow removing unreachable remotes from session manager 2026-09-03 14:10:01 +00:00
gitea-admin b12f2c4986 Allow deleting stopped sessions with stale tabs 2026-09-03 14:05:24 +00:00
gitea-admin c65361c009 Fix delete shortcut handling in session manager 2026-09-03 13:54:06 +00:00
gitea-admin 02d83a04bd Improve remote session management and Windows support 2026-09-03 12:58:24 +00:00
gitea-admin 6c2c9672e1 Initial release of herdr session switcher 2026-09-02 01:33:38 +00:00