fix(skill-mcp-manager): remove process listeners on disconnect and guard connection races

H7: Process 'exit'/'SIGINT' listeners registered per-session were
never removed when all sessions disconnected, accumulating handlers.
- Add unregisterProcessCleanup() called in disconnectAll()

H8: Race condition where disconnectSession() during pending connection
left orphan clients in state.clients.
- Add disconnectedSessions Set to track mid-flight disconnects
- Check disconnect marker after connection resolves, close if stale
- Clear marker on reconnection for same session

Tests: 6 pass (3 disconnect + 3 race)
This commit is contained in:
YeonGyu-Kim
2026-03-11 20:10:34 +09:00
parent fed720dd11
commit d1fc6629c2
6 changed files with 301 additions and 2 deletions
@@ -10,6 +10,7 @@ export class SkillMcpManager {
private readonly state: SkillMcpManagerState = {
clients: new Map(),
pendingConnections: new Map(),
disconnectedSessions: new Set(),
authProviders: new Map(),
cleanupRegistered: false,
cleanupInterval: null,