功能导览

功能特性

应用能做什么:按使用场景分组的功能清单。

下面按使用场景分组列出已实现的能力,每一项都对应应用中的实际操作入口。

连接与终端

  • 多标签 SSH 终端:由 xterm.js 渲染,支持密码与 SSH 密钥认证、xterm-256color PTY 与窗口尺寸同步。
  • 连接健康状态:可配置的 SSH keepalive(间隔加重试次数);标签状态点由绿色变为黄色(connection-suspect),再变为红色(connection-closed);“重新连接”按钮复用同一个标签实例,单调递增的 session_id 可防止过期的后台任务污染状态。
  • Telnet:纯 TCP,内置 IAC 协商状态机(ECHO / SGA / TERMINAL-TYPE / NAWS);可选自动登录,默认关闭(明文协议)。
  • 串口(COM):枚举端口并显示带 VID:PID 的 USB 设备友好名称;可配置波特率、数据位、停止位、校验位与流控;包含波特率自动探测(逐个尝试各速率,并按“有多像终端文本”排序)。
  • 本地终端:将本地 shell 作为顶层标签或分栏面板打开,与远程标签并排使用。
  • SSH 隧道:本地端口转发规则按连接保存,可在侧边栏新增、编辑、删除、启动与停止;后端通过 tunnel-changed 事件同步状态。
  • 网络扫描:扫描子网中开放 SSH/Telnet 端口的主机,并可直接从结果创建连接。

文件与编辑

  • SFTP 文件管理:远程文件树,支持列目录 / 读取 / 写入 / 重命名 / 删除 / 创建目录、上传与下载;支持暂停与续传,并发出 transfer-progress 事件。
  • 传输队列:每个文件一行,显示已完成/总大小与实时速度;目录与拖放上传在 Rust 侧用 walkdir 一次性遍历,进度以 4 MiB 分块上报(单文件上传使用 64 KB 分块);取消上传会清理它已创建的部分远程文件,已完成的文件会保留,原本已存在的目标文件不会被删除。
  • 远程编辑器:内嵌 Monaco 编辑,以分栏面板或浮动窗口呈现;自动识别 UTF-8 / GBK 编码(encoding_rs)。
  • 十六进制与图片查看:二进制文件以十六进制转储查看,图片按 MIME 类型内联预览。
  • 网络文件工具:内置 FTP 服务器(PASV/EPSV)、HTTP/HTTPS 文件服务器(一键生成自签名证书)、TFTP 服务器,以及 FTP 客户端(无 TLS / 显式 / 隐式)与 TFTP 客户端。

运维面板

  • Docker 与主机分析:同一命令入口支持两类主机(DockerHostRef)——SSH 会话跳板机上的容器(通过 exec 通道执行 docker exec),或本地守护进程(直接启动 CLI 以避免引号问题);probe_local_docker 先尝试 docker 再尝试 podman,并区分“未安装”与“已安装但守护进程未运行”。功能包括容器列表(新建/删除/启动/停止)、一次性与流式日志、三层分析报告、容器文件浏览与进入容器 shell;另有 analyze_host 对服务器的操作系统/内核/架构/软件包/已安装工具进行只读分析,以及用于查询命令帮助的 command_help。
  • Kubernetes 与 Helm:K8s 模式跟随当前聚焦的终端选择主机(SSH 跳板机或本地 kubeconfig);context/namespace 选择器加搜索框,默认所有命名空间,命名空间标签按名称稳定着色。十种资源类型(pods/deployments/statefulsets/daemonsets/services/ingresses/jobs/cronjobs/configmaps/secrets)共用一套行模型;每行支持查看/编辑并应用 YAML、扩缩容、删除(应用内确认)、查看/流式日志(含 ANSI 颜色)、进入 Pod shell、浏览 Pod 文件与端口转发(规则可保存);Helm 标签页支持 CLI 探测、列出 release、查看 values 与修订历史、回滚、卸载以及安装/升级。
  • Git 面板:一次管理一个仓库,主机同样跟随聚焦的终端;所有操作都调用真实的 git CLI(远程通过 exec 通道执行 env LC_ALL=C GIT_TERMINAL_PROMPT=0 … bash -lc,本地则用 HideConsole 直接启动)。涵盖状态(porcelain v2)、逐行差异(2 MB 上限)、带 commit-graph 泳道的分页历史、分支与远程管理、暂存/取消暂存/丢弃、提交/修补(amend)、fetch/pull/push(pull 强制 --ff-only,强制推送只提供 --force-with-lease 且需要二次确认)、带操作中止的三方冲突视图、stash、blame、clone(带进度)、仓库扫描、git init,以及只写入 .git/info/exclude 的“本地忽略”。路径参数从不做 shell 拼接;后端会拒绝绝对路径、盘符、反斜杠与 ..。
  • 会话录制:默认关闭;可在设置中启用,或用 WROLP_RECORDING=1/0 环境变量强制开启。事件按会话写入 <data dir>/recordings/<workspace>/<group>/<connection>/<timestamp>_<session8>.jsonl(NDJSON),每 5 秒及断开时刷盘;SQLite 只存索引(events_file、event_count),因此 wrolp.db 不会随录制增长。底部面板可浏览录制、在文件管理器中显示、导出为 asciinema v2(.cast)、回放与删除,并支持旧数据迁移与按目录重建索引。
  • 命令集:存储于 SQLite 的可复用命令组(可绑定到连接)。

AI 助手

  • 两种模式:Chat(非流式 ai_chat_sync)与 Agent(流式加工具调用,通过 run_agent_stream);Agent 可在已连接的服务器上调用工具。
  • 隔离的双重对话:检视器侧边栏中的 AI 是应用级对话(不属于任何终端,后端会拒绝它的所有 shell 工具);绑定终端的 AI 停靠在每个面板内,可执行 run_command、读取文件以及“发送到终端”。
  • 多模态输入:消息可携带图片(后端以 openai_content 多段结构接收),图片也可粘贴,点击缩略图可打开大图。
  • 发送到终端:AI 代码块或选中文本按连接类型(SSH/本地 shell/串口/Telnet)注入目标面板;只插入、不执行,因此可在运行前检查。
  • 模板与重发:模板下拉框可插入提示词;任何历史消息都可编辑并重发;cancel_ai_chat 可中止正在进行的生成。
  • 多端点:可保存多个 AiEndpointProfile(各自拥有加密的 API key、URL、模型与 system prompt),并可从 {endpoint}/v1/models 拉取模型列表。
  • 安全性:API key 使用 AES-256-GCM 文件保险库加密(vault.key 是与机器绑定的文件);不使用操作系统钥匙串。

交互与数据

  • 分割树与浮动面板:终端区域是分割树布局,可水平或垂直分割,叶子节点承载终端、Docker 日志或编辑器;任何面板都可弹出为独立浮动窗口,每个会话打开的文件与日志彼此隔离。
  • 可迁移的数据目录:设置可将数据目录指向任意位置,同时迁移 wrolp.db、recordings/、connections.json 与窗口配置;该选择记录在默认位置的 data_root.json 中,并在下次启动时生效;目标为空时写入,非空时复用,已有数据永不覆盖。vault.key 也可选择一并迁移,使整个目录可携带。
  • 数据库维护:显示 wrolp.db 的当前大小与可回收空间,并提供“立即压缩”(VACUUM)操作。
  • 快捷键:所有快捷键集中在 src/lib/keybindings.ts 的同一张表中;设置中可为每一项重新绑定、单项重置或全部重置;保留键(Tab、Enter、Ctrl+C/V/X/Z/D/W)会被拒绝。
  • 其他:自定义标题栏、持久化窗口几何与透明度、单实例保护、自动更新器(从 GitHub Release 的 latest.json 检查更新,用 pubkey 校验安装包,以 passive 模式安装),以及中英文界面(默认跟随系统语言)。

技术栈

前端:React 19 + TypeScript + xterm.js 5.5(fit/serialize/webgl 附加组件)+ Monaco Editor + Vite 6 + SCSS。 依赖刻意保持精简;运行时依赖基本只有 Tauri API、xterm、Monaco、 react-markdown/remark-gfm、uuid 等。

后端:Tauri 2 + Rust(tokio)。关键 crate:

  • russh 0.64 + russh-sftp 3(纯 Rust 异步 SSH / SFTP)
  • rusqlite 0.31(内置 SQLite,WAL 模式)
  • portable-pty、serialport(本地 PTY 与串口)
  • aes-gcm、rand、base64(密钥保险库)
  • axum + tower-http + axum-server + rcgen(内置 HTTP/HTTPS 文件服务器与自签名证书)
  • suppaftp(FTP)、reqwest(AI 端点调用)、encoding_rs、walkdir、chrono
  • Windows 专用:windows / windows-core / webview2-com

IPC 与存储:Tauri invoke 命令是主要机制,终端输出 由前端轮询(用于规避 Windows 后台任务的限制)。Tauri 事件 仅用于 UI 无法轮询的推送 —— connection-closed、connection-suspect、 connection-ok、transfer-progress、tunnel-changed、ai-term-mark、 native-drag-drop、baud-detect-progress。所有数据都存放在一个可迁移目录中: window.json(窗口、录制与 keepalive 设置)、加密的 connections.json (连接与工作区)、wrolp.db(会话索引、命令集、片段),以及 recordings/(NDJSON 录制)。