Devolutions / Devolutions/ironPosh

PSRP: pipeline input streaming (PIPELINE_INPUT / END_OF_PIPELINE_INPUT)

Open
#42 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Rust
Stars
10
Forks
2
PR merge metrics
No merged PRs in 30d

Description

## Gap
We cannot stream input into a running remote pipeline. `PIPELINE_INPUT` is a stub (serialization commented out) and `END_OF_PIPELINE_INPUT` is enum-only. This blocks cmdlets/native exes that read from the pipeline (`$input`, `Write-Output | remote-cmd`, interactive stdin-style flows).

## Current state
- `crates/ironposh-psrp/src/messages/pipeline_input.rs` — struct present, `impl` is a commented-out block.
- `END_OF_PIPELINE_INPUT` — message-type ID only (`crates/ironposh-psrp/src/cores.rs:51`), no message struct.

## Required
- Implement `PIPELINE_INPUT` serialization (a CLIXML-serialized object per input item) and `END_OF_PIPELINE_INPUT`.
- Plumb a way to feed input objects to a created pipeline through client-core (and surface it in the tokio client; consider the web client too).
- The pipeline must be created with input enabled (`NoInput=false` in CREATE_PIPELINE) when input will be sent.

## Acceptance
- An e2e test that pipes input into a remote command that consumes `$input` and asserts the expected output.

## References
- psrpcore `src/psrpcore/_psrp.py` (PIPELINE_INPUT / END_OF_PIPELINE_INPUT), pypsrp `powershell.py`.
- Native C# `EncodeAndDecode.cs` (`PowerShellInput` / `PowerShellInputEnd`).

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with crates/ironposh-psrp/src/messages/pipeline_input.rs and crates/ironposh-psrp/src/cores.rs:51, then compare the PIPELINE_INPUT and END_OF_PIPELINE_INPUT handling in psrpcore, pypsrp, and EncodeAndDecode.cs. Trace how client-core and the tokio client create and feed a pipeline, considering the web client as noted. Done means an e2e test pipes input to a remote command consuming $input and verifies the expected output.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
backend-api-design, distributed-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.