From 4a804503b6b5956e35a0429096bc9c75725405e5 Mon Sep 17 00:00:00 2001 From: Prateek Date: Fri, 13 Feb 2026 18:13:58 +0530 Subject: [PATCH] fix: execute all-complete reaction and guard workspace postCreate - summary.all_complete reactions now execute in pollAll() after emission - workspace.postCreate errors trigger workspace cleanup to prevent leaks Co-Authored-By: Claude Opus 4.6 --- packages/core/src/lifecycle-manager.ts | 9 +++++++++ packages/core/src/session-manager.ts | 13 +++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/core/src/lifecycle-manager.ts b/packages/core/src/lifecycle-manager.ts index afd4d3675..df5507ddc 100644 --- a/packages/core/src/lifecycle-manager.ts +++ b/packages/core/src/lifecycle-manager.ts @@ -446,6 +446,15 @@ export function createLifecycleManager(deps: LifecycleManagerDeps): LifecycleMan }); eventBus.emit(event); emitToHandlers(event); + + // Execute all-complete reaction if configured + const reactionKey = eventToReactionKey("summary.all_complete"); + if (reactionKey) { + const reactionConfig = config.reactions[reactionKey]; + if (reactionConfig && reactionConfig.auto !== false && reactionConfig.action) { + await executeReaction(event, reactionKey, reactionConfig as ReactionConfig); + } + } } } catch { // Poll cycle failed — will retry next interval diff --git a/packages/core/src/session-manager.ts b/packages/core/src/session-manager.ts index 733ce3c62..15f82b186 100644 --- a/packages/core/src/session-manager.ts +++ b/packages/core/src/session-manager.ts @@ -184,9 +184,18 @@ export function createSessionManager(deps: SessionManagerDeps): SessionManager { }); workspacePath = wsInfo.path; - // Run post-create hooks + // Run post-create hooks — clean up workspace on failure if (plugins.workspace.postCreate) { - await plugins.workspace.postCreate(wsInfo, project); + try { + await plugins.workspace.postCreate(wsInfo, project); + } catch (err) { + try { + await plugins.workspace.destroy(workspacePath); + } catch { + /* best effort */ + } + throw err; + } } }