diff --git a/src/commands/goal/goal.tsx b/src/commands/goal/goal.tsx index 2c2391aad..bdf5d710e 100644 --- a/src/commands/goal/goal.tsx +++ b/src/commands/goal/goal.tsx @@ -45,11 +45,7 @@ function truncateForDisplay(objective: string): string { } function drainGoalContinuationQueue(): void { - removeByFilter( - cmd => - cmd.origin === 'goal-continuation' || - cmd.origin === 'goal-budget-limit', - ); + removeByFilter(cmd => cmd.origin === 'goal-continuation' || cmd.origin === 'goal-budget-limit'); } function formatGoalStatus(): string { diff --git a/src/hooks/useGoalContinuation.ts b/src/hooks/useGoalContinuation.ts index 6f3d1fc8d..e30d0a90d 100644 --- a/src/hooks/useGoalContinuation.ts +++ b/src/hooks/useGoalContinuation.ts @@ -61,9 +61,7 @@ export type UseGoalContinuationOpts = { }) => void } -export function useGoalContinuation( - opts: UseGoalContinuationOpts, -): void { +export function useGoalContinuation(opts: UseGoalContinuationOpts): void { const optsRef = useRef(opts) optsRef.current = opts @@ -88,7 +86,10 @@ export function useGoalContinuation( // Codex parity: continuation only after normal completion. // Aborted turns (Ctrl+C / Escape) must not trigger a new turn. - if (opts.wasAborted) { hookLog('skip: wasAborted=true'); return } + if (opts.wasAborted) { + hookLog('skip: wasAborted=true') + return + } // Already enqueued for this idle window if (enqueuedRef.current) return @@ -102,8 +103,14 @@ export function useGoalContinuation( hookLog('skip: yielding to queued user messages') return } - if (opts.hasActiveLocalJsxUI) { hookLog('skip: activeLocalJsxUI'); return } - if (opts.isInPlanMode) { hookLog('skip: planMode'); return } + if (opts.hasActiveLocalJsxUI) { + hookLog('skip: activeLocalJsxUI') + return + } + if (opts.isInPlanMode) { + hookLog('skip: planMode') + return + } const goal = getGoal() if (!goal) { @@ -120,7 +127,9 @@ export function useGoalContinuation( budgetLimitFiredRef.current = true enqueuedRef.current = true const prompt = buildBudgetLimitPrompt(goal) - logForDebugging('[goal] hook: budget limit reached, injecting wrap-up prompt') + logForDebugging( + '[goal] hook: budget limit reached, injecting wrap-up prompt', + ) enqueue({ value: prompt, mode: 'prompt', @@ -157,7 +166,9 @@ export function useGoalContinuation( persistCurrentGoal() const prompt = buildContinuationPrompt(goal) - logForDebugging(`[goal] hook: enqueuing turn ${turns} for "${goal.objective.slice(0, 60)}"`) + logForDebugging( + `[goal] hook: enqueuing turn ${turns} for "${goal.objective.slice(0, 60)}"`, + ) enqueue({ value: prompt, diff --git a/src/screens/REPL.tsx b/src/screens/REPL.tsx index ca7e16a8f..47ffb2050 100644 --- a/src/screens/REPL.tsx +++ b/src/screens/REPL.tsx @@ -3202,7 +3202,12 @@ export function REPL({ // Auto-pause active /goal when the turn failed due to connectivity. // Continuing immediately after network failures usually burns turns // without progress and can rapidly hit max-turn guards. - if (feature('GOAL') && newMessage.type === 'assistant' && 'isApiErrorMessage' in newMessage && newMessage.isApiErrorMessage) { + if ( + feature('GOAL') && + newMessage.type === 'assistant' && + 'isApiErrorMessage' in newMessage && + newMessage.isApiErrorMessage + ) { const assistantText = getContentText((newMessage.message?.content ?? '') as string | ContentBlockParam[]) ?? ''; const lowerText = assistantText.toLowerCase(); diff --git a/src/services/goal/goalState.ts b/src/services/goal/goalState.ts index 1bc21401d..4215c3a38 100644 --- a/src/services/goal/goalState.ts +++ b/src/services/goal/goalState.ts @@ -135,7 +135,10 @@ export function continueGoalFromMaxTurns(sessionId?: string): GoalState | null { goal.blockedAttempts = 0 goal.lastBlockReason = null goal.updatedAt = now - goalLog('CONTINUE', `turn counter reset, status active (max=${MAX_GOAL_TURNS})`) + goalLog( + 'CONTINUE', + `turn counter reset, status active (max=${MAX_GOAL_TURNS})`, + ) return goal } diff --git a/src/utils/sessionRestore.ts b/src/utils/sessionRestore.ts index bbd2664e2..759ada893 100644 --- a/src/utils/sessionRestore.ts +++ b/src/utils/sessionRestore.ts @@ -477,7 +477,9 @@ export async function processResumedConversation( // eslint-disable-next-line @typescript-eslint/no-require-imports require('../services/goal/goalStorage.js') as typeof import('../services/goal/goalStorage.js') const goalsMap = new Map() - const sid = (opts.sessionIdOverride ?? result.sessionId ?? getSessionId()) as UUID + const sid = (opts.sessionIdOverride ?? + result.sessionId ?? + getSessionId()) as UUID goalsMap.set(sid, result.goal) hydrateGoalFromTranscript(goalsMap, sid) }