kid 28e9cfc207 feat: UI 商业化改造 + 连接前 tmux 会话选择(真机验证)
按 Claude Design 定稿(归档在 docs/design/)重做 UI,并把 tmux 从
「从不自动进」修成「连接前探测 → 让用户选会话」。

设计令牌与导航地基
- Theme 拆三层:TXAccent(恒定 blurple) / TXChrome(中性阶×4 表) / TXFlavor(Catppuccin 终端)
- vendor JetBrains Mono 四权重(附 OFL 许可)
- AppRouter + SessionManager:多会话并存,路由与会话生命周期解耦
- SessionCanvas 常驻挂载会话 surface(摘除即丢内容,也是缩回动画的前提)

按设计稿落地的屏
- 沉浸轨道页:56pt 轨道 + 浮起标题/状态胶囊 + 侧边栏三态(遮罩不 resize、Pin 各一次)
- 首页:活动会话卡(readViewportText 文本镜像)+ 主机网格 + 筛选 chips
- 关闭二次确认(tmux 仅断开 / 原生窗口两套文案)、分屏菜单、pane 拖拽条
- 空状态:首次运行 / 无会话 / 搜索无命中 / 连接中·失败·已关闭

tmux 真实链路(真机查出并修掉 4 个 bug)
- 全代码库从来没人发起 attach → 连接前探测 + 会话选择器(接回 / 新建 / 原生终端)
- format 分隔符 tab 经 PTY 变成下划线 → 改用 |:|
- controller 变化不冒泡到 session → Combine 转发(否则数据解析对了 UI 不刷新)
- 当前会话名不能靠 session_attached 反推 → 改用 display-message

传输层:SSH connect 加超时(原来阻塞到系统 TCP 超时 75s+)
无头验证设施:假会话 fixture · terminalx://ui/* 驱动 · 横屏截图脚本 · 对拍走查法
TXCore 45 tests 绿(新增 5 个会话探测单测)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-25 22:59:35 +08:00

terminalX

原生苹果生态终端运维 / vibe coding 工具。平台优先级:iPadOS > iOS > macOS(Apple Silicon)

核心选型:libghostty(终端引擎) · mosh · Tailscale (tsnet 用户态) · tmux control mode hook

接手/继续开发先读 docs/HANDOFF.md(项目全貌 + 里程碑 + 代码地图 + 下一步)与 CLAUDE.md(构建/验证命令 + 环境约束 + 坑)。

当前进展2026-07-24均 iOS 模拟器验证,未上真机/未签名)

  • M0 SSH 直连终端libghostty 渲染/键盘/CJK、会话状态机+自动重连)
  • M1 tsnet 用户态 + SSH-over-tsnetfd 桥)
  • M1.5 / tmux control-mode 原生 tab + 多 pane 分屏 + iPadOS 动态 resize
  • M2 mosh over tsnet自编 MoshCore.xcframework + UDP relay 端到端验证
  • M3 mosh 挂起→恢复 <3s唤醒脉冲 + 会话状态机三相)
  • M4 安全host key TOFU pinMITM 防护)+ publickey 认证SE 优先/软件回退)
  • M5 合规提审 ⏸️ 暂缓
  • UI 产品化(进行中) 对标 Moshi深蓝黑 + 终端绿 + Catppuccin主机管理页/终端 chrome/统一主题切换(app+终端同源4 套 Catppuccin) ;会话缩略卡/设置细化待续。见 docs/HANDOFF.md §10

四大核心需求libghostty / tailscale / tmux / mosh均已端到端验证。

仓库结构(实际)

packages/
  TXCore       零依赖纯逻辑tmux 解析器/layout、SessionMachine(状态机+重连+mosh三相)、
               MoshConnect(解析)、SSH(线格式/ECDSA/host key)。50 单测。
  TXTransport  SSHSession(libssh2)、MoshSession(mosh_main 桥)、Transport 协议;
               C shim: CSSH+CSSHCore(libssh2)、CMosh+MoshCore(mosh)。
apps/TerminalX iOS appXcodeGen 生成SSHTerminalModel(编排)/ContentView(主机管理页+
               终端 chrome+设置)/TmuxController(pane-per-surface 网关)/Theme(TXPalette+
               主题管理)/HostStore(主机持久化)/SigningKeyProvider/KeychainKnownHostsStore。
vendor/        非 Swift 依赖本地化(认证代理不支持 SwiftPM全 vendor
               libghostty-spm、libssh2、mbedtls、tsnet-bridge(Go)、mosh、protobuf。
artifacts/     预编译 xcframeworkCSSHCore/TsnetBridge/MoshCore**有意提交**,克隆即可构建)。

计划中的 TXTailnet/TXSecurity/TXPTY/TXUI 未单独成包——tsnet 逻辑在 app 的 TsnetManager、 安全在 app 的 SigningKeyProvider/KeychainKnownHostsStore、UI 直接在 app。macOS 本地 PTY 未建。

快速开始

# 纯逻辑单测(无需 Xcode/模拟器)
swift test --package-path packages/TXCore      # 50 tests

# 构建 app模拟器——详见 CLAUDE.md
cd apps/TerminalX && xcodegen generate --spec project.yml
xcodebuild -project TerminalX.xcodeproj -scheme TerminalX \
  -destination 'platform=iOS Simulator,id=<UDID>' -clonedSourcePackagesDirPath /tmp/tx-spm build

工具链

Xcode 26 / Swift 6.3 · Go 1.26(~/.local/go)+gomobile · CMake+Ninja+zigvendor 构建)。构建命令与环境约束见 CLAUDE.md

Description
No description provided
Readme 68 MiB
Languages
C 84.7%
Swift 14.9%
Objective-C 0.4%