Use hook-written continuation marker state to gate run completion checks and remove the noisy event-stream shutdown timeout log in run mode.
50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
import { getPlanProgress, readBoulderState } from "../../features/boulder-state"
|
|
import {
|
|
getActiveContinuationMarkerReason,
|
|
isContinuationMarkerActive,
|
|
readContinuationMarker,
|
|
} from "../../features/run-continuation-state"
|
|
import { readState as readRalphLoopState } from "../../hooks/ralph-loop/storage"
|
|
|
|
export interface ContinuationState {
|
|
hasActiveBoulder: boolean
|
|
hasActiveRalphLoop: boolean
|
|
hasHookMarker: boolean
|
|
hasTodoHookMarker: boolean
|
|
hasActiveHookMarker: boolean
|
|
activeHookMarkerReason: string | null
|
|
}
|
|
|
|
export function getContinuationState(directory: string, sessionID: string): ContinuationState {
|
|
const marker = readContinuationMarker(directory, sessionID)
|
|
|
|
return {
|
|
hasActiveBoulder: hasActiveBoulderContinuation(directory, sessionID),
|
|
hasActiveRalphLoop: hasActiveRalphLoopContinuation(directory, sessionID),
|
|
hasHookMarker: marker !== null,
|
|
hasTodoHookMarker: marker?.sources.todo !== undefined,
|
|
hasActiveHookMarker: isContinuationMarkerActive(marker),
|
|
activeHookMarkerReason: getActiveContinuationMarkerReason(marker),
|
|
}
|
|
}
|
|
|
|
function hasActiveBoulderContinuation(directory: string, sessionID: string): boolean {
|
|
const boulder = readBoulderState(directory)
|
|
if (!boulder) return false
|
|
if (!boulder.session_ids.includes(sessionID)) return false
|
|
|
|
const progress = getPlanProgress(boulder.active_plan)
|
|
return !progress.isComplete
|
|
}
|
|
|
|
function hasActiveRalphLoopContinuation(directory: string, sessionID: string): boolean {
|
|
const state = readRalphLoopState(directory)
|
|
if (!state || !state.active) return false
|
|
|
|
if (state.session_id && state.session_id !== sessionID) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|