




















@@ -5,13 +5,8 @@ const { getMemorySearchManagerMock } = vi.hoisted(() => ({
55getMemorySearchManagerMock: vi.fn(),
66}));
778-const { resolveActiveMemoryBackendConfigMock } = vi.hoisted(() => ({
9-resolveActiveMemoryBackendConfigMock: vi.fn(),
10-}));
11-128vi.mock("../plugins/memory-runtime.js", () => ({
139getActiveMemorySearchManager: getMemorySearchManagerMock,
14-resolveActiveMemoryBackendConfig: resolveActiveMemoryBackendConfigMock,
1510}));
16111712import { startGatewayMemoryBackend } from "./server-startup-memory.js";
@@ -30,11 +25,6 @@ function createGatewayLogMock() {
3025describe("startGatewayMemoryBackend", () => {
3126beforeEach(() => {
3227getMemorySearchManagerMock.mockClear();
33-resolveActiveMemoryBackendConfigMock.mockReset();
34-resolveActiveMemoryBackendConfigMock.mockImplementation(({ cfg }: { cfg: OpenClawConfig }) => ({
35-backend: cfg.memory?.backend === "qmd" ? "qmd" : "builtin",
36-qmd: cfg.memory?.backend === "qmd" ? {} : undefined,
37-}));
3828});
39294030it("skips initialization when memory backend is not qmd", async () => {
@@ -51,8 +41,14 @@ describe("startGatewayMemoryBackend", () => {
5141expect(log.warn).not.toHaveBeenCalled();
5242});
534354-it("initializes qmd backend for each configured agent", async () => {
55-const cfg = createQmdConfig({ list: [{ id: "ops", default: true }, { id: "main" }] });
44+it("initializes qmd backend for the default and explicitly configured agents", async () => {
45+const cfg = createQmdConfig({
46+list: [
47+{ id: "ops", default: true },
48+{ id: "main", memorySearch: { enabled: true } },
49+{ id: "lazy" },
50+],
51+});
5652const log = createGatewayLogMock();
5753getMemorySearchManagerMock.mockResolvedValue({ manager: { search: vi.fn() } });
5854@@ -61,15 +57,41 @@ describe("startGatewayMemoryBackend", () => {
6157expect(getMemorySearchManagerMock).toHaveBeenCalledTimes(2);
6258expect(getMemorySearchManagerMock).toHaveBeenNthCalledWith(1, { cfg, agentId: "ops" });
6359expect(getMemorySearchManagerMock).toHaveBeenNthCalledWith(2, { cfg, agentId: "main" });
64-expect(log.info).toHaveBeenCalledTimes(1);
6560expect(log.info).toHaveBeenCalledWith(
6661'qmd memory startup initialization armed for 2 agents: "ops", "main"',
6762);
63+expect(log.info).toHaveBeenCalledWith(
64+'qmd memory startup initialization deferred for 1 agent: "lazy"',
65+);
6866expect(log.warn).not.toHaveBeenCalled();
6967});
706869+it("initializes all qmd agents when memory search is explicitly enabled in defaults", async () => {
70+const cfg = createQmdConfig({
71+defaults: { memorySearch: { enabled: true } },
72+list: [{ id: "ops", default: true }, { id: "main" }],
73+});
74+const log = createGatewayLogMock();
75+getMemorySearchManagerMock.mockResolvedValue({ manager: { search: vi.fn() } });
76+77+await startGatewayMemoryBackend({ cfg, log });
78+79+expect(getMemorySearchManagerMock).toHaveBeenCalledTimes(2);
80+expect(getMemorySearchManagerMock).toHaveBeenNthCalledWith(1, { cfg, agentId: "ops" });
81+expect(getMemorySearchManagerMock).toHaveBeenNthCalledWith(2, { cfg, agentId: "main" });
82+expect(log.info).toHaveBeenCalledWith(
83+'qmd memory startup initialization armed for 2 agents: "ops", "main"',
84+);
85+expect(log.info).not.toHaveBeenCalledWith(expect.stringContaining("deferred"));
86+});
87+7188it("logs a warning when qmd manager init fails and continues with other agents", async () => {
72-const cfg = createQmdConfig({ list: [{ id: "main", default: true }, { id: "ops" }] });
89+const cfg = createQmdConfig({
90+list: [
91+{ id: "main", default: true },
92+{ id: "ops", memorySearch: { enabled: true } },
93+],
94+});
7395const log = createGatewayLogMock();
7496getMemorySearchManagerMock
7597.mockResolvedValueOnce({ manager: null, error: "qmd missing" })
@@ -105,4 +127,23 @@ describe("startGatewayMemoryBackend", () => {
105127);
106128expect(log.warn).not.toHaveBeenCalled();
107129});
130+131+it("does not initialize qmd managers when background work is disabled", async () => {
132+const cfg = {
133+agents: { list: [{ id: "main", default: true }] },
134+memory: {
135+backend: "qmd",
136+qmd: {
137+update: { onBoot: false, interval: "0s", embedInterval: "0s" },
138+},
139+},
140+} as OpenClawConfig;
141+const log = createGatewayLogMock();
142+143+await startGatewayMemoryBackend({ cfg, log });
144+145+expect(getMemorySearchManagerMock).not.toHaveBeenCalled();
146+expect(log.info).not.toHaveBeenCalled();
147+expect(log.warn).not.toHaveBeenCalled();
148+});
108149});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。