Files
terminalX/README.md
kid 6dd23275ff feat: 修复 3 个渲染/tmux 显示 bug + UI 产品化第一波(对标 Moshi)
渲染/tmux 修复(e2e 复现+回归,模拟器 idb 点击+截图取证):
- 终端底部残影:ghostty iOS 释放 surface 不摘 IOSurfaceLayer(上游缺陷),
  platformSetup 清现存子层 + TerminalSurfaceCoordinator.onSurfaceFreed 钩子摘孤儿层
- tmux 切 tab 切回旧 tab 内容消失:改所有窗口常驻挂载(ZStack+opacity+hitTesting),
  surface 不释放、内容保留、后台窗口持续收 %output
- tmux pane 内容钉底/顶部残行:pane grid 由容器几何定(tab 条吃高度),75 行快照喂 73 行
  溢出上滚;几何测量上移 TmuxTabbedView + attach kickoff 双条件(attachAcked∧containerKnown)
  + capture-pane 铺快照前剔尾空行

UI 产品化(对标 Moshi getmoshi.app:深蓝黑 + 终端绿 + Catppuccin):
- 设计系统 Theme.swift:TXPalette(色角色 struct)+TXThemeManager(环境注入),颜色封装供主题系统
- 统一主题:抽离 4 套 Catppuccin(Mocha/Macchiato/Frappé/Latte),一套同时驱动 app+终端配色,
  设置里选主题 app 与终端一起变色 + UserDefaults 持久化
- 主屏/主机管理页 HomeView:HostCard 主机卡 + FAB 加主机(AddHostSheet) + 设置(主题选择器),
  HostStore 本地 JSON 持久化(密码暂存/TODO Keychain),点卡片 connect(to:)
- 终端外壳 chrome TerminalTopBar:圆形返回钮 + 会话标题 + SSH/mosh 传输徽章 + 状态提示,
  tmux tab 绿 pill 化,底部工具栏深色自适应,终端默认 Catppuccin Mocha

iPad mini(A17 Pro) live 端到端验证:加主机→连接→终端→切 tab→分屏点焦点→主题切换同步。
详见 docs/HANDOFF.md §10。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 22:43:00 +08:00

56 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# terminalX
原生苹果生态终端运维 / vibe coding 工具。平台优先级:**iPadOS > iOS > macOS(Apple Silicon)**。
核心选型:**libghostty**(终端引擎) · **mosh** · **Tailscale (tsnet 用户态)** · **tmux control mode hook**
> **接手/继续开发先读 [`docs/HANDOFF.md`](docs/HANDOFF.md)**(项目全貌 + 里程碑 + 代码地图 + 下一步)与 [`CLAUDE.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 未建。
## 快速开始
```sh
# 纯逻辑单测(无需 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`