@johnhenry/wsh 0.25.0 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -672,9 +672,14 @@ await client.listRemoteSessions(); // sessions this key can see
|
|
|
672
672
|
```
|
|
673
673
|
|
|
674
674
|
`@johnhenry/wsh/server` implements all of it with its [`sessions`
|
|
675
|
-
option](#sessions-attach--resume--detach)
|
|
676
|
-
|
|
677
|
-
[spec/wsh-v1.md](spec/wsh-v1.md))
|
|
675
|
+
option](#sessions-attach--resume--detach), and so does the Rust `wsh-server`
|
|
676
|
+
(since `rust-v0.2.0`): `Resume` replays only the output after `last_seq`
|
|
677
|
+
(the position is defined in [spec/wsh-v1.md](spec/wsh-v1.md)), and Attach/Resume
|
|
678
|
+
answer with a Presence carrying the new `channel_id` and `seq`, replay and live
|
|
679
|
+
output arriving as `SessionData` on it. The Rust host's ring is a fixed 256 KiB
|
|
680
|
+
per session and its sessions end with the server process; a session that exits
|
|
681
|
+
while no one is attached is kept (for the replay and the exit) until it is
|
|
682
|
+
resumed or expires.
|
|
678
683
|
|
|
679
684
|
## Pinning a Self-Signed Certificate
|
|
680
685
|
|
|
@@ -822,7 +827,7 @@ than left to be found.
|
|
|
822
827
|
| Host identity / TOFU | `WshKnownHosts` (localStorage-backed) | `KnownHosts`/`HostStatus` (`~/.wsh/known_hosts`-backed) | **Record unified, policy is not** (wsh #59): both pin `ServerHello.host_fingerprint`, which `@johnhenry/wsh/server` populates (with a proof of possession, [Host key](#host-key-fingerprint--tofu)) but no Rust `wsh-server` release does yet (see [Security](#security-model)). *When* to trust, prompt, or persist is deliberately left per-implementation -- a browser and a CLI have different UX for "first time seeing this host" |
|
|
823
828
|
| Typed RPC channels (`openRpc`, `rpc` sessions; `wsh-host`, `wsh-fs`, `mcp`) | `WshClient.openRpc()`, `RpcChannel` | none yet (a Rust `wsh-server` does not advertise `rpc`; a JS client falls back to `FileOp` for files) | **JS server only, no wire change**: `Open { kind: 'rpc', command: <protocol> }` plus `rpc*` `ServerHello` features, negotiated so it fails fast elsewhere |
|
|
824
829
|
| Interactive shell UI | none -- this SDK is a protocol client, not a terminal emulator; pair with xterm.js/ghostty-web | `wsh connect`, `wsh sftp` (line-oriented REPL) | **Deliberately not unified** -- a browser embeds a terminal widget the host page owns; a CLI process owns its own TTY |
|
|
825
|
-
| Attach / resume | `attachSession()`, `resumeSession()`, `WshSession.seq` | `attach_session()`, `resume_session()` | **Wire-unified** (`Attach`/`Resume`/`Presence`); `seq` = cumulative output bytes. `@johnhenry/wsh/server` honours `last_seq` (bounded ring, gap errors) and answers Presence with `channel_id`/`seq`; the Rust `wsh-server`
|
|
830
|
+
| Attach / resume | `attachSession()`, `resumeSession()`, `WshSession.seq` | `attach_session()`, `resume_session()` | **Wire-unified** (`Attach`/`Resume`/`Presence`); `seq` = cumulative output bytes. `@johnhenry/wsh/server` honours `last_seq` (bounded ring, gap errors) and answers Presence with `channel_id`/`seq`; the Rust `wsh-server` does the same (`rust-v0.2.0`+; fixed 256 KiB ring) |
|
|
826
831
|
| Reverse-connect / relay peer | `connectReverse()`, `trustRelayPeer()`; `@johnhenry/wsh/server`: `relay` option and `createReverseHost()` | `wsh reverse`, `wsh agent` (persistent, with startup-unit install) | **Wire-unified** (registration, discovery, signed peer records); **daemonization is CLI-only** -- a browser tab cannot be a background OS service. The Node relay is default-deny and bridges one operator per peer |
|
|
827
832
|
| Post-quantum E2E (experimental) | `initiateE2E()` (WebCrypto ML-KEM-768 or `@noble/post-quantum` fallback) | `E2eKeyExchange` (`ml-kem` crate) | **Wire-unified** algorithm and transcript; key material backends differ by platform necessity |
|
|
828
833
|
| Session recording/replay | `SessionRecorder`/`SessionPlayer` (asciicast v2) | none | **JS-only** -- no current Rust consumer needs playback; the format itself (asciicast v2) is not proprietary if one is added later |
|
package/package.json
CHANGED