mirror of
https://github.com/NVIDIA/OpenShell.git
synced 2026-10-20 06:00:06 +08:00
* fix(supervisor): restore canonical stdin after connection loss Probe idle SSH peers and enforce a receive deadline during transport I/O, including writes blocked by a stalled relay. Release the dead attachment's stdin lease through existing handler cleanup. Retry denied write intent on later ordinary input without displacing a healthy owner. Preserve explicit read-only, EOF and detach behavior, and discard control bytes retained while input ownership was denied. Cover half-open forwarding, blocked writes, healthy idle peers and competing reconnects through the production supervisor frame bridge and real SSH. Fixes #3648 Signed-off-by: Shiju <shiju@nvidia.com> * docs(skills): describe read-only reconnect input retry Explain what an openshell-cli user sees when automatic recovery reattaches before the supervisor closes the dead connection: the attachment reports read-only, later ordinary input retries stdin acquisition and prints `input enabled`, input typed while read-only is discarded, exit keys still detach, and an explicitly read-only viewer or a healthy owner is never affected. Signed-off-by: Shiju <shiju@nvidia.com> --------- Signed-off-by: Shiju <shiju@nvidia.com>
46 lines
1.3 KiB
TOML
46 lines
1.3 KiB
TOML
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
[package]
|
|
name = "openshell-supervisor-process"
|
|
description = "Process access and gateway session runtime for the OpenShell supervisor"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
rust-version.workspace = true
|
|
|
|
[dependencies]
|
|
openshell-core = { path = "../openshell-core" }
|
|
openshell-isolation-interface = { path = "../openshell-isolation-interface" }
|
|
openshell-ocsf = { path = "../openshell-ocsf" }
|
|
|
|
anyhow = { workspace = true }
|
|
async-trait = "0.1"
|
|
base64 = { workspace = true }
|
|
bytes = { workspace = true }
|
|
hex = "0.4"
|
|
miette = { workspace = true }
|
|
nix = { workspace = true }
|
|
rand = "0.10"
|
|
russh = "0.62"
|
|
serde_json = { workspace = true }
|
|
sha2 = { workspace = true }
|
|
tokio = { workspace = true }
|
|
tokio-stream = { workspace = true }
|
|
tonic = { workspace = true, features = ["channel", "tls-native-roots"] }
|
|
tracing = { workspace = true }
|
|
tracing-subscriber = { workspace = true }
|
|
uuid = { workspace = true }
|
|
|
|
[target.'cfg(unix)'.dependencies]
|
|
libc = "0.2"
|
|
|
|
[dev-dependencies]
|
|
openshell-ocsf = { path = "../openshell-ocsf", features = ["test-support"] }
|
|
tempfile = "3"
|
|
tokio = { workspace = true, features = ["test-util"] }
|
|
|
|
[lints]
|
|
workspace = true
|