fix(todo-continuation-enforcer): persist errorBypass mode until user sends message

Previously, errorBypass mode was cleared on session.idle, causing continuation
to fire again on next idle event. This led to unwanted task resumption after
user abort.

Changes:
- Don't clear errorBypass on session.idle - stay in errorBypass mode
- Clear errorBypass to idle only when user sends a new message

This ensures that once user aborts, the enforcer respects that decision until
the user explicitly sends a message to resume.

🤖 Generated with assistance of OhMyOpenCode (https://github.com/code-yeongyu/oh-my-opencode)
This commit is contained in:
YeonGyu-Kim
2025-12-28 16:38:03 +09:00
parent daa5f6ee5b
commit 5fbcb88a3f

View File

@@ -424,10 +424,9 @@ export function createTodoContinuationEnforcer(
return return
} }
// Skip if in error bypass mode (clear it for next time) // Skip if in error bypass mode (DO NOT clear - wait for user message)
if (state.mode === "errorBypass") { if (state.mode === "errorBypass") {
state.mode = "idle" log(`[${HOOK_NAME}] Skipped: error bypass (awaiting user message to resume)`, { sessionID })
log(`[${HOOK_NAME}] Skipped: error bypass (cleared for next idle)`, { sessionID })
return return
} }
@@ -489,8 +488,13 @@ export function createTodoContinuationEnforcer(
if (!sessionID) return if (!sessionID) return
// User message: Always cancel countdown // User message: Always cancel countdown and clear errorBypass
if (role === "user") { if (role === "user") {
const state = sessions.get(sessionID)
if (state?.mode === "errorBypass") {
state.mode = "idle"
log(`[${HOOK_NAME}] User message cleared errorBypass mode`, { sessionID })
}
invalidate(sessionID, "user message received") invalidate(sessionID, "user message received")
return return
} }