fix: enforce continuation-aware completion gating

This commit is contained in:
YeonGyu-Kim
2026-02-17 14:52:40 +09:00
parent 0e1c55c5cb
commit 3554d86bac
3 changed files with 193 additions and 0 deletions
+21
View File
@@ -1,6 +1,7 @@
import pc from "picocolors"
import type { RunContext, Todo, ChildSession, SessionStatus } from "./types"
import { normalizeSDKResponse } from "../../shared"
import { getContinuationState } from "./continuation-state"
export async function checkCompletionConditions(ctx: RunContext): Promise<boolean> {
try {
@@ -12,6 +13,10 @@ export async function checkCompletionConditions(ctx: RunContext): Promise<boolea
return false
}
if (!areContinuationHooksIdle(ctx)) {
return false
}
return true
} catch (err) {
console.error(pc.red(`[completion] API error: ${err}`))
@@ -19,6 +24,22 @@ export async function checkCompletionConditions(ctx: RunContext): Promise<boolea
}
}
function areContinuationHooksIdle(ctx: RunContext): boolean {
const continuationState = getContinuationState(ctx.directory, ctx.sessionID)
if (continuationState.hasActiveBoulder) {
console.log(pc.dim(" Waiting: boulder continuation is active"))
return false
}
if (continuationState.hasActiveRalphLoop) {
console.log(pc.dim(" Waiting: ralph-loop continuation is active"))
return false
}
return true
}
async function areAllTodosComplete(ctx: RunContext): Promise<boolean> {
const todosRes = await ctx.client.session.todo({
path: { id: ctx.sessionID },