fix(prompt): treat post-dispatch failures as accepted

This commit is contained in:
YeonGyu-Kim
2026-05-20 11:42:32 +09:00
parent f540249838
commit d3e218f912
31 changed files with 503 additions and 76 deletions
+12 -1
View File
@@ -30,6 +30,7 @@ import { getAgentConfigKey } from "../shared/agent-display-names";
import { readConnectedProvidersCache } from "../shared/connected-providers-cache";
import { invalidateContextWindowUsageCache } from "../shared/dynamic-truncator";
import { log } from "../shared/logger";
import { isAmbiguousPostDispatchPromptFailure } from "../shared/prompt-failure-classifier";
import { shouldRetryError } from "../shared/model-error-classifier";
import { buildFallbackChainFromModels } from "../shared/fallback-chain-from-models";
import { extractRetryAttempt, normalizeRetryStatusMessage } from "../shared/retry-status-utils";
@@ -527,6 +528,9 @@ export function createEventHandler(args: {
if (isInternalPromptDispatchAccepted(promptResult)) {
dispatched = true;
} else if (promptResult.status === "failed") {
if (isAmbiguousPostDispatchPromptFailure(promptResult)) {
dispatched = true;
}
const error = promptResult.error;
log("[event] model-fallback promptAsync failed", { sessionID, source, error });
} else {
@@ -546,6 +550,9 @@ export function createEventHandler(args: {
if (isInternalPromptDispatchAccepted(promptResult)) {
dispatched = true;
} else if (promptResult.status === "failed") {
if (isAmbiguousPostDispatchPromptFailure(promptResult)) {
dispatched = true;
}
log("[event] model-fallback prompt failed", { sessionID, source, error: promptResult.error });
} else {
log("[event] model-fallback prompt skipped by gate", { sessionID, source, status: promptResult.status });
@@ -965,7 +972,11 @@ export function createEventHandler(args: {
},
});
if (promptResult.status === "failed") {
log("[event] recovery continue prompt failed", { sessionID, error: promptResult.error });
if (isAmbiguousPostDispatchPromptFailure(promptResult)) {
log("[event] recovery continue prompt may have been accepted before ambiguous failure", { sessionID, error: promptResult.error });
} else {
log("[event] recovery continue prompt failed", { sessionID, error: promptResult.error });
}
} else if (!isInternalPromptDispatchAccepted(promptResult)) {
log("[event] recovery continue prompt skipped by gate", { sessionID, status: promptResult.status });
}