Skip to content

fix(agent-core): preserve Bash stdout after process exit - #2541

Open
barkure wants to merge 3 commits into
MoonshotAI:mainfrom
barkure:fix/2426-vscode-bash-stdout
Open

fix(agent-core): preserve Bash stdout after process exit#2541
barkure wants to merge 3 commits into
MoonshotAI:mainfrom
barkure:fix/2426-vscode-bash-stdout

Conversation

@barkure

@barkure barkure commented Aug 2, 2026

Copy link
Copy Markdown

Related Issue

Resolve #2426

Problem

ProcessBackgroundTask starts consuming stdout and stderr before waiting for the process, but after the process exited it allowed only 250 ms for those streams to end. If stream closure was delayed beyond that grace period, the task disposed the streams and returned a successful Bash result without the late output.

Making KaosProcess.wait() wait for stream closure globally is unsafe: callers are allowed to wait before reading, and BufferedReadable applies backpressure once its 128 KiB prefetch buffer fills. In that usage, waiting for close can deadlock because the paused stream needs a reader before it can close.

What changed

  • Keep KaosProcess.wait() tied to direct process exit so wait-before-read remains safe.
  • Make ProcessBackgroundTask, which actively consumes both output streams from startup, wait until those streams end before completing and disposing the process.
  • Add a task-level regression test for output that arrives after process exit.
  • Add a 1 MiB wait-before-read regression test to protect the Kaos process contract from backpressure deadlocks.
  • Add a patch changeset for the CLI bundle.

No user documentation update is needed because this restores existing Bash output behavior without adding or changing user-facing configuration.

Verification

  • Kaos tests: 295 passed, 22 skipped
  • Agent Core background-task tests: 117 passed
  • Kaos and Agent Core typechecks
  • Kaos and Agent Core builds
  • Changeset status: @moonshot-ai/kimi-code patch
  • Oxlint on changed files: 0 errors
  • git diff --check

The original WSL2 environment was not available for a manual reproduction. The regression tests cover the stream-drain race and the wait-before-read backpressure boundary independently.

Checklist

  • I have read the CONTRIBUTING document.
  • I have linked a related issue, or explained the problem above.
  • I have added tests that prove my feature works.
  • Ran gen-changesets skill, or this PR needs no changeset.
  • Ran gen-docs skill, or this PR needs no doc update.

Local process wait() resolved on the child exit event even though stdout and stderr could still be open. Resolve on close so callers capture buffered tail output, and cover the ordering with a deterministic process lifecycle test.
@changeset-bot

changeset-bot Bot commented Aug 2, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 72514bc

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@moonshot-ai/kimi-code Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@barkure
barkure marked this pull request as ready for review August 2, 2026 14:44

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 94f6ea73bd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/kaos/src/local.ts Outdated
@barkure barkure changed the title fix(kaos): preserve stdout after process exit fix(agent-core): preserve Bash stdout after process exit Aug 2, 2026
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.

VS Code extension: Bash tool returns exit 0 but stdout is always empty (WSL2)

1 participant