fix(rectification): open with batch collect, add skip/decline buttons, keep one spoken sentence (BUG-604, BUG-605, BUG-606)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-09 14:23:37 +08:00
co-authored by Cursor
parent d925251654
commit aa7ccb30b7
57 changed files with 1219 additions and 125 deletions
@@ -36,6 +36,8 @@ import { previousInferenceFromReceipt } from "@/lib/rectification-agentic/v9/inf
import { CHOICE_STOP_LABEL, parseAgentChoiceCopy } from "@/lib/rectification-agentic/v9/choice-card";
import {
classifyRectificationTurnIntent,
isCollectDeclineUtterance,
isCollectSkipUtterance,
optionIdForAnswerClass,
shouldDeclineCollectFocus,
shouldContinueAgentForDatedEvent,
@@ -493,11 +495,30 @@ export async function POST(request: Request) {
return completedMessageResponse(applied.narration, requestId, caseId, applied.turnId);
}
} else if (focus && isCollectFocusSchema(focus.expectedAnswerSchema)) {
const userMessage = parsed.data.message ?? "";
if (isCollectDeclineUtterance(userMessage) || isCollectSkipUtterance(userMessage)) {
const applied = await applyCollectFocusDenial(accounting, {
userId,
caseId,
focusId: focus.id,
status: isCollectSkipUtterance(userMessage) ? "skipped" : "declined",
narrateAdopt,
});
const finished = await persistCollectDenialTurn({
accounting,
userId,
caseId,
requestId,
userMessage,
applied,
});
return completedMessageResponse(finished.streamText, requestId, caseId, finished.turnId);
}
let classified = null;
try {
classified = await classifyRectificationTurnIntent(selectedModel, {
focus,
userMessage: parsed.data.message ?? "",
userMessage,
caseStatus,
signal: request.signal,
});