























@@ -43,6 +43,83 @@ vi.mock("../icons.ts", () => ({
4343icons: {},
4444}));
454546+vi.mock("../chat/build-chat-items.ts", () => ({
47+buildChatItems: (props: {
48+messages: unknown[];
49+stream: string | null;
50+streamStartedAt: number | null;
51+}) => {
52+if (props.messages.length > 0) {
53+return [
54+{
55+kind: "group",
56+key: "group:assistant:test",
57+role: "assistant",
58+messages: props.messages.map((message, index) => ({
59+key: `message:${index}`,
60+ message,
61+})),
62+timestamp: 1,
63+isStreaming: false,
64+},
65+];
66+}
67+if (props.stream !== null) {
68+return props.stream
69+ ? [
70+{
71+kind: "stream",
72+key: "stream:test",
73+text: props.stream,
74+startedAt: props.streamStartedAt ?? 1,
75+},
76+]
77+ : [{ kind: "reading-indicator", key: "reading:test" }];
78+}
79+return [];
80+},
81+}));
82+83+vi.mock("../chat/grouped-render.ts", () => ({
84+renderMessageGroup: (group: { messages: Array<{ message: unknown }> }) => {
85+const element = document.createElement("div");
86+element.className = "chat-group";
87+element.textContent = group.messages
88+.map(({ message }) => {
89+if (typeof message === "object" && message !== null && "content" in message) {
90+const content = (message as { content?: unknown }).content;
91+if (typeof content === "string") {
92+return content;
93+}
94+return content == null ? "" : JSON.stringify(content);
95+}
96+return String(message);
97+})
98+.join("\n");
99+return element;
100+},
101+renderReadingIndicatorGroup: () => {
102+const element = document.createElement("div");
103+element.className = "chat-reading-indicator";
104+return element;
105+},
106+renderStreamingGroup: (text: string) => {
107+const element = document.createElement("div");
108+element.className = "chat-stream";
109+element.textContent = text;
110+return element;
111+},
112+}));
113+114+vi.mock("../markdown.ts", () => ({
115+toSanitizedMarkdownHtml: (value: string) => value,
116+}));
117+118+vi.mock("../chat/tool-expansion-state.ts", () => ({
119+getExpandedToolCards: () => new Map<string, boolean>(),
120+syncToolCardExpansionState: () => undefined,
121+}));
122+46123vi.mock("../controllers/agents.ts", () => ({
47124refreshVisibleToolsEffectiveForCurrentSession: refreshVisibleToolsEffectiveForCurrentSessionMock,
48125}));
@@ -454,8 +531,16 @@ describe("chat welcome", () => {
454531});
455532456533describe("chat session controls", () => {
457-it("patches the current session model from the chat header picker", async () => {
534+it("patches the current session model and refreshes active tool visibility", async () => {
458535const { state, request } = createChatHeaderState();
536+state.agentsPanel = "tools";
537+state.agentsSelectedId = "main";
538+state.toolsEffectiveResultKey = "main:main";
539+state.toolsEffectiveResult = {
540+agentId: "main",
541+profile: "coding",
542+groups: [],
543+};
459544const container = document.createElement("div");
460545render(renderChatSessionSelect(state), container);
461546@@ -477,29 +562,6 @@ describe("chat session controls", () => {
477562expect(loadSessionsMock).toHaveBeenCalledTimes(1);
478563expect(state.sessionsResult?.sessions[0]?.model).toBe("gpt-5-mini");
479564expect(state.sessionsResult?.sessions[0]?.modelProvider).toBe("openai");
480-});
481-482-it("reloads effective tools after a chat-header model switch for the active tools panel", async () => {
483-const { state, request } = createChatHeaderState();
484-state.agentsPanel = "tools";
485-state.agentsSelectedId = "main";
486-state.toolsEffectiveResultKey = "main:main";
487-state.toolsEffectiveResult = {
488-agentId: "main",
489-profile: "coding",
490-groups: [],
491-};
492-const container = document.createElement("div");
493-render(renderChatSessionSelect(state), container);
494-495-const modelSelect = container.querySelector<HTMLSelectElement>(
496-'select[data-chat-model-select="true"]',
497-);
498-expect(modelSelect).not.toBeNull();
499-500-modelSelect!.value = "openai/gpt-5-mini";
501-modelSelect!.dispatchEvent(new Event("change", { bubbles: true }));
502-await flushTasks();
503565expect(request).toHaveBeenCalledWith("tools.effective", {
504566agentId: "main",
505567sessionKey: "main",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。