fix: address bugbot review comments on lifecycle JSONL detection

- Pass config.readyThresholdMs to getActivityState() for consistency
- Fix idle-but-running test to exercise fallback path (getActivityState → null)
- Deduplicate identical exited tests; replace duplicate with fallback-path test

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Prateek 2026-03-01 19:56:23 +05:30
parent 520e0b861c
commit 2598d98f34
2 changed files with 8 additions and 5 deletions

View File

@ -227,7 +227,7 @@ describe("check (single session)", () => {
expect(lm.getStates().get("app-1")).toBe("killed");
});
it("detects killed state when agent process exits (idle terminal + dead process)", async () => {
it("detects killed state when getActivityState returns exited", async () => {
vi.mocked(mockAgent.getActivityState).mockResolvedValue({ state: "exited" });
const session = makeSession({ status: "working" });
@ -251,8 +251,10 @@ describe("check (single session)", () => {
expect(lm.getStates().get("app-1")).toBe("killed");
});
it("detects killed state when agent process exits (active terminal + dead process)", async () => {
vi.mocked(mockAgent.getActivityState).mockResolvedValue({ state: "exited" });
it("detects killed via terminal fallback when getActivityState returns null", async () => {
vi.mocked(mockAgent.getActivityState).mockResolvedValue(null);
vi.mocked(mockAgent.detectActivity).mockReturnValue("idle");
vi.mocked(mockAgent.isProcessRunning).mockResolvedValue(false);
const session = makeSession({ status: "working" });
vi.mocked(mockSessionManager.get).mockResolvedValue(session);
@ -275,7 +277,8 @@ describe("check (single session)", () => {
expect(lm.getStates().get("app-1")).toBe("killed");
});
it("stays working when agent is idle but process is still running", async () => {
it("stays working when agent is idle but process is still running (fallback path)", async () => {
vi.mocked(mockAgent.getActivityState).mockResolvedValue(null);
vi.mocked(mockAgent.detectActivity).mockReturnValue("idle");
vi.mocked(mockAgent.isProcessRunning).mockResolvedValue(true);

View File

@ -200,7 +200,7 @@ export function createLifecycleManager(deps: LifecycleManagerDeps): LifecycleMan
if (agent && session.runtimeHandle) {
try {
// Try JSONL-based activity detection first (reads agent's session files directly)
const activityState = await agent.getActivityState(session);
const activityState = await agent.getActivityState(session, config.readyThresholdMs);
if (activityState) {
if (activityState.state === "waiting_input") return "needs_input";
if (activityState.state === "exited") return "killed";