fix: reflect live workbench turns in session tabs (#1319)

This commit is contained in:
Lyon
2026-06-16 09:03:09 +08:00
committed by GitHub
parent 126ccf73e2
commit c71da8a062
3 changed files with 66 additions and 3 deletions
@@ -2,7 +2,7 @@ import assert from "node:assert/strict";
import test from "node:test";
import type { ChatMessage, ConversationRecord, WorkspaceRecord } from "../src/types/index.ts";
import { defaultProviderProfileOptions, mergeSelectedConversation, normalizeRecentDrafts, normalizeWorkbenchMessageTitle, providerProfileOptionsFromPayload, recordRecentDraft, resolveComposerState, resolveConversationSessionStatus, shouldApplyWorkspaceSnapshot, shouldShowSessionListLoading, sortSessionTabs, workspaceWithClearedActiveTrace } from "../src/stores/workbench-session.ts";
import { defaultProviderProfileOptions, mergeActiveConversationActivity, mergeSelectedConversation, normalizeRecentDrafts, normalizeWorkbenchMessageTitle, providerProfileOptionsFromPayload, recordRecentDraft, resolveComposerState, resolveConversationSessionStatus, shouldApplyWorkspaceSnapshot, shouldShowSessionListLoading, sortSessionTabs, workspaceWithClearedActiveTrace } from "../src/stores/workbench-session.ts";
test("R2 composer ignores stale workspace activeTraceId without verified active message", () => {
const workspace = workspaceRecord({ activeTraceId: "trc_stale", sessionStatus: "running" });
@@ -130,6 +130,24 @@ test("R2 selected workspace stubs cannot clear a running conversation tab", () =
assert.equal(tabs[0]?.label, "保持原始标题");
});
test("R2 active in-flight turn updates the selected session tab before list refresh catches up", () => {
const messages: ChatMessage[] = [
userMessage({ conversationId: "cnv_live", sessionId: "ses_live", text: "立即显示左侧运行态", createdAt: "2026-01-04T00:00:00.000Z" }),
agentMessage({ conversationId: "cnv_live", sessionId: "ses_live", status: "running", traceId: "trc_live", updatedAt: "2026-01-04T00:00:01.000Z" })
];
const merged = mergeActiveConversationActivity([{ conversationId: "cnv_live", sessionId: "ses_live", status: "active", messageCount: 0 }], {
activeConversationId: "cnv_live",
messages,
currentRequest: { conversationId: "cnv_live", sessionId: "ses_live", traceId: "trc_live", status: "running" },
chatPending: true
});
const tabs = sortSessionTabs(merged, "cnv_live");
assert.equal(tabs[0]?.status, "running");
assert.equal(tabs[0]?.running, true);
assert.equal(tabs[0]?.label, "立即显示左侧运行态");
assert.equal(tabs[0]?.messageCount, 2);
});
test("R2 session tabs use conversation status before stale snapshot or message status", () => {
const conversation: ConversationRecord = {
conversationId: "cnv_stale_snapshot",