3acc57de8c
Both subagent revivers rebuilt the session but never wired the extension runtime, leaving it pre-init where every action method throws ExtensionRuntimeNotInitializedError. An extension with a tool_call handler touching a runtime action then tripped the fail-closed gate in emitToolCall and blocked every tool, including the hidden yield, so the revived agent could neither finish nor exit and looped until killed. Both the warm lifecycle reviver (executor.ts) and the cold persisted reviver (persisted-revive.ts) now call the shared initializeExtensions helper on the rebuilt session, restoring runtime actions, onError, and the session_start event. Fixes #8824