fix: use configured timeout for warning threshold condition

This commit is contained in:
Roo Code 2025-12-06 01:19:35 +00:00
parent e84ea747b4
commit d85a5f2d9e
2 changed files with 21 additions and 15 deletions

View file

@ -467,9 +467,11 @@ describe("Checkpoint functionality", () => {
// Simulate the condition function that runs inside pWaitFor
let warningShown = false
const checkpointTimeoutMs = mockTask.checkpointTimeout * 1000 // 15000ms
const simulateConditionCheck = (elapsedMs: number) => {
// This simulates what happens inside the pWaitFor condition function (lines 85-100)
if (!warningShown && elapsedMs >= 5000) {
// The warning is shown when elapsed time exceeds the configured timeout
if (!warningShown && elapsedMs >= checkpointTimeoutMs) {
warningShown = true
// This is what the actual code does at line 91-94
const provider = mockTask.providerRef.deref()
@ -484,20 +486,20 @@ describe("Checkpoint functionality", () => {
return !!mockTask.checkpointService && !!mockTask.checkpointService.isInitialized
}
// Test: At 4 seconds, no warning should be sent
expect(simulateConditionCheck(4000)).toBe(false)
// Test: At 14 seconds (just under configured timeout of 15s), no warning should be sent
expect(simulateConditionCheck(14000)).toBe(false)
expect(mockProvider.postMessageToWebview).not.toHaveBeenCalled()
// Test: At 5 seconds, warning should be sent with configured timeout (15 seconds)
expect(simulateConditionCheck(5000)).toBe(false)
// Test: At 15 seconds (configured timeout), warning should be sent with configured timeout
expect(simulateConditionCheck(15000)).toBe(false)
expect(mockProvider.postMessageToWebview).toHaveBeenCalledWith({
type: "checkpointInitWarning",
checkpointWarning: "Checkpoint initialization is taking longer than 15 seconds...",
})
// Test: At 6 seconds, warning should not be sent again (warningShown is true)
// Test: At 16 seconds, warning should not be sent again (warningShown is true)
vi.clearAllMocks()
expect(simulateConditionCheck(6000)).toBe(false)
expect(simulateConditionCheck(16000)).toBe(false)
expect(mockProvider.postMessageToWebview).not.toHaveBeenCalled()
})
@ -559,12 +561,16 @@ describe("Checkpoint functionality", () => {
})
})
it("should use WARNING_THRESHOLD_MS constant of 5000ms", () => {
// Verify the warning threshold is 5 seconds - this determines WHEN to show the warning
// but the timeout value shown to user should be the configured checkpointTimeout
const WARNING_THRESHOLD_MS = 5000
expect(WARNING_THRESHOLD_MS).toBe(5000)
expect(WARNING_THRESHOLD_MS / 1000).toBe(5) // Used to check elapsed time
it("should use configured checkpointTimeout for warning threshold", () => {
// The warning threshold now uses the configured checkpointTimeout value
// This ensures the warning message matches when it actually appears
mockTask.checkpointTimeout = 15
const checkpointTimeoutMs = mockTask.checkpointTimeout * 1000
expect(checkpointTimeoutMs).toBe(15000)
mockTask.checkpointTimeout = 30
const checkpointTimeoutMs30 = mockTask.checkpointTimeout * 1000
expect(checkpointTimeoutMs30).toBe(30000)
})
it("should convert checkpointTimeout to milliseconds", () => {

View file

@ -83,8 +83,8 @@ export async function getCheckpointService(task: Task, { interval = 250 }: { int
() => {
const elapsed = Date.now() - checkpointInitStartTime
// Show warning if we're past the threshold and haven't shown it yet
if (!warningShown && elapsed >= WARNING_THRESHOLD_MS) {
// Show warning if we're past the configured timeout and haven't shown it yet
if (!warningShown && elapsed >= checkpointTimeoutMs) {
warningShown = true
sendCheckpointInitWarn(task, "WAIT_TIMEOUT", task.checkpointTimeout)
}