fix(webui): keep tool activity in one thought block

This commit is contained in:
Xubin Ren 2026-06-02 15:38:23 +08:00
parent fd61203be4
commit a371907809
2 changed files with 8 additions and 5 deletions

View File

@ -132,7 +132,12 @@ function pushActivityUnits(units: TurnUnit[], activityMessages: UIMessage[], vis
for (const message of activityMessages) { for (const message of activityMessages) {
const bucket = isFileEditActivityMessage(message) ? "file" : "other"; const bucket = isFileEditActivityMessage(message) ? "file" : "other";
const segmentId = message.activitySegmentId; const segmentId = message.activitySegmentId;
const segmentChanged = !!runSegmentId && !!segmentId && runSegmentId !== segmentId; const segmentChanged =
bucket === "file"
&& runBucket === "file"
&& !!runSegmentId
&& !!segmentId
&& runSegmentId !== segmentId;
if ((runBucket && bucket !== runBucket) || segmentChanged) { if ((runBucket && bucket !== runBucket) || segmentChanged) {
flushRun(); flushRun();
} }

View File

@ -102,7 +102,7 @@ describe("ThreadMessages", () => {
expect(units[2].type === "activity" ? units[2].messages.map((m) => m.id) : []).toEqual(["r2"]); expect(units[2].type === "activity" ? units[2].messages.map((m) => m.id) : []).toEqual(["r2"]);
}); });
it("splits ordinary tool activity when segment ids changed", () => { it("keeps ordinary tool activity in one Thought block across segment ids", () => {
const messages: UIMessage[] = [ const messages: UIMessage[] = [
{ {
id: "r1", id: "r1",
@ -142,12 +142,10 @@ describe("ThreadMessages", () => {
const units = buildDisplayUnits(messages); const units = buildDisplayUnits(messages);
expect(units).toHaveLength(2); expect(units).toHaveLength(1);
expect(units[0].type === "activity" ? units[0].messages.map((m) => m.id) : []).toEqual([ expect(units[0].type === "activity" ? units[0].messages.map((m) => m.id) : []).toEqual([
"r1", "r1",
"t1", "t1",
]);
expect(units[1].type === "activity" ? units[1].messages.map((m) => m.id) : []).toEqual([
"r2", "r2",
"t2", "t2",
]); ]);