Skip to content

fix: restore cross-spawn behavior for effect child processes#18798

Open
kitlangton wants to merge 12 commits intodevfrom
kit/cross-spawn-spawner
Open

fix: restore cross-spawn behavior for effect child processes#18798
kitlangton wants to merge 12 commits intodevfrom
kit/cross-spawn-spawner

Conversation

@kitlangton
Copy link
Contributor

Summary

  • add an opencode-local ChildProcessSpawner layer backed by cross-spawn so the Effect services get the Windows command resolution and shell behavior we had before the migration
  • switch the Effect-based Installation and Snapshot services to use that layer instead of the default node spawner
  • add regression coverage for shell routing, Windows .cmd scripts in paths with spaces, and additional file descriptors

Testing

  • bun typecheck
  • bun run test test/effect/cross-spawn-spawner.test.ts test/installation/installation.test.ts test/snapshot/snapshot.test.ts

Notes

  • this intentionally leaves Project out; that wiring stays with the separate effectify-project work
  • a full local packages/opencode test run still has one unrelated existing failure in packages/opencode/test/file/watcher.test.ts

Bring back the Windows command resolution and shell behavior we lost during the Effect migration by adding a cross-spawn-backed child process spawner. Wire installation and snapshot through it and cover the regression cases with focused process tests.
@kitlangton kitlangton marked this pull request as ready for review March 23, 2026 15:05
opencode-agent bot added a commit that referenced this pull request Mar 23, 2026
opencode-agent bot added a commit that referenced this pull request Mar 23, 2026
opencode-agent bot added a commit that referenced this pull request Mar 24, 2026
opencode-agent bot added a commit that referenced this pull request Mar 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant