Skip to content

Add stdio remotes, drop R/, log to stderr (v0.8.2) - #41

Merged
guyte149 merged 1 commit into
masterfrom
feat/chisel-syntax-parity-stdio
May 5, 2026
Merged

Add stdio remotes, drop R/, log to stderr (v0.8.2)#41
guyte149 merged 1 commit into
masterfrom
feat/chisel-syntax-parity-stdio

Conversation

@guyte149

@guyte149 guyte149 commented May 5, 2026

Copy link
Copy Markdown
Owner

Three changes that bring the remote-syntax parser to chisel parity and make stdio: remotes actually usable:

  • Add stdio:<host>:<port> (and stdio:<port>, defaulting remote host to 127.0.0.1) forward remotes. The client pipes its own stdin/stdout to/from the QUIC stream instead of binding a local listener; on stdin EOF the session shuts down cleanly. Server-side dispatch is unchanged. Reverse stdio (R:stdio:...) and stdio:socks are rejected at parse time. Wire model: new stdio: bool on RemoteRequest, serialized with #[serde(default)].

  • Drop the Rusnel-specific R/ reverse-prefix shorthand. Chisel only accepts R: and we now match exactly. R/foo is now a parse error.

  • Initialize tracing with with_writer(std::io::stderr) for all CLI modes. Required for stdio (stdout is the data plane); good practice for the rest.

Tests: 12 new parser unit tests for the stdio + R/ changes, plus a new tests/stdio.rs e2e smoke that spawns the rusnel binary as a subprocess with a stdio remote pointing at an in-process echo target, round-trips three framed messages through its stdin/stdout, and asserts the child exits 0 after stdin EOF.

Three changes that bring the remote-syntax parser to chisel parity and
make `stdio:` remotes actually usable:

- Add `stdio:<host>:<port>` (and `stdio:<port>`, defaulting remote host
  to 127.0.0.1) forward remotes. The client pipes its own stdin/stdout
  to/from the QUIC stream instead of binding a local listener; on stdin
  EOF the session shuts down cleanly. Server-side dispatch is unchanged.
  Reverse stdio (`R:stdio:...`) and `stdio:socks` are rejected at parse
  time. Wire model: new `stdio: bool` on `RemoteRequest`, serialized
  with `#[serde(default)]`.

- Drop the Rusnel-specific `R/` reverse-prefix shorthand. Chisel only
  accepts `R:` and we now match exactly. `R/foo` is now a parse error.

- Initialize tracing with `with_writer(std::io::stderr)` for all CLI
  modes. Required for stdio (stdout is the data plane); good practice
  for the rest.

Tests: 12 new parser unit tests for the stdio + R/ changes, plus a new
`tests/stdio.rs` e2e smoke that spawns the rusnel binary as a subprocess
with a stdio remote pointing at an in-process echo target, round-trips
three framed messages through its stdin/stdout, and asserts the child
exits 0 after stdin EOF.

Co-authored-by: Cursor <cursoragent@cursor.com>
@guyte149
guyte149 merged commit c9276dd into master May 5, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant