From 16b452040b0bb2c9c8bc43e8a689424022e8e949 Mon Sep 17 00:00:00 2001 From: Gustavo Madeira Santana Date: Mon, 30 Mar 2026 00:53:45 -0400 Subject: [PATCH] Memory: fix QMD doctor contract typing --- .../memory-core/src/memory/search-manager.test.ts | 14 +++++++++++++- src/commands/doctor-memory-search.test.ts | 14 +++++++++++++- src/plugins/memory-state.ts | 14 +++++++++++--- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/extensions/memory-core/src/memory/search-manager.test.ts b/extensions/memory-core/src/memory/search-manager.test.ts index 7507af19a8a..561ab9733fa 100644 --- a/extensions/memory-core/src/memory/search-manager.test.ts +++ b/extensions/memory-core/src/memory/search-manager.test.ts @@ -1,6 +1,16 @@ import type { OpenClawConfig } from "openclaw/plugin-sdk/memory-core-host-engine-foundation"; import { beforeEach, describe, expect, it, vi } from "vitest"; +type CheckQmdBinaryAvailability = (params: { + command: string; + env: NodeJS.ProcessEnv; + cwd?: string; + timeoutMs?: number; +}) => Promise<{ + available: boolean; + error?: string; +}>; + function createManagerStatus(params: { backend: "qmd" | "builtin"; provider: string; @@ -95,7 +105,9 @@ const fallbackManager = vi.hoisted(() => ({ const fallbackSearch = fallbackManager.search; const mockMemoryIndexGet = vi.hoisted(() => vi.fn(async () => fallbackManager)); const mockCloseAllMemoryIndexManagers = vi.hoisted(() => vi.fn(async () => {})); -const checkQmdBinaryAvailability = vi.hoisted(() => vi.fn(async () => ({ available: true }))); +const checkQmdBinaryAvailability = vi.hoisted(() => + vi.fn(async () => ({ available: true })), +); vi.mock("./qmd-manager.js", () => ({ QmdMemoryManager: { diff --git a/src/commands/doctor-memory-search.test.ts b/src/commands/doctor-memory-search.test.ts index d1908676fdf..83aeb7ecbd0 100644 --- a/src/commands/doctor-memory-search.test.ts +++ b/src/commands/doctor-memory-search.test.ts @@ -2,13 +2,25 @@ import path from "node:path"; import { beforeEach, describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; +type CheckQmdBinaryAvailability = (params: { + command: string; + env: NodeJS.ProcessEnv; + cwd?: string; + timeoutMs?: number; +}) => Promise<{ + available: boolean; + error?: string; +}>; + const note = vi.hoisted(() => vi.fn()); const resolveDefaultAgentId = vi.hoisted(() => vi.fn(() => "agent-default")); const resolveAgentDir = vi.hoisted(() => vi.fn(() => "/tmp/agent-default")); const resolveMemorySearchConfig = vi.hoisted(() => vi.fn()); const resolveApiKeyForProvider = vi.hoisted(() => vi.fn()); const resolveActiveMemoryBackendConfig = vi.hoisted(() => vi.fn()); -const checkQmdBinaryAvailability = vi.hoisted(() => vi.fn(async () => ({ available: true }))); +const checkQmdBinaryAvailability = vi.hoisted(() => + vi.fn(async () => ({ available: true })), +); vi.mock("../terminal/note.js", () => ({ note, diff --git a/src/plugins/memory-state.ts b/src/plugins/memory-state.ts index bfa7b6c3b10..9eed0cd7f08 100644 --- a/src/plugins/memory-state.ts +++ b/src/plugins/memory-state.ts @@ -38,11 +38,19 @@ export type RegisteredMemorySearchManager = { close?(): Promise; }; -export type MemoryRuntimeBackendConfig = { - backend: "builtin" | "qmd"; - qmd?: object; +export type MemoryRuntimeQmdConfig = { + command?: string; }; +export type MemoryRuntimeBackendConfig = + | { + backend: "builtin"; + } + | { + backend: "qmd"; + qmd?: MemoryRuntimeQmdConfig; + }; + export type MemoryPluginRuntime = { getMemorySearchManager(params: { cfg: OpenClawConfig;