fix(rectification): render adoption carrier on deterministic choice path
This commit is contained in:
@@ -5,7 +5,6 @@ import {
|
||||
evidenceLedgerFingerprint,
|
||||
loadV9CaseCompute,
|
||||
loadV9CaseDossier,
|
||||
loadV9TurnReceipt,
|
||||
persistV9DeterministicTurn,
|
||||
RectificationToolServiceError,
|
||||
transitionV9CaseStatus,
|
||||
@@ -686,14 +685,10 @@ export async function POST(request: Request) {
|
||||
);
|
||||
}
|
||||
try {
|
||||
const receipt = await loadV9TurnReceipt(accounting as never, userId, caseId, result.turnId);
|
||||
const exit = await ensureNonTerminalTurnExit({
|
||||
accounting: accounting as never,
|
||||
userId,
|
||||
caseId,
|
||||
adoptCarrierReady: Boolean(receipt?.toolActivities.some((activity) => (
|
||||
activity.tool === "rectification-offer-candidates" && activity.status === "completed"
|
||||
))),
|
||||
});
|
||||
idleHostNarration = exit.hostNarration ?? idleHostNarration;
|
||||
} catch (error) {
|
||||
|
||||
@@ -15,6 +15,7 @@ import { choiceCardFromCaseDossier, decideFromDossier, overlayPublicDecision } f
|
||||
import { projectCurrentQuestion } from "@/lib/rectification-agentic/v9/turn-decision";
|
||||
import { previousInferenceFromReceipt } from "@/lib/rectification-agentic/v9/inference-adapter";
|
||||
import { publicDecisionFields } from "@/lib/rectification-agentic/core/rectification-decision";
|
||||
import { slimDecisionReceipt } from "@/lib/rectification-agentic/v9/case-receipt-projection";
|
||||
|
||||
export const runtime = "nodejs";
|
||||
|
||||
@@ -49,7 +50,9 @@ export async function GET(request: Request, context: RouteContext) {
|
||||
if (!z.string().uuid().safeParse(caseId).success) {
|
||||
return NextResponse.json({ error: "请求内容不正确", code: "invalid_case_id" }, { status: 400 });
|
||||
}
|
||||
const sessionId = new URL(request.url).searchParams.get("sessionId") ?? "";
|
||||
const searchParams = new URL(request.url).searchParams;
|
||||
const sessionId = searchParams.get("sessionId") ?? "";
|
||||
const fullDetail = searchParams.get("detail") === "full";
|
||||
|
||||
try {
|
||||
const dossier = await loadV9CaseDossier(accounting, user.id, caseId);
|
||||
@@ -66,7 +69,7 @@ export async function GET(request: Request, context: RouteContext) {
|
||||
}
|
||||
}),
|
||||
);
|
||||
return NextResponse.json(dossierResponse(dossier, receipts, skillIdentity));
|
||||
return NextResponse.json(dossierResponse(dossier, receipts, skillIdentity, { fullDetail }));
|
||||
} catch (error) {
|
||||
if (error instanceof RectificationToolServiceError) {
|
||||
const message = error.message;
|
||||
@@ -85,6 +88,7 @@ function dossierResponse(
|
||||
dossier: V9CaseDossier,
|
||||
receipts: Array<Awaited<ReturnType<typeof loadV9TurnReceipt>>>,
|
||||
skillIdentity: Awaited<ReturnType<typeof loadV9CaseSkillIdentityStatus>>,
|
||||
options: { fullDetail?: boolean } = {},
|
||||
) {
|
||||
const decision = decideFromDossier(dossier, {
|
||||
currentEvidenceFingerprint: evidenceLedgerFingerprint(dossier.evidence),
|
||||
@@ -115,13 +119,30 @@ function dossierResponse(
|
||||
receipt: turnReceipt(turn.id, receipts),
|
||||
})),
|
||||
evidence: dossier.evidence,
|
||||
latest_result: dossier.latestResult ? overlayPublicDecision(dossier.latestResult, decision) : null,
|
||||
latest_result: dossier.latestResult
|
||||
? publicLatestResult(dossier.latestResult, decision, dossier, options.fullDetail === true)
|
||||
: null,
|
||||
interview: publicDecisionFields(decision),
|
||||
current_question: projectCurrentQuestion(dossier.conversationSummary.activeFocus),
|
||||
choice_card: choiceCardFromCaseDossier(dossier),
|
||||
};
|
||||
}
|
||||
|
||||
function publicLatestResult(
|
||||
latest: V9CaseDossier["latestResult"],
|
||||
decision: ReturnType<typeof decideFromDossier>,
|
||||
dossier: V9CaseDossier,
|
||||
fullDetail: boolean,
|
||||
) {
|
||||
if (!latest) return null;
|
||||
const projected = overlayPublicDecision(latest, decision);
|
||||
if (fullDetail || !projected.decisionReceipt) return projected;
|
||||
return {
|
||||
...projected,
|
||||
decisionReceipt: slimDecisionReceipt(projected.decisionReceipt, dossier),
|
||||
};
|
||||
}
|
||||
|
||||
function turnReceipt(
|
||||
turnId: string,
|
||||
receipts: Array<Awaited<ReturnType<typeof loadV9TurnReceipt>>>,
|
||||
|
||||
Reference in New Issue
Block a user