ed6300b35e
Keep-alive subagents are handed to AgentLifecycleManager.adopt, which stores their reviver closure in the process-global #adopted map. The closure is defined inside runSubagent's scope, which also captures the live AgentSession (extension-runner callbacks, buildSubagentSessionOptions), so its lexical environment pins the whole session graph. park() disposes and detaches the session but leaves the adoption record indefinitely, and #doDispose never dropped the in-memory transcript, session-manager entries, or the raw-SSE debug buffer (whose trimmed records retain slice() views of full wire frames), so every completed subagent's heavy state leaked for the process lifetime. dispose() is terminal and every revival path reopens from disk, so #doDispose now sheds retained conversation memory via agent.reset(), RawSseDebugBuffer.clear(), and SessionManager.releaseRetainedEntries(). The adoption record can still reference the session, but only as a husk. Fixes #8003