Versions in this module Expand all Collapse all v0 v0.1.9 Aug 20, 2026 v0.1.8 Aug 19, 2026 v0.1.7 Aug 16, 2026 v0.1.6 Aug 16, 2026 Changes in this version + const StreamFenceVersion + const StreamFenceVersionHeader + const StreamFenceVersionLegacyV0 + const StreamFenceVersionV1 + const StreamFenceVersionV2 + func AcceptStreamFence(h StreamHeader, acceptedAt time.Time) (time.Time, error) + func IsStreamFenceExpired(err error) bool + func StreamKindRequiresFence(kind StreamKind) bool + func ValidateActionAck(h StreamHeader, ack ActionAck) error + func ValidateStreamFence(h StreamHeader, now time.Time) error + func ValidateStreamFenceDeadline(deadline, now time.Time) error + func WriteActionAck(w io.Writer, ack ActionAck) error + type ActionAck struct + ActionFence string + NotAfterMilli int64 + Status ActionAckStatus + func NewActionAck(h StreamHeader, status ActionAckStatus) ActionAck + func ReadActionAck(r io.Reader) (ActionAck, error) + type ActionAckStatus string + const ActionAckExpired + const ActionAckRefused + const ActionAckSuccess type StreamHeader + ActionFence string + NotAfterMilli int64 v0.1.5 Aug 14, 2026 v0.1.4 Aug 14, 2026 Changes in this version + const MaxPort + const MaxStreamWindow + const MaxTerminalDim + const MaxTunnelWindowBytes + const MinPort + const MinTerminalDim + const PublicKeyHeader + func ReadRecordInto(r io.Reader, buf []byte) ([]byte, error) + func ValidPort(p int) bool + func ValidTerminalSize(cols, rows int) bool v0.1.3 Aug 10, 2026 v0.1.2 Aug 10, 2026 Changes in this version + const SealSaltSize + const ServerHelloSize + func Fingerprint(pub []byte) string + func GenerateServerSalt() ([]byte, error) + func ReadServerHello(r io.Reader) ([]byte, error) + func WriteServerHello(w io.Writer, salt []byte) error v0.1.1 Aug 6, 2026 Changes in this version + const DeviceStatusApproved + const DeviceStatusExpired + const DeviceStatusPending + type DevicePollRequest struct + DeviceCode string + type DevicePollResponse struct + Status string + type DeviceStartRequest struct + ClientID string + Hostname string + type DeviceStartResponse struct + DeviceCode string + ExpiresIn int + Interval int + UserCode string + VerificationURL string v0.1.0 Jul 29, 2026 Changes in this version + const ClientHelloSize + const MaxFrameSize + const MaxHeaderSize + const MaxSealedRecord + const MaxTunnelStreams + const SealKeySize + var ErrSealFailed = errors.New("sealed record failed authentication") + func ClientSession(conn net.Conn) (*yamux.Session, error) + func EncodeActivity(active bool) []byte + func EncodeData(p []byte) []byte + func EncodeResize(cols, rows int) []byte + func GenerateAgentKey() (*ecdh.PrivateKey, error) + func NetConn(ctx context.Context, c *websocket.Conn) net.Conn + func ReadClientHello(r io.Reader) ([]byte, error) + func ReadRecord(r io.Reader) ([]byte, error) + func ServerSession(conn net.Conn) (*yamux.Session, error) + func WriteClientHello(w io.Writer, pub []byte) error + func WriteHeader(w io.Writer, h StreamHeader) error + func WriteRecord(w io.Writer, record []byte) error + type PortEntry struct + ID string + Label string + Port int + type PortInfo struct + Label string + Port int + Project string + type ProjectInfo struct + ID string + Name string + Ports []PortEntry + RootDir string + type ProvisionRequest struct + ClientID string + Email string + Hostname string + Name string + Password string + type ProvisionResponse struct + Name string + SystemID string + Token string + type Resize struct + Cols int + Rows int + type SealedStream struct + func NewSealedStream(r io.Reader, w io.Writer, sendKey, recvKey []byte) (*SealedStream, error) + func (s *SealedStream) ReadFrame() (TermFrame, error) + func (s *SealedStream) WriteFrame(frame []byte) error + type Sealer struct + func NewSealer(key []byte) (*Sealer, error) + func (s *Sealer) Open(record []byte) ([]byte, error) + func (s *Sealer) Seal(plaintext []byte) []byte + type SessionKeys struct + AgentToClient []byte + ClientToAgent []byte + func DeriveSessionKeys(priv *ecdh.PrivateKey, peerPub []byte, sessionID string) (*SessionKeys, error) + type StreamHeader struct + Cols int + Cwd string + Kind StreamKind + Port int + Rows int + SessionID string + func ReadHeader(r io.Reader) (StreamHeader, *bufio.Reader, error) + type StreamKind string + const KindEvent + const KindListPorts + const KindPing + const KindProxy + const KindShutdown + const KindTerminal + type SystemInfo struct + Hostname string + ID string + IPAddr string + Name string + Online bool + type TermFrame struct + Active *bool + Data []byte + Resize *Resize + func DecodeFrame(b []byte) (TermFrame, error)