OutputCollector.spillAll ran openSync/writeSync inside the stream 'data' listener with no containment. When the private per-process spill directory had been removed by a temporary-file cleaner, the first overflowing chunk threw ENOENT from Pipe.onStreamRead, became an uncaught exception in the Desktop Host, and the Electron shell reported it as a fatal failure. Spilling is best-effort by contract (spillPath is optional; a failed final close already withholds it). Every filesystem failure while opening or appending the spill file now discards the spill, reports once through the owner's logger, and leaves in-memory collection untouched. Spill inputs move into one SpillOptions object with the reporter, so tail-only collectors no longer pass an empty directory; prepareManagedProcessBinding is the explicit resolve step for the directory and reporter defaults, and the runtime and SSH helper supply their plugin loggers. Tests cover ENOENT on open (removed directory), ENOTDIR on open, and ENOSPC on append after the file exists, asserting the tail stays byte-exact, the spill file is withdrawn, and the reporter fires once.
description, kind
| description | kind |
|---|---|
| The subprocess group map: the shared child-process service and its local host provider, for users and maintainers navigating the group. | package-group |
subprocess/ — subprocess capability family
English | 中文
Summary
Every child process and terminal session the harness runs — bash commands, language servers, persistent shells, and out-of-process subagent backends — is started, observed, and terminated through one shared service (ctx.subprocess), with a local provider running them on the host machine. It is not a standalone product feature: the consuming capability seams decide what each process means, and command semantics, deadlines, and model-facing presentation stay with them. The group provides executable lookup, bounded output capture with spill recovery, provider-managed process ranges with disclosed weaker fallbacks, and a scrubbed starting environment for every child.
Table of Contents
Packages
| Package | Role | ctx key |
|---|---|---|
subprocess |
Defines the child-process service: executable lookup, managed process spawns, and real terminal sessions | ctx.subprocess |
subprocess-local |
Runs host processes and terminals with native managed ranges where supported and explicit weaker fallbacks elsewhere | registers on ctx.subprocess |
win32-process |
Owns shared Win32 bindings for sandbox and ordinary process creation, stdio, Job assignment, polling, waits, and handle cleanup | library — no ctx key |
The service keeps process lifetime across consumer reloads; consumers own what a process means (a bash command, a language server) and every default that shapes one.
Related documentation
- Subprocess subsystem — spawn specs, output readers, outcomes, and the managed
DSH_*environment. - Subprocess seam Agent Note — why the process half of the bash executors became its own seam.
Dev Note
Working context for maintainers — click to expand
None.