




















@@ -20,8 +20,7 @@ const mocks = vi.hoisted(() => ({
2020realtimeHandlerRegisterToolHandler: vi.fn(),
2121realtimeHandlerSetPublicUrl: vi.fn(),
2222resolveConfiguredRealtimeVoiceProvider: vi.fn(),
23-getActiveMemorySearchManager: vi.fn(),
24-memorySearch: vi.fn(),
23+resolveRealtimeFastContextConsult: vi.fn(),
2524startTunnel: vi.fn(),
2625setupTailscaleExposure: vi.fn(),
2726cleanupTailscaleExposure: vi.fn(),
@@ -74,6 +73,10 @@ vi.mock("./realtime-voice.runtime.js", () => ({
7473resolveConfiguredRealtimeVoiceProvider: mocks.resolveConfiguredRealtimeVoiceProvider,
7574}));
767576+vi.mock("./realtime-fast-context.js", () => ({
77+resolveRealtimeFastContextConsult: mocks.resolveRealtimeFastContextConsult,
78+}));
79+7780vi.mock("./webhook/realtime-handler.js", () => ({
7881RealtimeCallHandler: class {
7982constructor(...args: unknown[]) {
@@ -84,10 +87,6 @@ vi.mock("./webhook/realtime-handler.js", () => ({
8487},
8588}));
868987-vi.mock("openclaw/plugin-sdk/memory-host-search", () => ({
88-getActiveMemorySearchManager: mocks.getActiveMemorySearchManager,
89-}));
90-9190vi.mock("./tunnel.js", () => ({
9291startTunnel: mocks.startTunnel,
9392}));
@@ -155,14 +154,8 @@ describe("createVoiceCallRuntime lifecycle", () => {
155154provider: { id: "openai" },
156155providerConfig: { model: "gpt-realtime" },
157156});
158-mocks.getActiveMemorySearchManager.mockReset();
159-mocks.memorySearch.mockReset();
160-mocks.getActiveMemorySearchManager.mockResolvedValue({
161-manager: {
162-search: mocks.memorySearch,
163-},
164-});
165-mocks.memorySearch.mockResolvedValue([]);
157+mocks.resolveRealtimeFastContextConsult.mockReset();
158+mocks.resolveRealtimeFastContextConsult.mockResolvedValue({ handled: false });
166159mocks.startTunnel.mockResolvedValue(null);
167160mocks.setupTailscaleExposure.mockResolvedValue(null);
168161mocks.cleanupTailscaleExposure.mockResolvedValue(undefined);
@@ -499,16 +492,12 @@ describe("createVoiceCallRuntime lifecycle", () => {
499492to: "+15550009999",
500493transcript: [],
501494});
502-mocks.memorySearch.mockResolvedValue([
503-{
504-source: "memory",
505-path: "MEMORY.md",
506-startLine: 12,
507-endLine: 14,
508-score: 0.91,
509-snippet: "The caller's basement lights are on.",
495+mocks.resolveRealtimeFastContextConsult.mockResolvedValue({
496+handled: true,
497+result: {
498+text: "Fast OpenClaw memory or session context found.\nThe caller's basement lights are on.",
510499},
511-]);
500+});
512501513502await createVoiceCallRuntime({
514503 config,
@@ -528,10 +517,19 @@ describe("createVoiceCallRuntime lifecycle", () => {
528517text: expect.stringContaining("The caller's basement lights are on."),
529518},
530519);
531-expect(mocks.memorySearch).toHaveBeenCalledWith("Are the basement lights on?", {
532-maxResults: 2,
520+expect(mocks.resolveRealtimeFastContextConsult).toHaveBeenCalledWith({
521+cfg: {},
522+agentId: "main",
523+args: { question: "Are the basement lights on?" },
524+config: {
525+enabled: true,
526+fallbackToConsult: false,
527+maxResults: 2,
528+sources: ["memory"],
529+timeoutMs: 800,
530+},
531+logger: expect.any(Object),
533532sessionKey: "voice:15550001234",
534-sources: ["memory"],
535533});
536534expect(runEmbeddedPiAgent).not.toHaveBeenCalled();
537535});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。