- M0: libghostty SSH 终端(渲染/输入/连接)+ 白屏修复(OutputGate) + 会话状态机/自动重连 - M1: tsnet 用户态组网 + SSH-over-tsnet(fd 桥),shell 级真机验证;R5(Go+gvisor+C+++Swift 同进程) retire - M1.5: tmux -CC 原生 tab(MVP) - 结构: packages/(TXCore·TXTransport), apps/TerminalX, vendor/(libghostty-spm/libssh2/mbedtls/tsnet-bridge), artifacts/ - 文档: CLAUDE.md + docs/HANDOFF.md(新会话入口) - 环境: 认证代理→依赖 vendor 本地化;Go 在 ~/.local/go;仅模拟器/未签名 - 待续: M2 mosh, tmux 多 pane, M4 安全(host key/SE) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
49 lines
1.6 KiB
Swift
49 lines
1.6 KiB
Swift
//
|
|
// TerminalSurfaceOptions.swift
|
|
// libghostty-spm
|
|
//
|
|
// Created by Lakr233 on 2026/3/16.
|
|
//
|
|
|
|
import GhosttyKit
|
|
|
|
public struct TerminalSurfaceOptions: Sendable {
|
|
public var backend: TerminalSessionBackend
|
|
public var fontSize: Float?
|
|
public var workingDirectory: String?
|
|
/// Extra environment variables set in the child process spawned for this
|
|
/// surface (exec backend). Passed through `ghostty_surface_config_s.env_vars`;
|
|
/// every process launched from the surface's shell inherits them, which lets
|
|
/// embedding hosts tag a surface (e.g. `MYAPP_PANE=<uuid>`) and correlate
|
|
/// externally observed processes back to it.
|
|
public var envVars: [String: String]
|
|
public var context: TerminalSurfaceContext
|
|
|
|
public init(
|
|
backend: TerminalSessionBackend = .exec,
|
|
fontSize: Float? = nil,
|
|
workingDirectory: String? = nil,
|
|
envVars: [String: String] = [:],
|
|
context: TerminalSurfaceContext = .window
|
|
) {
|
|
self.backend = backend
|
|
self.fontSize = fontSize
|
|
self.workingDirectory = workingDirectory
|
|
self.envVars = envVars
|
|
self.context = context
|
|
}
|
|
|
|
func isEquivalent(to other: TerminalSurfaceOptions) -> Bool {
|
|
fontSize == other.fontSize
|
|
&& workingDirectory == other.workingDirectory
|
|
&& envVars == other.envVars
|
|
&& context == other.context
|
|
&& backend.isEquivalent(to: other.backend)
|
|
}
|
|
|
|
var inMemorySession: InMemoryTerminalSession? {
|
|
guard case let .inMemory(session) = backend else { return nil }
|
|
return session
|
|
}
|
|
}
|