Skip to content

Releases: xinghelee/Berth

Berth 1.9.6

Choose a tag to compare

@xinghelee xinghelee released this 12 Sep 17:01

更新内容

  • 侧栏高亮跟随当前终端:点击顶部终端标签、切换分屏焦点、关闭标签或分屏、恢复工作空间后,侧栏主机列表的选中项都会同步到当前会话对应的主机;切到本地 Shell 时清空远端主机选中。此前只有从侧栏点主机才会更新,直接点标签时两处显示会不一致。

感谢 @realDGD 贡献此修复(PR #31)。

macOS 15+,Universal(Apple Silicon / Intel),Developer ID 签名并通过 Apple 公证。

Changes

  • Sidebar selection follows the active terminal: clicking a terminal tab, moving focus between split panes, closing a tab or pane, or restoring a workspace now updates the highlighted host in the sidebar to match the current session; switching to a local shell clears the remote host selection. Previously the sidebar only updated when a host was clicked there, so the two could disagree after clicking a tab directly.

Thanks to @realDGD for the fix (PR #31).

Requires macOS 15 or later. Universal binary for Apple Silicon and Intel, Developer ID signed and Apple notarized.

Berth 1.9.5

Choose a tag to compare

@xinghelee xinghelee released this 10 Sep 14:17

更新内容

  • Touch ID 门禁不再反复弹(issue #29):同一主机本次运行内验证一次即可,断线重连、自动重连、右键「新建独立连接」都不再要求 Touch ID;有会话连着就一直有效,全部断开后空闲 15 分钟失效;更换密钥、跳板机或用户名后重新验证;退出 Berth 即清空。
  • 安全加固(远端服务器一律视为敌对):
    • 已知主机出示未记录过的密钥类型时按「密钥变更」级别警告并显示已记录指纹,不再当首次连接;证书形式的主机密钥一律拒绝。
    • 认证失败(密码/密钥被拒)不再自动重连,仪表盘也停止对该主机重试,避免触发 fail2ban / 账号锁定。
    • AI 自动执行改为白名单:只放行只读诊断命令,nginx -s stoprpm -eroute addip netns exec …curl … | sh 等一律先确认;命令输出在落盘和送模型前打码私钥、token、口令哈希;对话历史文件收紧为仅本人可读,删主机时一并删除。
    • SFTP「本地编辑」固定用系统文本编辑器打开,Berth 写出的文件带 quarantine 标记;预览与本地编辑改用有上限的分块读取,服务器谎报文件大小不再导致崩溃或死循环。
    • 删除主机时连带删除代理密码;验收 harness 只存在于 Debug 构建。
  • SFTP 下载改为原子提交:先写入同目录的隐藏临时文件,传输完整成功才替换到目标位置;断网、取消或退出不会留下半截文件,也不会破坏已有同名文件;目标目录已存在时在传输开始前直接拒绝;exFAT / 网络卷上同样可用。
  • iOS:首次连接改为弹指纹确认,与 Mac 一致;拒绝远端读取剪贴板;终端链接只放行 http / https / mailto。

感谢 @realDGD 贡献 SFTP 原子下载(PR #28)并提出 Touch ID 次数问题(issue #29)。

macOS 15+,Universal(Apple Silicon / Intel),Developer ID 签名并通过 Apple 公证。

Changes

  • Fewer Touch ID prompts (issue #29): one verification per host per launch. Reconnects, auto-reconnects and right-click "new independent connection" no longer prompt; the grant stays valid while any session is connected and expires after 15 idle minutes once all sessions are closed. Changing the key, jump host or user name verifies again. Grants are cleared when Berth quits.
  • Security hardening (remote servers are treated as hostile):
    • A known host presenting an unrecorded key type is now treated as a key change with the recorded fingerprints shown, not as a first connection; certificate-style host keys are rejected.
    • Credential rejection no longer triggers auto-reconnect, and the dashboard stops retrying that host, so a rotated password cannot trip fail2ban or account lockout.
    • AI auto-run switched to an allow-list of read-only diagnostics; nginx -s stop, rpm -e, route add, ip netns exec …, curl … | sh and similar always ask first. Command output is redacted for private keys, tokens and password hashes before it is stored or sent to the model; chat history files are owner-only and removed with the host.
    • SFTP "edit locally" always opens the system text editor and files written by Berth carry the quarantine flag; preview and local editing use bounded chunked reads, so a server lying about file sizes can no longer crash or hang the app.
    • Deleting a host also deletes its proxy password; acceptance harnesses are compiled only into Debug builds.
  • Atomic SFTP downloads: data is written to a hidden temporary file next to the destination and only swapped in after the transfer completes. Disconnects, cancellation or quitting leave no partial files and never damage an existing file of the same name; an existing destination folder is refused before the transfer starts. Works on exFAT and network volumes too.
  • iOS: first connections now show the fingerprint prompt like the Mac app; remote clipboard reads are denied; terminal links are limited to http / https / mailto.

Thanks to @realDGD for the atomic download work (PR #28) and for raising the Touch ID issue (#29).

Requires macOS 15 or later. Universal binary for Apple Silicon and Intel, Developer ID signed and Apple notarized.

Berth 1.9.4

Choose a tag to compare

@xinghelee xinghelee released this 09 Sep 12:20

更新内容

  • SFTP 面板拖文件/目录到 Finder 的下载现在可以取消:传输列表新增 × 按钮,Finder 进度条里的取消也会同步中止下载;取消不再把面板标成失败。
  • 拖拽下载的临时副本改为独立 staging 目录管理:失败或取消立即清理;交付给 Finder 后按实际大小估算保留窗口(最少 30 分钟,大文件按 2 MiB/s 延长),避免 Finder 还在复制时源文件被提前删除。
  • 应用启动和新建拖拽时自动回收崩溃或异常退出遗留的临时数据;无法确认归属的目录一律不动,不跨越符号链接。
  • 日志中的远端文件名会转义换行与控制字符,避免伪造日志行。

感谢 @realDGD 贡献本次改动(PR #26)。

macOS 15+,Universal(Apple Silicon / Intel),Developer ID 签名并通过 Apple 公证。

Changes

  • Finder drag-out downloads from the SFTP panel can now be cancelled: an × button in the transfer list, and cancelling from Finder's progress also stops the download. Cancelling no longer marks the panel as failed.
  • Drag-out temporary copies now live in isolated staging directories: removed immediately on failure or cancellation; after hand-off to Finder they are retained for a size-based window (at least 30 minutes, extended at 2 MiB/s for large payloads) so Finder never loses the source mid-copy.
  • Stale staging data left by crashes is reclaimed on launch and on new drags; directories whose ownership cannot be verified are left untouched and symlinks are never followed.
  • Remote filenames are escaped in diagnostic logs to prevent forged log lines.

Thanks to @realDGD for contributing this change (PR #26).

Requires macOS 15 or later. Universal binary for Apple Silicon and Intel, Developer ID signed and Apple notarized.

Berth 1.9.3

Choose a tag to compare

@xinghelee xinghelee released this 08 Sep 14:44

更新内容

  • 加快 SFTP 文件和目录下载,限制并发请求数量,改善进度显示及取消时的资源清理。
  • 修复 SSH 异常断开时终端标签页可能被误关的问题,保留终端历史并支持重连。
  • 修复 CentOS 7 等旧系统的 locale 警告:不再强制注入 C.UTF-8,仅在需要时选择服务器支持的 UTF-8 字符环境。
  • 修复目录下载静默遗漏不安全文件名的问题,现在会明确报错。

macOS 15+,Universal(Apple Silicon / Intel),Developer ID 签名并通过 Apple 公证。

Changes

  • Faster SFTP file and directory downloads with bounded concurrency, improved progress, and cancellation cleanup.
  • Preserve terminal tabs and scrollback after unexpected SSH disconnects so sessions can reconnect.
  • Avoid locale warnings on older servers such as CentOS 7 by detecting supported UTF-8 locales instead of forcing C.UTF-8.
  • Report unsafe remote filenames instead of silently omitting them from directory downloads.

Requires macOS 15 or later. Universal binary for Apple Silicon and Intel, Developer ID signed and Apple notarized.

Berth 1.9.2

Choose a tag to compare

@xinghelee xinghelee released this 28 Aug 06:46

新功能

  • 终端字体可选:设置 → 终端新增「字体」下拉,可在系统已装等宽字体中任选(默认仍为系统等宽 SF Mono),改动即时应用到所有已开会话。选择已安装的 Nerd 字体(如 JetBrainsMono Nerd Font)即可正常显示 powerline / Nerd Font 图标——此前这些私用区字符因字体写死而无法渲染。

New Features

  • Terminal font picker: Settings → Terminal gains a Font picker listing all installed monospaced fonts (default remains the system monospaced SF Mono); changes apply instantly to every open session. Pick an installed Nerd Font (e.g. JetBrainsMono Nerd Font) to render powerline / Nerd Font icons — these private-use-area glyphs previously could not display because the font family was hardcoded.

Berth 1.9.1

Choose a tag to compare

@xinghelee xinghelee released this 28 Aug 00:53

改进

  • ssh_config Include 支持:从 ~/.ssh/config 导入主机时,现在会展开顶层的常见 Include 指令(~/.ssh/conf.d/*.conf 通配与绝对路径单文件),被包含文件中的主机会出现在导入列表并正确应用 Host * 兜底配置;不支持的 Include 写法(递归、Host/Match 块内、相对路径等)继续在导入引导中提示。感谢 @realDGD 的贡献(#21)!

Improvements

  • ssh_config Include support: importing hosts from ~/.ssh/config now expands common top-level Include directives (~/.ssh/conf.d/*.conf globs and single absolute-path files). Hosts defined in included files show up in the import list with Host * fallback options applied correctly; unsupported Include forms (recursive, inside Host/Match blocks, relative paths, …) are still reported in the import guide. Thanks to @realDGD for the contribution (#21)!

Berth 1.9.0

Choose a tag to compare

@xinghelee xinghelee released this 27 Aug 02:52

新功能

  • AI 对话历史:对话自动保存(按主机归档),重开应用或重连主机后接着聊,模型带完整上下文;面板新增「新对话」与「历史」入口,可回看、切换、删除;单次对话的命令轮数上限从固定 12 改为可配置(设置 → AI 助手,默认 30)。
  • 全新设计检查器栏:右侧五个面板(AI / SFTP / 服务器信息 / Docker / 片段)合并为一条互斥的检查器栏——标题栏一个圆形开关整体展开收起,栏内顶部等分分段条(液态玻璃选中态)切换面板;本地 Shell 会话下 SSH 专属面板置灰而不隐藏。原有快捷键(⌘⇧A/⌘⇧F/⌘I/⌘⇧S)与 ⌘P 命令全部保留直达。
  • 工作空间:侧栏主机可按工作空间分组(Arc 式):底部「名字 + 圆点」切换条、触控板横扫跟手换页;主机右键「移到工作空间」、新建主机自动归入当前空间;空间实体随 iCloud 同步。没有工作空间时保持原扁平列表,零打扰。
  • 侧栏底部精简:一行三段——左空间名、中居中圆点指示器、右「更多」按钮(弹窗收纳 仪表盘/配色/设置);密钥管理与隐私模式开关移入 ⌘P 命令面板。

New Features

  • AI chat history: conversations persist per host and resume automatically with full model context after relaunch or reconnect; the panel gains New Chat and History (browse / switch / delete). The per-message command-round cap is now configurable (Settings → AI, default 30, was a hardcoded 12).
  • Xcode-style inspector rail: the five side panels (AI / SFTP / server info / Docker / snippets) collapse into one mutually-exclusive rail — a single circular title-bar toggle expands it, and an equal-width segmented strip (liquid-glass selection) switches panels; SSH-only tabs are disabled, not hidden, for local shell sessions. All shortcuts (⌘⇧A/⌘⇧F/⌘I/⌘⇧S) and ⌘P commands still jump straight to their panel.
  • Workspaces: group sidebar hosts into Arc-style workspaces — a name + dots switcher at the bottom, trackpad swipe to page between them, right-click a host to move it, new hosts join the current workspace, and workspaces sync via iCloud. With no workspaces the sidebar stays the flat list it was.
  • Slimmer sidebar bottom bar: one row — workspace name left, centered dot indicator, and a More button (dashboard / theme / settings popover) right; key management and privacy mode moved into the ⌘P command palette.

Berth 1.8.6 — 远程文件编辑器可选、终端目录跳转、vim 中文乱码修复

Choose a tag to compare

@xinghelee xinghelee released this 24 Aug 07:53

修复与改进

  • 远端文件编辑可指定外部编辑器:「设置 → 终端 → 远程文件编辑」新增编辑器选择,SFTP 面板双击文件不再固定用系统默认关联应用打开。
  • 一键跳转到终端当前目录:SFTP 面板工具栏新增常驻按钮;未启用命令集成(OSC 7)时会现场探测远端 shell 的工作目录,不再是点了没反应。
  • 修复远程 vim 中文乱码:PTY 会话显式转发 LANG=C.UTF-8,避免远端登录环境是 C/POSIX 时 vim 把 UTF-8 中文渲染成乱码。
  • ⌘W 关闭确认支持回车(issue #18):标签页/分屏关闭确认弹窗现在按 Enter 就能确认,不用再点鼠标。
  • Docker 面板支持 Podman(社区贡献,感谢 @SeanDragon):自动探测 Docker 或 Podman 运行时,兼容两者的容器 JSON 格式,面板标注实际使用的运行时。

Fixes & Improvements

  • Configurable editor for remote file editing: Settings → Terminal → "远程文件编辑" now lets you pick which app opens a file downloaded from the SFTP panel, instead of always deferring to the OS default.
  • One-click jump to the terminal's current directory: a persistent SFTP toolbar button; when OSC 7 command integration isn't enabled it probes the remote shell's cwd on click instead of silently doing nothing.
  • Fixed garbled CJK text in remote vim: PTY sessions now forward LANG=C.UTF-8 explicitly, so a bare C/POSIX login locale on the remote no longer breaks UTF-8 rendering.
  • Enter now confirms Cmd+W's close dialog (issue #18): both the tab-close and pane-close confirmations respond to Return, no mouse needed.
  • Docker panel now supports Podman (community contribution, thanks @SeanDragon): auto-detects Docker or Podman, parses both runtimes' container JSON shapes, and labels the panel with whichever is active.

Berth 1.8.5 — macOS 15 标签条修复与 Liquid Glass 顶栏

Choose a tag to compare

@xinghelee xinghelee released this 18 Aug 02:10

修复与改进

  • macOS 15 标签条消失修复(用户反馈):收放侧栏时右上角闪现 » 溢出按钮;标签较多时整条标签栏(含右侧按钮组)会折进 » 且再也不恢复。根因是标题栏重建后工具条 item 未被重新钉扎,现已按 item 身份持续补钉,并在侧栏收放后从窗口级强制修复(对较慢的 Intel 机器多补一轮)。即使 » 仍短暂出现,点开后也是完整的标签列表(当前标签打勾),点击即可切换。
  • macOS 26+ 原生 Liquid Glass 顶栏:右上面板按钮组交还系统玻璃胶囊;标签条整体置于浅色轨道之上,选中标签为玻璃胶囊、未选中标签去除描边更安静;macOS 15 观感不变。
  • 侧栏回归与打磨:恢复主机行的发行版/OS 徽章列与连接状态竖条(连接中带辉光,按 连接态 > 可达性 > 标签色 着色);搜索框加大一号,与主机行比例协调。

Fixes & Improvements

  • macOS 15 tab bar disappearing (user report): toggling the sidebar flashed an overflow chevron (») in the top-right corner, and with many tabs the whole tab strip (including the panel buttons) folded into it permanently. The toolbar item is now repinned whenever the titlebar is rebuilt, with a window-level pass after sidebar toggles (an extra late pass for slower Intel Macs). If the chevron ever appears transiently, its menu now lists all tabs (current one checked) so switching still works.
  • Native Liquid Glass toolbar on macOS 26+: the panel button cluster rides the system glass capsule; the tab strip sits on a subtle track with a glass capsule for the selected tab and quieter borderless inactive tabs. The macOS 15 look is unchanged.
  • Sidebar polish: restored the distro/OS badge column and the connection status bar on host rows (glow while connected; colored by connection > reachability > tag), and enlarged the search field to match the row weight.

Berth 1.8.4 — SFTP 文件夹删除与下载

Choose a tag to compare

@xinghelee xinghelee released this 17 Aug 11:19

修复与改进

  • SFTP 递归删除文件夹:修复删除非空文件夹直接报错的问题(此前只对空目录生效)。现在会先扫描目录树,依次删除文件与符号链接(删除链接自身,不影响目标),再按最深优先移除目录,并显示删除进度;确认框会明示「文件夹及其中所有内容将被删除」。
  • SFTP 文件夹下载入口:目录右键菜单新增「下载…」,与拖到 Finder 走同一条递归下载路径;文件夹拖出下载在真实服务器上完整验证(内容逐字节一致)。

Fixes & Improvements

  • SFTP recursive folder delete: deleting a non-empty folder no longer fails (it previously only worked on empty directories). The tree is scanned first, files and symlinks are removed (the link itself, never its target), then directories deepest-first, with progress; the confirmation dialog now spells out that everything inside will be deleted.
  • SFTP folder download entry point: the context menu's Download… now appears for directories too, sharing the same recursive download path as dragging to Finder; folder drag-out download verified byte-identical against a real server.