Skip to content

stream proxy output while command is running#268

Open
dragonGR wants to merge 1 commit intortk-ai:masterfrom
dragonGR:pr-proxy-stream
Open

stream proxy output while command is running#268
dragonGR wants to merge 1 commit intortk-ai:masterfrom
dragonGR:pr-proxy-stream

Conversation

@dragonGR
Copy link

The rtk proxy was buffering command output until the child process finished which made long-running commands look stuck in TTY mode.

So this commit switches proxy execution from buffered Command::output() to a streamed spawn() flow with piped stdout/stderr so output is forwarded incrementally while the command is still running.

What was improved:
stream stdout and stderr in real time (chunked reads)
flush each chunk immediately for better interactive UX
keep captured output for tracking/analytics
preserve child exit status behavior (still returns the same failure code when command fails)

Ref:
#222

heAdz0r added a commit to heAdz0r/rtk that referenced this pull request Feb 28, 2026
…tk-ai#217, rtk-ai#196, rtk-ai#248, rtk-ai#211, rtk-ai#200, rtk-ai#192, rtk-ai#268)

Wave 1 (critical bugs):
- fix(registry): fi/done moved to IGNORED_EXACT — find no longer shadowed (rtk-ai#246)
- fix(playwright): f64 duration, specs[] structure, --reporter=json after subcmd (rtk-ai#193)
- fix(gh): should_passthrough_gh_view for --json/--jq/--template/--web in view_pr/issue/run (rtk-ai#217+196)

Wave 2 (reliability):
- fix(git): is_blob_show_arg — blob show passthrough without trailing-newline trim (rtk-ai#248)
- fix(find): parse_find_args with native -name/-type/-maxdepth/-iname support (rtk-ai#211)
- fix(main): graceful Clap fallback + parse_failures SQLite table + rtk gain --failures (rtk-ai#200)

Wave 3 (UX):
- feat(git): global options -C/-c/--git-dir/--work-tree/--no-pager/--no-optional-locks/--bare/--literal-pathspecs (rtk-ai#192)
- feat(proxy): streaming output via spawn()+threads instead of buffered output() (rtk-ai#268)

Tests: 1091 → 1117 (+26), 0 regressions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@pszymkowiak
Copy link
Collaborator

The PR doesn't compile — utils::status_code_error is referenced but never defined anywhere in the codebase.

Easy fix: replace the return Err(utils::status_code_error(...)) with the original pattern:
std::process::exit(status.code().unwrap_or(1));
The streaming logic itself looks correct. Just needs this one fix to build.

@dragonGR
Copy link
Author

dragonGR commented Mar 1, 2026

Hello, yes, it’s most likely due to the recent changes you pushed. I’ve pushed an update and however I force-pushed it, so I hope that won’t cause any problems.

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.

2 participants