The cross-spawn spawner relied on the 'close' event to mark a process as
complete. In Node.js, 'close' fires only after all stdio streams are closed.
When a shell spawns a background child (e.g., 'cmd &'), the child inherits
stdout/stderr pipe descriptors, keeping the streams open even after the shell
exits. This caused the 'close' event to never fire, making the bash tool hang
indefinitely.
Switching to the 'exit' event resolves this — it fires as soon as the
process terminates, regardless of inherited pipe descriptors.