Add mosh-grade predictive local echo
Replace the basic printable-only predictor with a clean-room speculative local-echo engine modeled on the Mosh paper's prediction overlay design (no GPL code copied or translated; original Rust written from the algorithm). Model: - Per-line cell model with a local cursor; printable keystrokes echo immediately, dimmed (and underlined on a very slow link) via save/restore cursor so full-screen TUIs are never corrupted. - Backspace and in-line Left/Right arrow prediction (CSI and SS3). - Epoch grouping per keystroke burst; anything unmodelable (CR/LF, escapes, control bytes, wide chars, right margin, paste-sized bursts) ends the epoch safely rather than mispredicting. - Frame-sequenced confirmation: an authoritative server frame supersedes and erases the overlay (dosh has no client-side emulator, so it cannot do Mosh's per-cell content match; frame arrival is the confirmation). - Glitch detection: contradicting output (e.g. alternate-screen entry) discards the epoch. - SRTT-based display policy with hysteresis and a latency-spike override; modes off / experimental(adaptive, default) / always via new client config `predict_mode` and `DOSH_PREDICT_MODE` env override. Improvements over the prior predictor: in-line arrow motion, dim+flag styling, exact-width erase, paste guard, and faster (frame-arrival) confirmation. Prediction is display-only and never swallows input. Adds unit tests: printable run, confirmation-clears, glitch-discards, backspace, line-wrap budget, paste-skip, newline, inline arrows, and the experimental SRTT threshold gate. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
6c14d669b8
commit
cdeba047bc
@@ -84,6 +84,10 @@ pub struct ClientConfig {
|
||||
pub view_only: bool,
|
||||
#[serde(default)]
|
||||
pub predict: bool,
|
||||
/// Prediction display policy: "off", "experimental" (adaptive, the default),
|
||||
/// or "always". Controls when speculative local echo is shown.
|
||||
#[serde(default = "default_predict_mode")]
|
||||
pub predict_mode: String,
|
||||
pub cache_attach_tickets: bool,
|
||||
pub credential_cache: String,
|
||||
#[serde(default = "default_auth_preference")]
|
||||
@@ -141,6 +145,7 @@ impl Default for ClientConfig {
|
||||
reconnect_timeout_secs: 5,
|
||||
view_only: false,
|
||||
predict: false,
|
||||
predict_mode: default_predict_mode(),
|
||||
cache_attach_tickets: true,
|
||||
credential_cache: "~/.local/share/dosh/credentials".to_string(),
|
||||
auth_preference: default_auth_preference(),
|
||||
@@ -183,6 +188,10 @@ fn default_native_auth_timeout_ms() -> u64 {
|
||||
700
|
||||
}
|
||||
|
||||
fn default_predict_mode() -> String {
|
||||
"experimental".to_string()
|
||||
}
|
||||
|
||||
fn default_known_hosts() -> String {
|
||||
"~/.config/dosh/known_hosts".to_string()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user