
















@@ -1634,6 +1634,54 @@ describe("gateway agent handler", () => {
16341634});
16351635});
163616361637+it("does not auto-route voice wake requests with an explicit session key", async () => {
1638+mocks.loadVoiceWakeRoutingConfig.mockResolvedValue({
1639+version: 1,
1640+defaultTarget: { sessionKey: "agent:main:voice" },
1641+routes: [],
1642+updatedAtMs: 0,
1643+});
1644+mocks.resolveVoiceWakeRouteByTrigger.mockReturnValue({ sessionKey: "agent:main:voice" });
1645+1646+mocks.loadSessionEntry.mockImplementation((sessionKey: string) => ({
1647+cfg: {},
1648+storePath: "/tmp/sessions.json",
1649+entry: {
1650+sessionId: "voice-session-id",
1651+updatedAt: Date.now(),
1652+},
1653+canonicalKey: sessionKey,
1654+}));
1655+mocks.updateSessionStore.mockResolvedValue(undefined);
1656+mocks.agentCommand.mockResolvedValue({
1657+payloads: [{ text: "ok" }],
1658+meta: { durationMs: 100 },
1659+});
1660+mocks.loadVoiceWakeRoutingConfig.mockClear();
1661+mocks.resolveVoiceWakeRouteByTrigger.mockClear();
1662+1663+const respond = vi.fn();
1664+await agentHandlers.agent({
1665+params: {
1666+message: "do thing",
1667+sessionKey: "agent:main:research",
1668+voiceWakeTrigger: "robot wake",
1669+idempotencyKey: "test-voice-route-explicit-session",
1670+},
1671+ respond,
1672+context: makeContext(),
1673+req: { type: "req", id: "voice-5", method: "agent" },
1674+client: null,
1675+isWebchatConnect: () => false,
1676+});
1677+1678+await vi.waitFor(() => expect(mocks.agentCommand).toHaveBeenCalled());
1679+const callArgs = mocks.agentCommand.mock.calls.at(-1)?.[0] as { sessionKey?: string };
1680+expect(callArgs.sessionKey).toBe("agent:main:research");
1681+expect(mocks.loadVoiceWakeRoutingConfig).not.toHaveBeenCalled();
1682+expect(mocks.resolveVoiceWakeRouteByTrigger).not.toHaveBeenCalled();
1683+});
1684+16371685it("treats explicit sessionId as an opt-out for voice wake auto-routing", async () => {
16381686mocks.loadVoiceWakeRoutingConfig.mockResolvedValue({
16391687version: 1,
@@ -1657,6 +1705,8 @@ describe("gateway agent handler", () => {
16571705payloads: [{ text: "ok" }],
16581706meta: { durationMs: 100 },
16591707});
1708+mocks.loadVoiceWakeRoutingConfig.mockClear();
1709+mocks.resolveVoiceWakeRouteByTrigger.mockClear();
1660171016611711const respond = vi.fn();
16621712await agentHandlers.agent({
@@ -1669,7 +1719,7 @@ describe("gateway agent handler", () => {
16691719},
16701720 respond,
16711721context: makeContext(),
1672-req: { type: "req", id: "voice-5", method: "agent" },
1722+req: { type: "req", id: "voice-6", method: "agent" },
16731723client: null,
16741724isWebchatConnect: () => false,
16751725});
@@ -1681,6 +1731,7 @@ describe("gateway agent handler", () => {
16811731};
16821732expect(callArgs.sessionId).toBe("caller-selected-session-id");
16831733expect(callArgs.sessionKey).toBe("agent:main:main");
1734+expect(mocks.loadVoiceWakeRoutingConfig).not.toHaveBeenCalled();
16841735expect(mocks.resolveVoiceWakeRouteByTrigger).not.toHaveBeenCalled();
16851736});
16861737此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。