Summary
Plugin subprocesses are not cancelled/terminated when a client disconnects or a request is cancelled, potentially leaving orphan processes.
Evidence
execute_plugin_tool awaits process.communicate() with no cancellation handling.
- No link between request lifecycle and subprocess lifecycle.
Impact
- Orphaned processes and resource leaks under client disconnects or timeouts.
Proposed direction
- Tie subprocess lifetime to request/task cancellation; on cancellation, send terminate then kill after grace period.
- Ensure cleanup paths log and surface structured errors to the client.
Acceptance Criteria
- Cancelling a request or disconnecting closes associated plugin processes promptly.