Skip to content

fix: keep remote exec alive after stdin EOF - #394

Open
alongubkin wants to merge 1 commit into
mainfrom
alon/alien-484-keep-remote-debug-exec-alive-after-stdin-eof
Open

fix: keep remote exec alive after stdin EOF#394
alongubkin wants to merge 1 commit into
mainfrom
alon/alien-484-keep-remote-debug-exec-alive-after-stdin-eof

Conversation

@alongubkin

Copy link
Copy Markdown
Member

Problem

For non-interactive remote exec commands, local stdin can reach EOF immediately. The stdin forwarding task then drops the last input sender, causing the WebSocket writer to close the session before a slower remote command reports its exit status.

Fix

Keep one input sender owned by the attach session. Stdin EOF now means only that no more input will be sent; the WebSocket remains open until the remote exit/error frame, timeout, or cancellation.

The regression test uses a real local WebSocket peer: stdin reaches EOF first, the peer sends a delayed exit frame, and the attach call must still succeed.

Validation

  • cargo test -p alien-cli commands::debug::tests
  • git diff --check

@greptile-apps

greptile-apps Bot commented Aug 11, 2026

Copy link
Copy Markdown

Greptile Summary

This PR keeps the remote-exec input channel open after local stdin reaches EOF, allowing the read side to wait for the remote command’s terminal frame.

  • Retains a session-owned input sender until exit, error, timeout, or cancellation.
  • Adds a loopback WebSocket regression test that delays the remote exit frame until after stdin EOF.

Confidence Score: 5/5

The PR appears safe to merge, with the attach lifecycle correctly preserving the WebSocket until a terminal remote outcome is received.

All attach termination paths explicitly abort the writer before returning, so retaining the sender fixes premature EOF shutdown without introducing a reachable hang or cleanup failure.

Important Files Changed

Filename Overview
crates/alien-cli/src/commands/debug.rs Retains the input sender for the attach-session lifetime and adds a realistic delayed-exit regression test; no actionable defect was found.

Sequence Diagram

sequenceDiagram
    participant Stdin as Local stdin
    participant Attach as Attach session
    participant Writer as WebSocket writer
    participant Remote as Remote peer
    Stdin-->>Attach: EOF
    Note over Attach,Writer: Session-owned sender keeps input channel open
    Remote-->>Attach: Delayed exit/error frame
    Attach->>Writer: Abort writer
    Attach-->>Attach: Return remote result
Loading

Reviews (1): Last reviewed commit: "fix(cli): keep remote exec alive after s..." | Re-trigger Greptile

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