fix(ralph-loop): skip idle continuation during background tasks

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
YeonGyu-Kim
2026-04-27 17:52:45 +09:00
parent f429e539fa
commit d0dee70f9d
6 changed files with 22 additions and 3 deletions
@@ -25,7 +25,7 @@ type LoopStateController = {
setVerificationSessionID: (sessionID: string, verificationSessionID: string) => RalphLoopState | null
restartAfterFailedVerification: (sessionID: string, messageCountAtStart?: number) => RalphLoopState | null
}
type RalphLoopEventHandlerOptions = { directory: string; apiTimeoutMs: number; getTranscriptPath: (sessionID: string) => string | undefined; checkSessionExists?: RalphLoopOptions["checkSessionExists"]; sessionRecovery: SessionRecovery; loopState: LoopStateController }
type RalphLoopEventHandlerOptions = { directory: string; apiTimeoutMs: number; getTranscriptPath: (sessionID: string) => string | undefined; checkSessionExists?: RalphLoopOptions["checkSessionExists"]; backgroundManager?: RalphLoopOptions["backgroundManager"]; sessionRecovery: SessionRecovery; loopState: LoopStateController }
export function createRalphLoopEventHandler(
ctx: PluginInput,
@@ -59,6 +59,15 @@ export function createRalphLoopEventHandler(
return
}
const hasRunningBackgroundTasks = options.backgroundManager
? options.backgroundManager.getTasksByParentSession(sessionID).some((task: { status: string }) => task.status === "running")
: false
if (hasRunningBackgroundTasks) {
log(`[${HOOK_NAME}] Skipped: background tasks running`, { sessionID })
return
}
const verificationSessionID = state.verification_pending
? state.verification_session_id
: undefined
+2
View File
@@ -46,6 +46,7 @@ export function createRalphLoopHook(
const getTranscriptPath = options?.getTranscriptPath ?? getDefaultTranscriptPath
const apiTimeout = options?.apiTimeout ?? DEFAULT_API_TIMEOUT
const checkSessionExists = options?.checkSessionExists
const backgroundManager = options?.backgroundManager
const loopState = createLoopStateController({
directory: ctx.directory,
@@ -59,6 +60,7 @@ export function createRalphLoopHook(
apiTimeoutMs: apiTimeout,
getTranscriptPath,
checkSessionExists,
backgroundManager,
sessionRecovery,
loopState,
})
+1
View File
@@ -22,4 +22,5 @@ export interface RalphLoopOptions {
getTranscriptPath?: (sessionId: string) => string
apiTimeout?: number
checkSessionExists?: (sessionId: string) => Promise<boolean>
backgroundManager?: { getTasksByParentSession: (sessionId: string) => Array<{ status: string }> }
}