refactor: improve auto mode service stop logic and event emission

- Updated the stopAutoLoop method to emit the "auto_mode_stopped" event immediately when the loop is explicitly stopped, enhancing event handling.
- Improved code readability by restructuring feature retrieval calls in integration tests for better clarity.
This commit is contained in:
Cody Seibert
2025-12-14 00:51:35 -05:00
parent b52b9ba236
commit 7b3be213e4
2 changed files with 26 additions and 16 deletions

View File

@@ -152,22 +152,27 @@ export class AutoModeService {
} }
this.autoLoopRunning = false; this.autoLoopRunning = false;
this.emitAutoModeEvent("auto_mode_stopped", {
message: "Auto mode stopped",
projectPath: this.config?.projectPath,
});
} }
/** /**
* Stop the auto mode loop * Stop the auto mode loop
*/ */
async stopAutoLoop(): Promise<number> { async stopAutoLoop(): Promise<number> {
const wasRunning = this.autoLoopRunning;
this.autoLoopRunning = false; this.autoLoopRunning = false;
if (this.autoLoopAbortController) { if (this.autoLoopAbortController) {
this.autoLoopAbortController.abort(); this.autoLoopAbortController.abort();
this.autoLoopAbortController = null; this.autoLoopAbortController = null;
} }
// Emit stop event immediately when user explicitly stops
if (wasRunning) {
this.emitAutoModeEvent("auto_mode_stopped", {
message: "Auto mode stopped",
projectPath: this.config?.projectPath,
});
}
return this.runningFeatures.size; return this.runningFeatures.size;
} }

View File

@@ -119,7 +119,10 @@ describe("auto-mode-service.ts (integration)", () => {
); );
// Verify feature status was updated to backlog (error status) // Verify feature status was updated to backlog (error status)
const feature = await featureLoader.get(testRepo.path, "test-feature-error"); const feature = await featureLoader.get(
testRepo.path,
"test-feature-error"
);
expect(feature?.status).toBe("backlog"); expect(feature?.status).toBe("backlog");
}, 30000); }, 30000);
@@ -154,7 +157,10 @@ describe("auto-mode-service.ts (integration)", () => {
); );
// Feature should be updated successfully // Feature should be updated successfully
const feature = await featureLoader.get(testRepo.path, "test-no-worktree"); const feature = await featureLoader.get(
testRepo.path,
"test-no-worktree"
);
expect(feature?.status).toBe("waiting_approval"); expect(feature?.status).toBe("waiting_approval");
}, 30000); }, 30000);
}); });
@@ -313,7 +319,9 @@ describe("auto-mode-service.ts (integration)", () => {
); );
// Should have used claude-sonnet-4-20250514 // Should have used claude-sonnet-4-20250514
expect(ProviderFactory.getProviderForModel).toHaveBeenCalledWith("claude-sonnet-4-20250514"); expect(ProviderFactory.getProviderForModel).toHaveBeenCalledWith(
"claude-sonnet-4-20250514"
);
}, 30000); }, 30000);
}); });
@@ -447,9 +455,11 @@ describe("auto-mode-service.ts (integration)", () => {
await service.stopAutoLoop(); await service.stopAutoLoop();
await startPromise.catch(() => {}); await startPromise.catch(() => {});
// Check stop event was emitted (auto_mode_complete event) // Check stop event was emitted (emitted immediately by stopAutoLoop)
const stopEvent = mockEvents.emit.mock.calls.find((call) => const stopEvent = mockEvents.emit.mock.calls.find(
call[1]?.type === "auto_mode_complete" || call[1]?.message?.includes("stopped") (call) =>
call[1]?.type === "auto_mode_stopped" ||
call[1]?.message?.includes("Auto mode stopped")
); );
expect(stopEvent).toBeTruthy(); expect(stopEvent).toBeTruthy();
}, 10000); }, 10000);
@@ -476,12 +486,7 @@ describe("auto-mode-service.ts (integration)", () => {
); );
// Should not throw // Should not throw
await service.executeFeature( await service.executeFeature(testRepo.path, "error-feature", true, false);
testRepo.path,
"error-feature",
true,
false
);
// Feature should be marked as backlog (error status) // Feature should be marked as backlog (error status)
const feature = await featureLoader.get(testRepo.path, "error-feature"); const feature = await featureLoader.get(testRepo.path, "error-feature");