diff --git a/packages/core/src/lifecycle-manager.ts b/packages/core/src/lifecycle-manager.ts index b2930dc98..1827ed97c 100644 --- a/packages/core/src/lifecycle-manager.ts +++ b/packages/core/src/lifecycle-manager.ts @@ -201,6 +201,15 @@ export function createLifecycleManager(deps: LifecycleManagerDeps): LifecycleMan // empty output means the runtime probe failed, not that the agent exited. if (terminalOutput) { const activity = agent.detectActivity(terminalOutput); + console.log("[LIFECYCLE DEBUG] session:", session.id, "activity:", activity, "hasEsc:", /esc to interrupt/i.test(terminalOutput), "terminalLen:", terminalOutput.length); + // Persist detected activity to metadata so the API can serve it + const projectMetaDir2 = session.projectId + ? join(config.dataDir, `${session.projectId}-sessions`) + : config.dataDir; + const metaDir2 = existsSync(join(projectMetaDir2, session.id)) + ? projectMetaDir2 + : config.dataDir; + updateMetadata(metaDir2, session.id, { activity }); if (activity === "waiting_input") return "needs_input"; // Check whether the agent process is still alive. Some agents diff --git a/packages/core/src/session-manager.ts b/packages/core/src/session-manager.ts index 26adb760c..5abfc871f 100644 --- a/packages/core/src/session-manager.ts +++ b/packages/core/src/session-manager.ts @@ -19,6 +19,7 @@ import type { SessionId, SessionSpawnConfig, SessionStatus, + ActivityState, CleanupResult, OrchestratorConfig, ProjectConfig, @@ -106,7 +107,7 @@ function metadataToSession( id: sessionId, projectId: meta["project"] ?? "", status: validateStatus(meta["status"]), - activity: "idle", + activity: (meta["activity"] as ActivityState) || "idle", branch: meta["branch"] || null, issueId: meta["issue"] || null, pr: meta["pr"]