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
@@ -367,7 +367,7 @@ test("D9 differ keeps sign names for the type-table report and still forbids uni
});
assert.equal(plan.next_followup?.source, "varga_observation");
assert.equal(plan.next_followup?.ask_theme, "relationship_style");
assert.match(plan.next_followup?.user_prompt_hint ?? "", /A\/B\/C\/D/);
assert.match(plan.next_followup?.user_prompt_hint ?? "", /已持久化的题干/);
assert.equal(plan.next_followup?.choice_frame?.choice_mode, "A/B/C/D");
assert.doesNotMatch(JSON.stringify(plan), UNIQUE_MINUTE_COPY);
});
@@ -610,6 +610,7 @@ test("accepted batch evidence triggers server rescore without offering adoption"
userId: USER_ID,
caseId: CASE_ID,
turnId: TURN_ID,
userMessage: "2016年6月高考结束",
accounting: accounting.client as never,
});
const result = await (tools["rectification-record-evidence-batch"] as unknown as {
@@ -684,6 +685,7 @@ test("rescore failure does not fail the evidence write", async () => {
userId: USER_ID,
caseId: CASE_ID,
turnId: TURN_ID,
userMessage: "2016年6月高考结束",
accounting: accounting.client as never,
});
const result = await (tools["rectification-record-evidence-batch"] as unknown as {