



























@@ -89,6 +89,7 @@ vi.mock("../../agents/agent-scope.js", () => ({
8989resolveAgentWorkspaceDir: (cfg: { agents?: { defaults?: { workspace?: string } } }) =>
9090cfg?.agents?.defaults?.workspace ?? "/tmp/workspace",
9191resolveAgentEffectiveModelPrimary: () => undefined,
92+resolveDefaultAgentId: () => "main",
9293}));
93949495vi.mock("../../auto-reply/reply/session-reset-prompt.js", async () => {
@@ -1682,6 +1683,54 @@ describe("gateway agent handler", () => {
16821683expect(mocks.resolveVoiceWakeRouteByTrigger).not.toHaveBeenCalled();
16831684});
168416851686+it("does not auto-route voice wake requests with another agent's explicit main session", async () => {
1687+mocks.loadVoiceWakeRoutingConfig.mockResolvedValue({
1688+version: 1,
1689+defaultTarget: { sessionKey: "agent:main:voice" },
1690+routes: [],
1691+updatedAtMs: 0,
1692+});
1693+mocks.resolveVoiceWakeRouteByTrigger.mockReturnValue({ sessionKey: "agent:main:voice" });
1694+1695+mocks.loadSessionEntry.mockImplementation((sessionKey: string) => ({
1696+cfg: {},
1697+storePath: "/tmp/sessions.json",
1698+entry: {
1699+sessionId: "voice-session-id",
1700+updatedAt: Date.now(),
1701+},
1702+canonicalKey: sessionKey,
1703+}));
1704+mocks.updateSessionStore.mockResolvedValue(undefined);
1705+mocks.agentCommand.mockResolvedValue({
1706+payloads: [{ text: "ok" }],
1707+meta: { durationMs: 100 },
1708+});
1709+mocks.loadVoiceWakeRoutingConfig.mockClear();
1710+mocks.resolveVoiceWakeRouteByTrigger.mockClear();
1711+1712+const respond = vi.fn();
1713+await agentHandlers.agent({
1714+params: {
1715+message: "do thing",
1716+sessionKey: "agent:ops:main",
1717+voiceWakeTrigger: "robot wake",
1718+idempotencyKey: "test-voice-route-explicit-other-agent-main",
1719+},
1720+ respond,
1721+context: makeContext(),
1722+req: { type: "req", id: "voice-5b", method: "agent" },
1723+client: null,
1724+isWebchatConnect: () => false,
1725+});
1726+1727+await vi.waitFor(() => expect(mocks.agentCommand).toHaveBeenCalled());
1728+const callArgs = mocks.agentCommand.mock.calls.at(-1)?.[0] as { sessionKey?: string };
1729+expect(callArgs.sessionKey).toBe("agent:ops:main");
1730+expect(mocks.loadVoiceWakeRoutingConfig).not.toHaveBeenCalled();
1731+expect(mocks.resolveVoiceWakeRouteByTrigger).not.toHaveBeenCalled();
1732+});
1733+16851734it("treats explicit sessionId as an opt-out for voice wake auto-routing", async () => {
16861735mocks.loadVoiceWakeRoutingConfig.mockResolvedValue({
16871736version: 1,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。