fix(todo-continuation-enforcer): stop idle continuation after repeated stagnation

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
YeonGyu-Kim
2026-03-08 02:18:08 +09:00
parent ec63a434df
commit 79c271ccf4
2 changed files with 42 additions and 3 deletions
@@ -16,6 +16,7 @@ import {
} from "./constants"
import { isLastAssistantMessageAborted } from "./abort-detection"
import { hasUnansweredQuestion } from "./pending-question-detection"
import { shouldStopForStagnation } from "./stagnation-detection"
import { getIncompleteCount } from "./todo"
import type { MessageInfo, ResolvedMessageInfo, Todo } from "./types"
import type { SessionStateStore } from "./session-state"
@@ -93,12 +94,14 @@ export async function handleSessionIdle(args: {
}
if (!todos || todos.length === 0) {
sessionStateStore.resetContinuationProgress(sessionID)
log(`[${HOOK_NAME}] No todos`, { sessionID })
return
}
const incompleteCount = getIncompleteCount(todos)
if (incompleteCount === 0) {
sessionStateStore.resetContinuationProgress(sessionID)
log(`[${HOOK_NAME}] All todos complete`, { sessionID, total: todos.length })
return
}
@@ -183,6 +186,11 @@ export async function handleSessionIdle(args: {
return
}
const progressUpdate = sessionStateStore.trackContinuationProgress(sessionID, incompleteCount)
if (shouldStopForStagnation({ sessionID, incompleteCount, progressUpdate })) {
return
}
startCountdown({
ctx,
sessionID,