fix(web): isolate rectification answers from tool-step planning text

Mastra intermediate text-delta was published as answer.delta, then set-focus domain errors reset the attempt and replayed evidence. Publish only the terminal no-tool step, persist the next probe on the server, and ground batch quotes in the source turn.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-08-24 21:26:57 +08:00
parent 167bdad20d
commit fe87a9ecdb
30 changed files with 1373 additions and 237 deletions
@@ -14,7 +14,7 @@ import { loadRuntimeFeatureFlags } from "@/lib/feature-flags";
import { isProductEnabled } from "@/lib/product-access";
import { resolveSessionLanguageModel } from "@/lib/model-catalog";
import { createAdminSupabaseClient } from "@/lib/supabase/admin";
import { createServerSupabaseClient } from "@/lib/supabase/server";
import { defaultMessageOrigin, isRectificationMessageOrigin } from "@/lib/rectification-agentic/v9/message-origin";
export const runtime = "nodejs";
export const maxDuration = 120;
@@ -31,6 +31,15 @@ const agentRequestSchema = z.object({
probeId: z.string().trim().min(1).max(200).nullable().optional(),
optionId: z.enum(["A", "B", "C", "D"]).optional(),
expectedRevision: z.number().int().min(0).max(10_000).optional(),
origin: z.enum([
"typed",
"suggestion_click",
"choice_click",
"voice_input",
"retry_replay",
"system_recovery",
]).optional(),
clientActionId: z.string().uuid().optional(),
}).strict();
function actionToBudget(action: "opening" | "message" | "read_only"): RectificationAgentAction {
@@ -346,6 +355,10 @@ export async function POST(request: Request) {
requestId,
action: actionToBudget(action),
message: action === "message" ? parsed.data.message ?? "" : null,
messageOrigin: isRectificationMessageOrigin(parsed.data.origin)
? parsed.data.origin
: defaultMessageOrigin(action),
clientActionId: parsed.data.clientActionId ?? requestId,
modelName: selectedModel.id,
skillName: RECTIFICATION_SKILL_NAME,
skillVersion: skillVersion || RECTIFICATION_SKILL_VERSION,