



























@@ -101,6 +101,98 @@ describe("loadControlUiBootstrapConfig", () => {
101101vi.unstubAllGlobals();
102102});
103103104+it("does not apply default-agent bootstrap identity to an active non-default session", async () => {
105+const fetchMock = vi.fn().mockResolvedValue({
106+ok: true,
107+json: async () => ({
108+basePath: "",
109+assistantName: "AI大管家",
110+assistantAvatar: "M",
111+assistantAgentId: "main",
112+serverVersion: "2026.4.27",
113+localMediaPreviewRoots: ["/tmp/openclaw"],
114+embedSandbox: "trusted",
115+allowExternalEmbedUrls: true,
116+}),
117+});
118+vi.stubGlobal("fetch", fetchMock as unknown as typeof fetch);
119+120+const state = {
121+basePath: "",
122+sessionKey: "agent:fs-daying:main",
123+assistantName: "大颖",
124+assistantAvatar: "D",
125+assistantAvatarSource: null,
126+assistantAvatarStatus: null,
127+assistantAvatarReason: null,
128+assistantAgentId: "fs-daying",
129+localMediaPreviewRoots: [],
130+embedSandboxMode: "scripts" as const,
131+allowExternalEmbedUrls: false,
132+serverVersion: null,
133+};
134+135+await loadControlUiBootstrapConfig(state);
136+137+expect(state.assistantName).toBe("大颖");
138+expect(state.assistantAvatar).toBe("D");
139+expect(state.assistantAgentId).toBe("fs-daying");
140+expect(state.serverVersion).toBe("2026.4.27");
141+expect(state.localMediaPreviewRoots).toEqual(["/tmp/openclaw"]);
142+expect(state.embedSandboxMode).toBe("trusted");
143+expect(state.allowExternalEmbedUrls).toBe(true);
144+145+vi.unstubAllGlobals();
146+});
147+148+it("keeps local assistant avatar override when default-agent bootstrap identity is skipped", async () => {
149+const fetchMock = vi.fn().mockResolvedValue({
150+ok: true,
151+json: async () => ({
152+basePath: "",
153+assistantName: "Main",
154+assistantAvatar: "M",
155+assistantAgentId: "main",
156+serverVersion: "2026.4.27",
157+localMediaPreviewRoots: [],
158+embedSandbox: "scripts",
159+allowExternalEmbedUrls: false,
160+}),
161+});
162+vi.stubGlobal("fetch", fetchMock as unknown as typeof fetch);
163+vi.stubGlobal("localStorage", {
164+getItem: vi.fn(() => JSON.stringify({ avatar: "data:image/png;base64,local" })),
165+setItem: vi.fn(),
166+removeItem: vi.fn(),
167+} as unknown as Storage);
168+169+const state = {
170+basePath: "",
171+sessionKey: "agent:worker:main",
172+assistantName: "Worker",
173+assistantAvatar: "W",
174+assistantAvatarSource: null,
175+assistantAvatarStatus: null,
176+assistantAvatarReason: null,
177+assistantAgentId: "worker",
178+localMediaPreviewRoots: [],
179+embedSandboxMode: "scripts" as const,
180+allowExternalEmbedUrls: false,
181+serverVersion: null,
182+};
183+184+await loadControlUiBootstrapConfig(state);
185+186+expect(state.assistantName).toBe("Worker");
187+expect(state.assistantAvatar).toBe("data:image/png;base64,local");
188+expect(state.assistantAvatarSource).toBe("data:image/png;base64,local");
189+expect(state.assistantAvatarStatus).toBe("data");
190+expect(state.assistantAvatarReason).toBeNull();
191+expect(state.assistantAgentId).toBe("worker");
192+193+vi.unstubAllGlobals();
194+});
195+104196it("ignores failures", async () => {
105197const fetchMock = vi.fn().mockResolvedValue({ ok: false });
106198vi.stubGlobal("fetch", fetchMock as unknown as typeof fetch);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。