Files
EJClaw/src/message-agent-executor-rules.ts
Eyejoker fbaca3ab68 Retry silent owner capacity failures
Classify Codex selected-model capacity as overloaded and requeue silent owner failures that leave paired tasks active.
2026-05-21 03:46:59 +09:00

58 lines
1.7 KiB
TypeScript

import {
resolveFollowUpDispatch,
resolveNextTurnAction,
shouldRetrySilentOwnerExecution,
} from './message-runtime-rules.js';
import { parseVisibleVerdict } from './paired-verdict.js';
import type { PairedRoomRole, PairedTaskStatus } from './types.js';
export {
isRetryableClaudeSessionFailureAttempt,
resolveAttemptRetryAction,
resolveClaudeRetryTrigger,
resolveCodexRetryTrigger,
type AttemptRetryAction,
type AttemptRetryState as ExecutorAttemptState,
type AttemptStreamedTrigger as ExecutorStreamedTrigger,
} from './agent-attempt-retry.js';
export type PairedFollowUpQueueAction = 'pending' | 'none';
export function resolvePairedFollowUpQueueAction(args: {
completedRole: PairedRoomRole;
executionStatus: 'succeeded' | 'failed';
sawOutput: boolean;
taskStatus: PairedTaskStatus | null;
outputSummary?: string | null;
}): PairedFollowUpQueueAction {
if (
shouldRetrySilentOwnerExecution({
completedRole: args.completedRole,
executionStatus: args.executionStatus,
sawOutput: args.sawOutput,
taskStatus: args.taskStatus,
})
) {
return 'pending';
}
const nextTurnAction = resolveNextTurnAction({
taskStatus: args.taskStatus,
lastTurnOutputRole: args.sawOutput ? args.completedRole : null,
lastTurnOutputVerdict:
args.sawOutput && args.outputSummary
? parseVisibleVerdict(args.outputSummary)
: null,
});
const dispatch = resolveFollowUpDispatch({
source: 'executor-recovery',
nextTurnAction,
completedRole: args.completedRole,
executionStatus: args.executionStatus,
sawOutput: args.sawOutput,
});
return dispatch.kind === 'enqueue' &&
dispatch.queueKind === 'paired-follow-up'
? 'pending'
: 'none';
}