diff --git a/extensions/memory-core/src/memory/backend-config.ts b/extensions/memory-core/src/memory/backend-config.ts deleted file mode 100644 index e952454d73a..00000000000 --- a/extensions/memory-core/src/memory/backend-config.ts +++ /dev/null @@ -1 +0,0 @@ -export { resolveMemoryBackendConfig } from "openclaw/plugin-sdk/memory-core-host-engine-storage"; diff --git a/extensions/memory-core/src/memory/internal.ts b/extensions/memory-core/src/memory/internal.ts deleted file mode 100644 index 319b9476c52..00000000000 --- a/extensions/memory-core/src/memory/internal.ts +++ /dev/null @@ -1 +0,0 @@ -export { buildFileEntry } from "openclaw/plugin-sdk/memory-core-host-engine-storage"; diff --git a/extensions/memory-core/src/memory/manager-sync-ops.ts b/extensions/memory-core/src/memory/manager-sync-ops.ts index 06db48b7b19..55f9e822c85 100644 --- a/extensions/memory-core/src/memory/manager-sync-ops.ts +++ b/extensions/memory-core/src/memory/manager-sync-ops.ts @@ -25,12 +25,15 @@ import { type SessionFileEntry, } from "openclaw/plugin-sdk/memory-core-host-engine-qmd"; import { + buildFileEntry, ensureDir, ensureMemoryIndexSchema, hashText, isFileMissingError, listMemoryFiles, + loadSqliteVecExtension, normalizeExtraMemoryPaths, + requireNodeSqlite, runWithConcurrency, type MemoryFileEntry, type MemorySource, @@ -43,9 +46,6 @@ import { type EmbeddingProviderRuntime, resolveEmbeddingProviderFallbackModel, } from "./embeddings.js"; -import { buildFileEntry } from "./internal.js"; -import { loadSqliteVecExtension } from "./sqlite-vec.js"; -import { requireNodeSqlite } from "./sqlite.js"; type MemoryIndexMeta = { model: string; diff --git a/extensions/memory-core/src/memory/manager.vector-dedupe.test.ts b/extensions/memory-core/src/memory/manager.vector-dedupe.test.ts index 3620b77fa0c..027095bba37 100644 --- a/extensions/memory-core/src/memory/manager.vector-dedupe.test.ts +++ b/extensions/memory-core/src/memory/manager.vector-dedupe.test.ts @@ -19,11 +19,11 @@ vi.mock("./embeddings.js", () => { }; }); -type MemoryInternalModule = typeof import("./internal.js"); +type MemoryStorageModule = typeof import("openclaw/plugin-sdk/memory-core-host-engine-storage"); type TestManagerModule = typeof import("./test-manager.js"); type MemoryIndexModule = typeof import("./index.js"); -let buildFileEntry: MemoryInternalModule["buildFileEntry"]; +let buildFileEntry: MemoryStorageModule["buildFileEntry"]; let createMemoryManagerOrThrow: TestManagerModule["createMemoryManagerOrThrow"]; let closeAllMemorySearchManagers: MemoryIndexModule["closeAllMemorySearchManagers"]; @@ -55,7 +55,7 @@ describe("memory vector dedupe", () => { beforeEach(async () => { vi.resetModules(); - ({ buildFileEntry } = await import("./internal.js")); + ({ buildFileEntry } = await import("openclaw/plugin-sdk/memory-core-host-engine-storage")); ({ createMemoryManagerOrThrow } = await import("./test-manager.js")); ({ closeAllMemorySearchManagers } = await import("./index.js")); workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-mem-")); diff --git a/extensions/memory-core/src/memory/qmd-manager.ts b/extensions/memory-core/src/memory/qmd-manager.ts index f9666a03a44..839198cf3cb 100644 --- a/extensions/memory-core/src/memory/qmd-manager.ts +++ b/extensions/memory-core/src/memory/qmd-manager.ts @@ -25,6 +25,7 @@ import { } from "openclaw/plugin-sdk/memory-core-host-engine-qmd"; import { isFileMissingError, + requireNodeSqlite, statRegularFile, type MemoryEmbeddingProbeResult, type MemoryProviderStatus, @@ -36,7 +37,6 @@ import { type ResolvedQmdConfig, type ResolvedQmdMcporterConfig, } from "openclaw/plugin-sdk/memory-core-host-engine-storage"; -import { requireNodeSqlite } from "./sqlite.js"; type SqliteDatabase = import("node:sqlite").DatabaseSync; diff --git a/extensions/memory-core/src/memory/sqlite-vec.ts b/extensions/memory-core/src/memory/sqlite-vec.ts deleted file mode 100644 index babed6353f8..00000000000 --- a/extensions/memory-core/src/memory/sqlite-vec.ts +++ /dev/null @@ -1 +0,0 @@ -export { loadSqliteVecExtension } from "openclaw/plugin-sdk/memory-core-host-engine-storage"; diff --git a/extensions/memory-core/src/memory/sqlite.ts b/extensions/memory-core/src/memory/sqlite.ts deleted file mode 100644 index 1a20a483329..00000000000 --- a/extensions/memory-core/src/memory/sqlite.ts +++ /dev/null @@ -1 +0,0 @@ -export { requireNodeSqlite } from "openclaw/plugin-sdk/memory-core-host-engine-storage"; diff --git a/package.json b/package.json index 7d22fc82d53..708713c51d1 100644 --- a/package.json +++ b/package.json @@ -424,14 +424,6 @@ "types": "./dist/plugin-sdk/memory-core-engine-runtime.d.ts", "default": "./dist/plugin-sdk/memory-core-engine-runtime.js" }, - "./plugin-sdk/memory-core-host": { - "types": "./dist/plugin-sdk/memory-core-host.d.ts", - "default": "./dist/plugin-sdk/memory-core-host.js" - }, - "./plugin-sdk/memory-core-host-engine": { - "types": "./dist/plugin-sdk/memory-core-host-engine.d.ts", - "default": "./dist/plugin-sdk/memory-core-host-engine.js" - }, "./plugin-sdk/memory-core-host-engine-embeddings": { "types": "./dist/plugin-sdk/memory-core-host-engine-embeddings.d.ts", "default": "./dist/plugin-sdk/memory-core-host-engine-embeddings.js" @@ -448,9 +440,21 @@ "types": "./dist/plugin-sdk/memory-core-host-engine-storage.d.ts", "default": "./dist/plugin-sdk/memory-core-host-engine-storage.js" }, - "./plugin-sdk/memory-core-host-runtime": { - "types": "./dist/plugin-sdk/memory-core-host-runtime.d.ts", - "default": "./dist/plugin-sdk/memory-core-host-runtime.js" + "./plugin-sdk/memory-core-host-multimodal": { + "types": "./dist/plugin-sdk/memory-core-host-multimodal.d.ts", + "default": "./dist/plugin-sdk/memory-core-host-multimodal.js" + }, + "./plugin-sdk/memory-core-host-query": { + "types": "./dist/plugin-sdk/memory-core-host-query.d.ts", + "default": "./dist/plugin-sdk/memory-core-host-query.js" + }, + "./plugin-sdk/memory-core-host-secret": { + "types": "./dist/plugin-sdk/memory-core-host-secret.d.ts", + "default": "./dist/plugin-sdk/memory-core-host-secret.js" + }, + "./plugin-sdk/memory-core-host-status": { + "types": "./dist/plugin-sdk/memory-core-host-status.d.ts", + "default": "./dist/plugin-sdk/memory-core-host-status.js" }, "./plugin-sdk/memory-core-host-runtime-cli": { "types": "./dist/plugin-sdk/memory-core-host-runtime-cli.d.ts", diff --git a/packages/memory-host-sdk/package.json b/packages/memory-host-sdk/package.json index 66b256c607d..d44507f5396 100644 --- a/packages/memory-host-sdk/package.json +++ b/packages/memory-host-sdk/package.json @@ -12,6 +12,10 @@ "./engine-foundation": "./src/engine-foundation.ts", "./engine-storage": "./src/engine-storage.ts", "./engine-embeddings": "./src/engine-embeddings.ts", - "./engine-qmd": "./src/engine-qmd.ts" + "./engine-qmd": "./src/engine-qmd.ts", + "./multimodal": "./src/multimodal.ts", + "./query": "./src/query.ts", + "./secret": "./src/secret.ts", + "./status": "./src/status.ts" } } diff --git a/packages/memory-host-sdk/src/engine-embeddings.ts b/packages/memory-host-sdk/src/engine-embeddings.ts index bbbcb65b9c7..c18c2c99c73 100644 --- a/packages/memory-host-sdk/src/engine-embeddings.ts +++ b/packages/memory-host-sdk/src/engine-embeddings.ts @@ -13,55 +13,43 @@ export type { MemoryEmbeddingProviderCreateResult, MemoryEmbeddingProviderRuntime, } from "../../../src/plugins/memory-embedding-providers.js"; -export { - createLocalEmbeddingProvider, - DEFAULT_LOCAL_MODEL, -} from "../../../src/plugins/memory-host/embeddings.js"; +export { createLocalEmbeddingProvider, DEFAULT_LOCAL_MODEL } from "./host/embeddings.js"; export { createGeminiEmbeddingProvider, DEFAULT_GEMINI_EMBEDDING_MODEL, buildGeminiEmbeddingRequest, -} from "../../../src/plugins/memory-host/embeddings-gemini.js"; +} from "./host/embeddings-gemini.js"; export { createMistralEmbeddingProvider, DEFAULT_MISTRAL_EMBEDDING_MODEL, -} from "../../../src/plugins/memory-host/embeddings-mistral.js"; +} from "./host/embeddings-mistral.js"; export { createOllamaEmbeddingProvider, DEFAULT_OLLAMA_EMBEDDING_MODEL, -} from "../../../src/plugins/memory-host/embeddings-ollama.js"; +} from "./host/embeddings-ollama.js"; export { createOpenAiEmbeddingProvider, DEFAULT_OPENAI_EMBEDDING_MODEL, -} from "../../../src/plugins/memory-host/embeddings-openai.js"; +} from "./host/embeddings-openai.js"; export { createVoyageEmbeddingProvider, DEFAULT_VOYAGE_EMBEDDING_MODEL, -} from "../../../src/plugins/memory-host/embeddings-voyage.js"; -export { - runGeminiEmbeddingBatches, - type GeminiBatchRequest, -} from "../../../src/plugins/memory-host/batch-gemini.js"; +} from "./host/embeddings-voyage.js"; +export { runGeminiEmbeddingBatches, type GeminiBatchRequest } from "./host/batch-gemini.js"; export { OPENAI_BATCH_ENDPOINT, runOpenAiEmbeddingBatches, type OpenAiBatchRequest, -} from "../../../src/plugins/memory-host/batch-openai.js"; -export { - runVoyageEmbeddingBatches, - type VoyageBatchRequest, -} from "../../../src/plugins/memory-host/batch-voyage.js"; -export { enforceEmbeddingMaxInputTokens } from "../../../src/plugins/memory-host/embedding-chunk-limits.js"; +} from "./host/batch-openai.js"; +export { runVoyageEmbeddingBatches, type VoyageBatchRequest } from "./host/batch-voyage.js"; +export { enforceEmbeddingMaxInputTokens } from "./host/embedding-chunk-limits.js"; export { estimateStructuredEmbeddingInputBytes, estimateUtf8Bytes, -} from "../../../src/plugins/memory-host/embedding-input-limits.js"; -export { - hasNonTextEmbeddingParts, - type EmbeddingInput, -} from "../../../src/plugins/memory-host/embedding-inputs.js"; +} from "./host/embedding-input-limits.js"; +export { hasNonTextEmbeddingParts, type EmbeddingInput } from "./host/embedding-inputs.js"; export { buildCaseInsensitiveExtensionGlob, classifyMemoryMultimodalPath, getMemoryMultimodalExtensions, -} from "../../../src/plugins/memory-host/multimodal.js"; +} from "./host/multimodal.js"; diff --git a/packages/memory-host-sdk/src/engine-qmd.ts b/packages/memory-host-sdk/src/engine-qmd.ts index 11bb54f0919..47dab78a3f9 100644 --- a/packages/memory-host-sdk/src/engine-qmd.ts +++ b/packages/memory-host-sdk/src/engine-qmd.ts @@ -1,25 +1,16 @@ // Real workspace contract for QMD/session/query helpers used by the memory engine. -export { - extractKeywords, - isQueryStopWordToken, -} from "../../../src/plugins/memory-host/query-expansion.js"; +export { extractKeywords, isQueryStopWordToken } from "./host/query-expansion.js"; export { buildSessionEntry, listSessionFilesForAgent, sessionPathForFile, type SessionFileEntry, -} from "../../../src/plugins/memory-host/session-files.js"; -export { - parseQmdQueryJson, - type QmdQueryResult, -} from "../../../src/plugins/memory-host/qmd-query-parser.js"; +} from "./host/session-files.js"; +export { parseQmdQueryJson, type QmdQueryResult } from "./host/qmd-query-parser.js"; export { deriveQmdScopeChannel, deriveQmdScopeChatType, isQmdScopeAllowed, -} from "../../../src/plugins/memory-host/qmd-scope.js"; -export { - resolveCliSpawnInvocation, - runCliCommand, -} from "../../../src/plugins/memory-host/qmd-process.js"; +} from "./host/qmd-scope.js"; +export { resolveCliSpawnInvocation, runCliCommand } from "./host/qmd-process.js"; diff --git a/packages/memory-host-sdk/src/engine-storage.ts b/packages/memory-host-sdk/src/engine-storage.ts index 281b9a3dd0a..a1dc489d6fc 100644 --- a/packages/memory-host-sdk/src/engine-storage.ts +++ b/packages/memory-host-sdk/src/engine-storage.ts @@ -14,14 +14,14 @@ export { runWithConcurrency, type MemoryChunk, type MemoryFileEntry, -} from "../../../src/plugins/memory-host/internal.js"; -export { readMemoryFile } from "../../../src/plugins/memory-host/read-file.js"; -export { resolveMemoryBackendConfig } from "../../../src/plugins/memory-host/backend-config.js"; +} from "./host/internal.js"; +export { readMemoryFile } from "./host/read-file.js"; +export { resolveMemoryBackendConfig } from "./host/backend-config.js"; export type { ResolvedMemoryBackendConfig, ResolvedQmdConfig, ResolvedQmdMcporterConfig, -} from "../../../src/plugins/memory-host/backend-config.js"; +} from "./host/backend-config.js"; export type { MemoryEmbeddingProbeResult, MemoryProviderStatus, @@ -29,8 +29,8 @@ export type { MemorySearchResult, MemorySource, MemorySyncProgressUpdate, -} from "../../../src/plugins/memory-host/types.js"; -export { ensureMemoryIndexSchema } from "../../../src/plugins/memory-host/memory-schema.js"; -export { loadSqliteVecExtension } from "../../../src/plugins/memory-host/sqlite-vec.js"; -export { requireNodeSqlite } from "../../../src/plugins/memory-host/sqlite.js"; -export { isFileMissingError, statRegularFile } from "../../../src/plugins/memory-host/fs-utils.js"; +} from "./host/types.js"; +export { ensureMemoryIndexSchema } from "./host/memory-schema.js"; +export { loadSqliteVecExtension } from "./host/sqlite-vec.js"; +export { requireNodeSqlite } from "./host/sqlite.js"; +export { isFileMissingError, statRegularFile } from "./host/fs-utils.js"; diff --git a/src/plugins/memory-host/backend-config.test.ts b/packages/memory-host-sdk/src/host/backend-config.test.ts similarity index 97% rename from src/plugins/memory-host/backend-config.test.ts rename to packages/memory-host-sdk/src/host/backend-config.test.ts index 16fc562d5fc..ff21d063e56 100644 --- a/src/plugins/memory-host/backend-config.test.ts +++ b/packages/memory-host-sdk/src/host/backend-config.test.ts @@ -1,7 +1,7 @@ import path from "node:path"; import { describe, expect, it } from "vitest"; -import { resolveAgentWorkspaceDir } from "../../agents/agent-scope.js"; -import type { OpenClawConfig } from "../../config/config.js"; +import { resolveAgentWorkspaceDir } from "../../../../src/agents/agent-scope.js"; +import type { OpenClawConfig } from "../../../../src/config/config.js"; import { resolveMemoryBackendConfig } from "./backend-config.js"; describe("resolveMemoryBackendConfig", () => { diff --git a/src/plugins/memory-host/backend-config.ts b/packages/memory-host-sdk/src/host/backend-config.ts similarity index 95% rename from src/plugins/memory-host/backend-config.ts rename to packages/memory-host-sdk/src/host/backend-config.ts index a7f0a96d964..cd59bfe29d0 100644 --- a/src/plugins/memory-host/backend-config.ts +++ b/packages/memory-host-sdk/src/host/backend-config.ts @@ -1,8 +1,8 @@ import path from "node:path"; -import { resolveAgentWorkspaceDir } from "../../agents/agent-scope.js"; -import { parseDurationMs } from "../../cli/parse-duration.js"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { SessionSendPolicyConfig } from "../../config/types.base.js"; +import { resolveAgentWorkspaceDir } from "../../../../src/agents/agent-scope.js"; +import { parseDurationMs } from "../../../../src/cli/parse-duration.js"; +import type { OpenClawConfig } from "../../../../src/config/config.js"; +import type { SessionSendPolicyConfig } from "../../../../src/config/types.base.js"; import type { MemoryBackend, MemoryCitationsMode, @@ -10,9 +10,9 @@ import type { MemoryQmdIndexPath, MemoryQmdMcporterConfig, MemoryQmdSearchMode, -} from "../../config/types.memory.js"; -import { resolveUserPath } from "../../utils.js"; -import { splitShellArgs } from "../../utils/shell-argv.js"; +} from "../../../../src/config/types.memory.js"; +import { resolveUserPath } from "../../../../src/utils.js"; +import { splitShellArgs } from "../../../../src/utils/shell-argv.js"; export type ResolvedMemoryBackendConfig = { backend: MemoryBackend; diff --git a/src/plugins/memory-host/batch-embedding-common.ts b/packages/memory-host-sdk/src/host/batch-embedding-common.ts similarity index 100% rename from src/plugins/memory-host/batch-embedding-common.ts rename to packages/memory-host-sdk/src/host/batch-embedding-common.ts diff --git a/src/plugins/memory-host/batch-error-utils.test.ts b/packages/memory-host-sdk/src/host/batch-error-utils.test.ts similarity index 100% rename from src/plugins/memory-host/batch-error-utils.test.ts rename to packages/memory-host-sdk/src/host/batch-error-utils.test.ts diff --git a/src/plugins/memory-host/batch-error-utils.ts b/packages/memory-host-sdk/src/host/batch-error-utils.ts similarity index 100% rename from src/plugins/memory-host/batch-error-utils.ts rename to packages/memory-host-sdk/src/host/batch-error-utils.ts diff --git a/src/plugins/memory-host/batch-gemini.test.ts b/packages/memory-host-sdk/src/host/batch-gemini.test.ts similarity index 100% rename from src/plugins/memory-host/batch-gemini.test.ts rename to packages/memory-host-sdk/src/host/batch-gemini.test.ts diff --git a/src/plugins/memory-host/batch-gemini.ts b/packages/memory-host-sdk/src/host/batch-gemini.ts similarity index 100% rename from src/plugins/memory-host/batch-gemini.ts rename to packages/memory-host-sdk/src/host/batch-gemini.ts diff --git a/src/plugins/memory-host/batch-http.test.ts b/packages/memory-host-sdk/src/host/batch-http.test.ts similarity index 93% rename from src/plugins/memory-host/batch-http.test.ts rename to packages/memory-host-sdk/src/host/batch-http.test.ts index e00b50f186b..c2706048513 100644 --- a/src/plugins/memory-host/batch-http.test.ts +++ b/packages/memory-host-sdk/src/host/batch-http.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -vi.mock("../../infra/retry.js", () => ({ +vi.mock("../../../../src/infra/retry.js", () => ({ retryAsync: vi.fn(async (run: () => Promise) => await run()), })); @@ -10,7 +10,7 @@ vi.mock("./post-json.js", () => ({ describe("postJsonWithRetry", () => { let retryAsyncMock: ReturnType< - typeof vi.mocked + typeof vi.mocked >; let postJsonMock: ReturnType>; let postJsonWithRetry: typeof import("./batch-http.js").postJsonWithRetry; @@ -20,7 +20,7 @@ describe("postJsonWithRetry", () => { vi.clearAllMocks(); vi.resetModules(); ({ postJsonWithRetry } = await import("./batch-http.js")); - const retryModule = await import("../../infra/retry.js"); + const retryModule = await import("../../../../src/infra/retry.js"); const postJsonModule = await import("./post-json.js"); retryAsyncMock = vi.mocked(retryModule.retryAsync); postJsonMock = vi.mocked(postJsonModule.postJson); diff --git a/src/plugins/memory-host/batch-http.ts b/packages/memory-host-sdk/src/host/batch-http.ts similarity index 86% rename from src/plugins/memory-host/batch-http.ts rename to packages/memory-host-sdk/src/host/batch-http.ts index b098d382f16..7e9e5fa0fbd 100644 --- a/src/plugins/memory-host/batch-http.ts +++ b/packages/memory-host-sdk/src/host/batch-http.ts @@ -1,5 +1,5 @@ -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; -import { retryAsync } from "../../infra/retry.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; +import { retryAsync } from "../../../../src/infra/retry.js"; import { postJson } from "./post-json.js"; export async function postJsonWithRetry(params: { diff --git a/src/plugins/memory-host/batch-openai.ts b/packages/memory-host-sdk/src/host/batch-openai.ts similarity index 100% rename from src/plugins/memory-host/batch-openai.ts rename to packages/memory-host-sdk/src/host/batch-openai.ts diff --git a/src/plugins/memory-host/batch-output.test.ts b/packages/memory-host-sdk/src/host/batch-output.test.ts similarity index 100% rename from src/plugins/memory-host/batch-output.test.ts rename to packages/memory-host-sdk/src/host/batch-output.test.ts diff --git a/src/plugins/memory-host/batch-output.ts b/packages/memory-host-sdk/src/host/batch-output.ts similarity index 100% rename from src/plugins/memory-host/batch-output.ts rename to packages/memory-host-sdk/src/host/batch-output.ts diff --git a/src/plugins/memory-host/batch-provider-common.ts b/packages/memory-host-sdk/src/host/batch-provider-common.ts similarity index 100% rename from src/plugins/memory-host/batch-provider-common.ts rename to packages/memory-host-sdk/src/host/batch-provider-common.ts diff --git a/src/plugins/memory-host/batch-runner.ts b/packages/memory-host-sdk/src/host/batch-runner.ts similarity index 100% rename from src/plugins/memory-host/batch-runner.ts rename to packages/memory-host-sdk/src/host/batch-runner.ts diff --git a/src/plugins/memory-host/batch-status.test.ts b/packages/memory-host-sdk/src/host/batch-status.test.ts similarity index 100% rename from src/plugins/memory-host/batch-status.test.ts rename to packages/memory-host-sdk/src/host/batch-status.test.ts diff --git a/src/plugins/memory-host/batch-status.ts b/packages/memory-host-sdk/src/host/batch-status.ts similarity index 100% rename from src/plugins/memory-host/batch-status.ts rename to packages/memory-host-sdk/src/host/batch-status.ts diff --git a/src/plugins/memory-host/batch-upload.ts b/packages/memory-host-sdk/src/host/batch-upload.ts similarity index 100% rename from src/plugins/memory-host/batch-upload.ts rename to packages/memory-host-sdk/src/host/batch-upload.ts diff --git a/src/plugins/memory-host/batch-utils.ts b/packages/memory-host-sdk/src/host/batch-utils.ts similarity index 93% rename from src/plugins/memory-host/batch-utils.ts rename to packages/memory-host-sdk/src/host/batch-utils.ts index c44dace3f8a..64b7caffc5c 100644 --- a/src/plugins/memory-host/batch-utils.ts +++ b/packages/memory-host-sdk/src/host/batch-utils.ts @@ -1,4 +1,4 @@ -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; export type BatchHttpClientConfig = { baseUrl?: string; diff --git a/src/plugins/memory-host/batch-voyage.test.ts b/packages/memory-host-sdk/src/host/batch-voyage.test.ts similarity index 100% rename from src/plugins/memory-host/batch-voyage.test.ts rename to packages/memory-host-sdk/src/host/batch-voyage.test.ts diff --git a/src/plugins/memory-host/batch-voyage.ts b/packages/memory-host-sdk/src/host/batch-voyage.ts similarity index 100% rename from src/plugins/memory-host/batch-voyage.ts rename to packages/memory-host-sdk/src/host/batch-voyage.ts diff --git a/src/plugins/memory-host/embedding-chunk-limits.test.ts b/packages/memory-host-sdk/src/host/embedding-chunk-limits.test.ts similarity index 100% rename from src/plugins/memory-host/embedding-chunk-limits.test.ts rename to packages/memory-host-sdk/src/host/embedding-chunk-limits.test.ts diff --git a/src/plugins/memory-host/embedding-chunk-limits.ts b/packages/memory-host-sdk/src/host/embedding-chunk-limits.ts similarity index 100% rename from src/plugins/memory-host/embedding-chunk-limits.ts rename to packages/memory-host-sdk/src/host/embedding-chunk-limits.ts diff --git a/src/plugins/memory-host/embedding-input-limits.ts b/packages/memory-host-sdk/src/host/embedding-input-limits.ts similarity index 100% rename from src/plugins/memory-host/embedding-input-limits.ts rename to packages/memory-host-sdk/src/host/embedding-input-limits.ts diff --git a/src/plugins/memory-host/embedding-inputs.ts b/packages/memory-host-sdk/src/host/embedding-inputs.ts similarity index 100% rename from src/plugins/memory-host/embedding-inputs.ts rename to packages/memory-host-sdk/src/host/embedding-inputs.ts diff --git a/src/plugins/memory-host/embedding-model-limits.ts b/packages/memory-host-sdk/src/host/embedding-model-limits.ts similarity index 100% rename from src/plugins/memory-host/embedding-model-limits.ts rename to packages/memory-host-sdk/src/host/embedding-model-limits.ts diff --git a/src/plugins/memory-host/embedding-vectors.ts b/packages/memory-host-sdk/src/host/embedding-vectors.ts similarity index 100% rename from src/plugins/memory-host/embedding-vectors.ts rename to packages/memory-host-sdk/src/host/embedding-vectors.ts diff --git a/src/plugins/memory-host/embeddings-debug.ts b/packages/memory-host-sdk/src/host/embeddings-debug.ts similarity index 72% rename from src/plugins/memory-host/embeddings-debug.ts rename to packages/memory-host-sdk/src/host/embeddings-debug.ts index a9f20d55e8a..283813ff51e 100644 --- a/src/plugins/memory-host/embeddings-debug.ts +++ b/packages/memory-host-sdk/src/host/embeddings-debug.ts @@ -1,5 +1,5 @@ -import { isTruthyEnvValue } from "../../infra/env.js"; -import { createSubsystemLogger } from "../../logging/subsystem.js"; +import { isTruthyEnvValue } from "../../../../src/infra/env.js"; +import { createSubsystemLogger } from "../../../../src/logging/subsystem.js"; const debugEmbeddings = isTruthyEnvValue(process.env.OPENCLAW_DEBUG_MEMORY_EMBEDDINGS); const log = createSubsystemLogger("memory/embeddings"); diff --git a/src/plugins/memory-host/embeddings-gemini.test.ts b/packages/memory-host-sdk/src/host/embeddings-gemini.test.ts similarity index 98% rename from src/plugins/memory-host/embeddings-gemini.test.ts rename to packages/memory-host-sdk/src/host/embeddings-gemini.test.ts index d6b41c8629a..3632cd43389 100644 --- a/src/plugins/memory-host/embeddings-gemini.test.ts +++ b/packages/memory-host-sdk/src/host/embeddings-gemini.test.ts @@ -1,9 +1,10 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import * as authModule from "../../agents/model-auth.js"; +import * as authModule from "../../../../src/agents/model-auth.js"; import { mockPublicPinnedHostname } from "./test-helpers/ssrf.js"; -vi.mock("../../agents/model-auth.js", async () => { - const { createModelAuthMockModule } = await import("../../test-utils/model-auth-mock.js"); +vi.mock("../../../../src/agents/model-auth.js", async () => { + const { createModelAuthMockModule } = + await import("../../../../src/test-utils/model-auth-mock.js"); return createModelAuthMockModule(); }); diff --git a/src/plugins/memory-host/embeddings-gemini.ts b/packages/memory-host-sdk/src/host/embeddings-gemini.ts similarity index 96% rename from src/plugins/memory-host/embeddings-gemini.ts rename to packages/memory-host-sdk/src/host/embeddings-gemini.ts index 3826398a371..b4d4e0e9581 100644 --- a/src/plugins/memory-host/embeddings-gemini.ts +++ b/packages/memory-host-sdk/src/host/embeddings-gemini.ts @@ -1,14 +1,14 @@ import { collectProviderApiKeysForExecution, executeWithApiKeyRotation, -} from "../../agents/api-key-rotation.js"; -import { requireApiKey, resolveApiKeyForProvider } from "../../agents/model-auth.js"; -import { parseGeminiAuth } from "../../infra/gemini-auth.js"; +} from "../../../../src/agents/api-key-rotation.js"; +import { requireApiKey, resolveApiKeyForProvider } from "../../../../src/agents/model-auth.js"; +import { parseGeminiAuth } from "../../../../src/infra/gemini-auth.js"; import { DEFAULT_GOOGLE_API_BASE_URL, normalizeGoogleApiBaseUrl, -} from "../../infra/google-api-base-url.js"; -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; +} from "../../../../src/infra/google-api-base-url.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; import type { EmbeddingInput } from "./embedding-inputs.js"; import { sanitizeAndNormalizeEmbedding } from "./embedding-vectors.js"; import { debugEmbeddingsLog } from "./embeddings-debug.js"; diff --git a/src/plugins/memory-host/embeddings-mistral.test.ts b/packages/memory-host-sdk/src/host/embeddings-mistral.test.ts similarity index 100% rename from src/plugins/memory-host/embeddings-mistral.test.ts rename to packages/memory-host-sdk/src/host/embeddings-mistral.test.ts diff --git a/src/plugins/memory-host/embeddings-mistral.ts b/packages/memory-host-sdk/src/host/embeddings-mistral.ts similarity index 95% rename from src/plugins/memory-host/embeddings-mistral.ts rename to packages/memory-host-sdk/src/host/embeddings-mistral.ts index 90e9799414f..cde20d92556 100644 --- a/src/plugins/memory-host/embeddings-mistral.ts +++ b/packages/memory-host-sdk/src/host/embeddings-mistral.ts @@ -1,4 +1,4 @@ -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; import { normalizeEmbeddingModelWithPrefixes } from "./embeddings-model-normalize.js"; import { createRemoteEmbeddingProvider, diff --git a/src/plugins/memory-host/embeddings-model-normalize.test.ts b/packages/memory-host-sdk/src/host/embeddings-model-normalize.test.ts similarity index 100% rename from src/plugins/memory-host/embeddings-model-normalize.test.ts rename to packages/memory-host-sdk/src/host/embeddings-model-normalize.test.ts diff --git a/src/plugins/memory-host/embeddings-model-normalize.ts b/packages/memory-host-sdk/src/host/embeddings-model-normalize.ts similarity index 100% rename from src/plugins/memory-host/embeddings-model-normalize.ts rename to packages/memory-host-sdk/src/host/embeddings-model-normalize.ts diff --git a/src/plugins/memory-host/embeddings-ollama.test.ts b/packages/memory-host-sdk/src/host/embeddings-ollama.test.ts similarity index 98% rename from src/plugins/memory-host/embeddings-ollama.test.ts rename to packages/memory-host-sdk/src/host/embeddings-ollama.test.ts index 6e425a7d1fd..08fb33c9cc4 100644 --- a/src/plugins/memory-host/embeddings-ollama.test.ts +++ b/packages/memory-host-sdk/src/host/embeddings-ollama.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; -import type { OpenClawConfig } from "../../config/config.js"; +import type { OpenClawConfig } from "../../../../src/config/config.js"; let createOllamaEmbeddingProvider: typeof import("./embeddings-ollama.js").createOllamaEmbeddingProvider; diff --git a/src/plugins/memory-host/embeddings-ollama.ts b/packages/memory-host-sdk/src/host/embeddings-ollama.ts similarity index 90% rename from src/plugins/memory-host/embeddings-ollama.ts rename to packages/memory-host-sdk/src/host/embeddings-ollama.ts index 4c867d735a6..f19ac2b2e66 100644 --- a/src/plugins/memory-host/embeddings-ollama.ts +++ b/packages/memory-host-sdk/src/host/embeddings-ollama.ts @@ -1,8 +1,8 @@ -import { resolveEnvApiKey } from "../../agents/model-auth.js"; -import { resolveOllamaApiBase } from "../../agents/ollama-models.js"; -import { formatErrorMessage } from "../../infra/errors.js"; -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; -import { normalizeOptionalSecretInput } from "../../utils/normalize-secret-input.js"; +import { resolveEnvApiKey } from "../../../../src/agents/model-auth.js"; +import { resolveOllamaApiBase } from "../../../../src/agents/ollama-models.js"; +import { formatErrorMessage } from "../../../../src/infra/errors.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; +import { normalizeOptionalSecretInput } from "../../../../src/utils/normalize-secret-input.js"; import { sanitizeAndNormalizeEmbedding } from "./embedding-vectors.js"; import { normalizeEmbeddingModelWithPrefixes } from "./embeddings-model-normalize.js"; import type { EmbeddingProvider, EmbeddingProviderOptions } from "./embeddings.js"; diff --git a/src/plugins/memory-host/embeddings-openai.ts b/packages/memory-host-sdk/src/host/embeddings-openai.ts similarity index 90% rename from src/plugins/memory-host/embeddings-openai.ts rename to packages/memory-host-sdk/src/host/embeddings-openai.ts index 867767acaf5..4d045c863fd 100644 --- a/src/plugins/memory-host/embeddings-openai.ts +++ b/packages/memory-host-sdk/src/host/embeddings-openai.ts @@ -1,5 +1,5 @@ -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; -import { OPENAI_DEFAULT_EMBEDDING_MODEL } from "../../plugins/provider-model-defaults.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; +import { OPENAI_DEFAULT_EMBEDDING_MODEL } from "../../../../src/plugins/provider-model-defaults.js"; import { normalizeEmbeddingModelWithPrefixes } from "./embeddings-model-normalize.js"; import { createRemoteEmbeddingProvider, diff --git a/src/plugins/memory-host/embeddings-remote-client.ts b/packages/memory-host-sdk/src/host/embeddings-remote-client.ts similarity index 90% rename from src/plugins/memory-host/embeddings-remote-client.ts rename to packages/memory-host-sdk/src/host/embeddings-remote-client.ts index 154b886cdf2..01316cbd946 100644 --- a/src/plugins/memory-host/embeddings-remote-client.ts +++ b/packages/memory-host-sdk/src/host/embeddings-remote-client.ts @@ -1,5 +1,5 @@ -import { requireApiKey, resolveApiKeyForProvider } from "../../agents/model-auth.js"; -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; +import { requireApiKey, resolveApiKeyForProvider } from "../../../../src/agents/model-auth.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; import type { EmbeddingProviderOptions } from "./embeddings.js"; import { buildRemoteBaseUrlPolicy } from "./remote-http.js"; import { resolveMemorySecretInputString } from "./secret-input.js"; diff --git a/src/plugins/memory-host/embeddings-remote-fetch.test.ts b/packages/memory-host-sdk/src/host/embeddings-remote-fetch.test.ts similarity index 100% rename from src/plugins/memory-host/embeddings-remote-fetch.test.ts rename to packages/memory-host-sdk/src/host/embeddings-remote-fetch.test.ts diff --git a/src/plugins/memory-host/embeddings-remote-fetch.ts b/packages/memory-host-sdk/src/host/embeddings-remote-fetch.ts similarity index 90% rename from src/plugins/memory-host/embeddings-remote-fetch.ts rename to packages/memory-host-sdk/src/host/embeddings-remote-fetch.ts index a45acb37456..b17549548b4 100644 --- a/src/plugins/memory-host/embeddings-remote-fetch.ts +++ b/packages/memory-host-sdk/src/host/embeddings-remote-fetch.ts @@ -1,4 +1,4 @@ -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; import { postJson } from "./post-json.js"; export async function fetchRemoteEmbeddingVectors(params: { diff --git a/src/plugins/memory-host/embeddings-remote-provider.ts b/packages/memory-host-sdk/src/host/embeddings-remote-provider.ts similarity index 96% rename from src/plugins/memory-host/embeddings-remote-provider.ts rename to packages/memory-host-sdk/src/host/embeddings-remote-provider.ts index c0c9a0cb2dd..2ed7c188619 100644 --- a/src/plugins/memory-host/embeddings-remote-provider.ts +++ b/packages/memory-host-sdk/src/host/embeddings-remote-provider.ts @@ -1,4 +1,4 @@ -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; import { resolveRemoteEmbeddingBearerClient, type RemoteEmbeddingProviderId, diff --git a/src/plugins/memory-host/embeddings-voyage.test.ts b/packages/memory-host-sdk/src/host/embeddings-voyage.test.ts similarity index 92% rename from src/plugins/memory-host/embeddings-voyage.test.ts rename to packages/memory-host-sdk/src/host/embeddings-voyage.test.ts index b54fdf6934f..b6173f5ca2f 100644 --- a/src/plugins/memory-host/embeddings-voyage.test.ts +++ b/packages/memory-host-sdk/src/host/embeddings-voyage.test.ts @@ -1,9 +1,10 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { type FetchMock, withFetchPreconnect } from "../../test-utils/fetch-mock.js"; +import { type FetchMock, withFetchPreconnect } from "../../../../src/test-utils/fetch-mock.js"; import { mockPublicPinnedHostname } from "./test-helpers/ssrf.js"; -vi.mock("../../agents/model-auth.js", async () => { - const { createModelAuthMockModule } = await import("../../test-utils/model-auth-mock.js"); +vi.mock("../../../../src/agents/model-auth.js", async () => { + const { createModelAuthMockModule } = + await import("../../../../src/test-utils/model-auth-mock.js"); return createModelAuthMockModule(); }); @@ -18,7 +19,7 @@ const createFetchMock = () => { return withFetchPreconnect(fetchMock); }; -let authModule: typeof import("../../agents/model-auth.js"); +let authModule: typeof import("../../../../src/agents/model-auth.js"); let createVoyageEmbeddingProvider: typeof import("./embeddings-voyage.js").createVoyageEmbeddingProvider; let normalizeVoyageModel: typeof import("./embeddings-voyage.js").normalizeVoyageModel; @@ -26,7 +27,7 @@ beforeEach(async () => { vi.useRealTimers(); vi.doUnmock("undici"); vi.resetModules(); - authModule = await import("../../agents/model-auth.js"); + authModule = await import("../../../../src/agents/model-auth.js"); ({ createVoyageEmbeddingProvider, normalizeVoyageModel } = await import("./embeddings-voyage.js")); }); diff --git a/src/plugins/memory-host/embeddings-voyage.ts b/packages/memory-host-sdk/src/host/embeddings-voyage.ts similarity index 97% rename from src/plugins/memory-host/embeddings-voyage.ts rename to packages/memory-host-sdk/src/host/embeddings-voyage.ts index caf4165d1f1..f46614e5566 100644 --- a/src/plugins/memory-host/embeddings-voyage.ts +++ b/packages/memory-host-sdk/src/host/embeddings-voyage.ts @@ -1,4 +1,4 @@ -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; import { normalizeEmbeddingModelWithPrefixes } from "./embeddings-model-normalize.js"; import { resolveRemoteEmbeddingBearerClient } from "./embeddings-remote-client.js"; import { fetchRemoteEmbeddingVectors } from "./embeddings-remote-fetch.js"; diff --git a/src/plugins/memory-host/embeddings.test.ts b/packages/memory-host-sdk/src/host/embeddings.test.ts similarity index 99% rename from src/plugins/memory-host/embeddings.test.ts rename to packages/memory-host-sdk/src/host/embeddings.test.ts index ff504a51940..2666e6d3b95 100644 --- a/src/plugins/memory-host/embeddings.test.ts +++ b/packages/memory-host-sdk/src/host/embeddings.test.ts @@ -23,7 +23,7 @@ function readFirstFetchRequest(fetchMock: { mock: { calls: unknown[][] } }) { } type EmbeddingsModule = typeof import("./embeddings.js"); -type AuthModule = typeof import("../../agents/model-auth.js"); +type AuthModule = typeof import("../../../../src/agents/model-auth.js"); type ResolvedProviderAuth = Awaited>; let authModule: AuthModule; @@ -33,7 +33,7 @@ let DEFAULT_LOCAL_MODEL: EmbeddingsModule["DEFAULT_LOCAL_MODEL"]; beforeEach(async () => { vi.resetModules(); - authModule = await import("../../agents/model-auth.js"); + authModule = await import("../../../../src/agents/model-auth.js"); nodeLlamaModule = await import("./node-llama.js"); vi.spyOn(authModule, "resolveApiKeyForProvider"); vi.spyOn(nodeLlamaModule, "importNodeLlamaCpp"); @@ -683,7 +683,7 @@ describe("local embedding ensureContext concurrency", () => { describe("FTS-only fallback when no provider available", () => { beforeEach(async () => { - authModule = await import("../../agents/model-auth.js"); + authModule = await import("../../../../src/agents/model-auth.js"); ({ createEmbeddingProvider, DEFAULT_LOCAL_MODEL } = await import("./embeddings.js")); }); diff --git a/src/plugins/memory-host/embeddings.ts b/packages/memory-host-sdk/src/host/embeddings.ts similarity index 97% rename from src/plugins/memory-host/embeddings.ts rename to packages/memory-host-sdk/src/host/embeddings.ts index ee18eb34c7f..8998b9a9968 100644 --- a/src/plugins/memory-host/embeddings.ts +++ b/packages/memory-host-sdk/src/host/embeddings.ts @@ -1,9 +1,9 @@ import fsSync from "node:fs"; import type { Llama, LlamaEmbeddingContext, LlamaModel } from "node-llama-cpp"; -import type { OpenClawConfig } from "../../config/config.js"; -import type { SecretInput } from "../../config/types.secrets.js"; -import { formatErrorMessage } from "../../infra/errors.js"; -import { resolveUserPath } from "../../utils.js"; +import type { OpenClawConfig } from "../../../../src/config/config.js"; +import type { SecretInput } from "../../../../src/config/types.secrets.js"; +import { formatErrorMessage } from "../../../../src/infra/errors.js"; +import { resolveUserPath } from "../../../../src/utils.js"; import type { EmbeddingInput } from "./embedding-inputs.js"; import { sanitizeAndNormalizeEmbedding } from "./embedding-vectors.js"; import { diff --git a/src/plugins/memory-host/fs-utils.ts b/packages/memory-host-sdk/src/host/fs-utils.ts similarity index 100% rename from src/plugins/memory-host/fs-utils.ts rename to packages/memory-host-sdk/src/host/fs-utils.ts diff --git a/src/plugins/memory-host/internal.test.ts b/packages/memory-host-sdk/src/host/internal.test.ts similarity index 100% rename from src/plugins/memory-host/internal.test.ts rename to packages/memory-host-sdk/src/host/internal.test.ts diff --git a/src/plugins/memory-host/internal.ts b/packages/memory-host-sdk/src/host/internal.ts similarity index 98% rename from src/plugins/memory-host/internal.ts rename to packages/memory-host-sdk/src/host/internal.ts index f5312ed30f2..730eaf052f0 100644 --- a/src/plugins/memory-host/internal.ts +++ b/packages/memory-host-sdk/src/host/internal.ts @@ -2,8 +2,8 @@ import crypto from "node:crypto"; import fsSync from "node:fs"; import fs from "node:fs/promises"; import path from "node:path"; -import { detectMime } from "../../media/mime.js"; -import { runTasksWithConcurrency } from "../../utils/run-with-concurrency.js"; +import { detectMime } from "../../../../src/media/mime.js"; +import { runTasksWithConcurrency } from "../../../../src/utils/run-with-concurrency.js"; import { estimateStructuredEmbeddingInputBytes } from "./embedding-input-limits.js"; import { buildTextEmbeddingInput, type EmbeddingInput } from "./embedding-inputs.js"; import { isFileMissingError } from "./fs-utils.js"; diff --git a/src/plugins/memory-host/memory-schema.ts b/packages/memory-host-sdk/src/host/memory-schema.ts similarity index 100% rename from src/plugins/memory-host/memory-schema.ts rename to packages/memory-host-sdk/src/host/memory-schema.ts diff --git a/src/plugins/memory-host/multimodal.ts b/packages/memory-host-sdk/src/host/multimodal.ts similarity index 100% rename from src/plugins/memory-host/multimodal.ts rename to packages/memory-host-sdk/src/host/multimodal.ts diff --git a/src/plugins/memory-host/node-llama.ts b/packages/memory-host-sdk/src/host/node-llama.ts similarity index 100% rename from src/plugins/memory-host/node-llama.ts rename to packages/memory-host-sdk/src/host/node-llama.ts diff --git a/src/plugins/memory-host/post-json.test.ts b/packages/memory-host-sdk/src/host/post-json.test.ts similarity index 100% rename from src/plugins/memory-host/post-json.test.ts rename to packages/memory-host-sdk/src/host/post-json.test.ts diff --git a/src/plugins/memory-host/post-json.ts b/packages/memory-host-sdk/src/host/post-json.ts similarity index 92% rename from src/plugins/memory-host/post-json.ts rename to packages/memory-host-sdk/src/host/post-json.ts index 8eaee669cac..12f8bfb3930 100644 --- a/src/plugins/memory-host/post-json.ts +++ b/packages/memory-host-sdk/src/host/post-json.ts @@ -1,4 +1,4 @@ -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; import { withRemoteHttpResponse } from "./remote-http.js"; export async function postJson(params: { diff --git a/src/plugins/memory-host/qmd-process.test.ts b/packages/memory-host-sdk/src/host/qmd-process.test.ts similarity index 100% rename from src/plugins/memory-host/qmd-process.test.ts rename to packages/memory-host-sdk/src/host/qmd-process.test.ts diff --git a/src/plugins/memory-host/qmd-process.ts b/packages/memory-host-sdk/src/host/qmd-process.ts similarity index 98% rename from src/plugins/memory-host/qmd-process.ts rename to packages/memory-host-sdk/src/host/qmd-process.ts index 23754555033..3cd88aecf6c 100644 --- a/src/plugins/memory-host/qmd-process.ts +++ b/packages/memory-host-sdk/src/host/qmd-process.ts @@ -2,7 +2,7 @@ import { spawn } from "node:child_process"; import { materializeWindowsSpawnProgram, resolveWindowsSpawnProgram, -} from "../../plugin-sdk/windows-spawn.js"; +} from "../../../../src/plugin-sdk/windows-spawn.js"; export type CliSpawnInvocation = { command: string; diff --git a/src/plugins/memory-host/qmd-query-parser.test.ts b/packages/memory-host-sdk/src/host/qmd-query-parser.test.ts similarity index 100% rename from src/plugins/memory-host/qmd-query-parser.test.ts rename to packages/memory-host-sdk/src/host/qmd-query-parser.test.ts diff --git a/src/plugins/memory-host/qmd-query-parser.ts b/packages/memory-host-sdk/src/host/qmd-query-parser.ts similarity index 97% rename from src/plugins/memory-host/qmd-query-parser.ts rename to packages/memory-host-sdk/src/host/qmd-query-parser.ts index 32e8271b4f4..85dc08444bd 100644 --- a/src/plugins/memory-host/qmd-query-parser.ts +++ b/packages/memory-host-sdk/src/host/qmd-query-parser.ts @@ -1,4 +1,4 @@ -import { createSubsystemLogger } from "../../logging/subsystem.js"; +import { createSubsystemLogger } from "../../../../src/logging/subsystem.js"; const log = createSubsystemLogger("memory"); diff --git a/src/plugins/memory-host/qmd-scope.test.ts b/packages/memory-host-sdk/src/host/qmd-scope.test.ts similarity index 100% rename from src/plugins/memory-host/qmd-scope.test.ts rename to packages/memory-host-sdk/src/host/qmd-scope.test.ts diff --git a/src/plugins/memory-host/qmd-scope.ts b/packages/memory-host-sdk/src/host/qmd-scope.ts similarity index 97% rename from src/plugins/memory-host/qmd-scope.ts rename to packages/memory-host-sdk/src/host/qmd-scope.ts index a206cc9c2bd..9ce587122da 100644 --- a/src/plugins/memory-host/qmd-scope.ts +++ b/packages/memory-host-sdk/src/host/qmd-scope.ts @@ -1,4 +1,4 @@ -import { parseAgentSessionKey } from "../../sessions/session-key-utils.js"; +import { parseAgentSessionKey } from "../../../../src/sessions/session-key-utils.js"; import type { ResolvedQmdConfig } from "./backend-config.js"; type ParsedQmdSessionScope = { diff --git a/src/plugins/memory-host/query-expansion.test.ts b/packages/memory-host-sdk/src/host/query-expansion.test.ts similarity index 100% rename from src/plugins/memory-host/query-expansion.test.ts rename to packages/memory-host-sdk/src/host/query-expansion.test.ts diff --git a/src/plugins/memory-host/query-expansion.ts b/packages/memory-host-sdk/src/host/query-expansion.ts similarity index 100% rename from src/plugins/memory-host/query-expansion.ts rename to packages/memory-host-sdk/src/host/query-expansion.ts diff --git a/src/plugins/memory-host/read-file.ts b/packages/memory-host-sdk/src/host/read-file.ts similarity index 92% rename from src/plugins/memory-host/read-file.ts rename to packages/memory-host-sdk/src/host/read-file.ts index d9e6bbc3ce8..d8940acb26b 100644 --- a/src/plugins/memory-host/read-file.ts +++ b/packages/memory-host-sdk/src/host/read-file.ts @@ -1,8 +1,8 @@ import fs from "node:fs/promises"; import path from "node:path"; -import { resolveAgentWorkspaceDir } from "../../agents/agent-scope.js"; -import { resolveMemorySearchConfig } from "../../agents/memory-search.js"; -import type { OpenClawConfig } from "../../config/config.js"; +import { resolveAgentWorkspaceDir } from "../../../../src/agents/agent-scope.js"; +import { resolveMemorySearchConfig } from "../../../../src/agents/memory-search.js"; +import type { OpenClawConfig } from "../../../../src/config/config.js"; import { isFileMissingError, statRegularFile } from "./fs-utils.js"; import { isMemoryPath, normalizeExtraMemoryPaths } from "./internal.js"; diff --git a/src/plugins/memory-host/remote-http.ts b/packages/memory-host-sdk/src/host/remote-http.ts similarity index 88% rename from src/plugins/memory-host/remote-http.ts rename to packages/memory-host-sdk/src/host/remote-http.ts index 132e92a7548..f591830ff62 100644 --- a/src/plugins/memory-host/remote-http.ts +++ b/packages/memory-host-sdk/src/host/remote-http.ts @@ -1,5 +1,5 @@ -import { fetchWithSsrFGuard } from "../../infra/net/fetch-guard.js"; -import type { SsrFPolicy } from "../../infra/net/ssrf.js"; +import { fetchWithSsrFGuard } from "../../../../src/infra/net/fetch-guard.js"; +import type { SsrFPolicy } from "../../../../src/infra/net/ssrf.js"; export function buildRemoteBaseUrlPolicy(baseUrl: string): SsrFPolicy | undefined { const trimmed = baseUrl.trim(); diff --git a/src/plugins/memory-host/secret-input.ts b/packages/memory-host-sdk/src/host/secret-input.ts similarity index 89% rename from src/plugins/memory-host/secret-input.ts rename to packages/memory-host-sdk/src/host/secret-input.ts index 98dd0c87084..b6a0b317f8c 100644 --- a/src/plugins/memory-host/secret-input.ts +++ b/packages/memory-host-sdk/src/host/secret-input.ts @@ -1,7 +1,7 @@ import { hasConfiguredSecretInput, normalizeResolvedSecretInputString, -} from "../../config/types.secrets.js"; +} from "../../../../src/config/types.secrets.js"; export function hasConfiguredMemorySecretInput(value: unknown): boolean { return hasConfiguredSecretInput(value); diff --git a/src/plugins/memory-host/session-files.test.ts b/packages/memory-host-sdk/src/host/session-files.test.ts similarity index 100% rename from src/plugins/memory-host/session-files.test.ts rename to packages/memory-host-sdk/src/host/session-files.test.ts diff --git a/src/plugins/memory-host/session-files.ts b/packages/memory-host-sdk/src/host/session-files.ts similarity index 93% rename from src/plugins/memory-host/session-files.ts rename to packages/memory-host-sdk/src/host/session-files.ts index 291b0af418e..91571a065dc 100644 --- a/src/plugins/memory-host/session-files.ts +++ b/packages/memory-host-sdk/src/host/session-files.ts @@ -1,8 +1,8 @@ import fs from "node:fs/promises"; import path from "node:path"; -import { resolveSessionTranscriptsDirForAgent } from "../../config/sessions/paths.js"; -import { redactSensitiveText } from "../../logging/redact.js"; -import { createSubsystemLogger } from "../../logging/subsystem.js"; +import { resolveSessionTranscriptsDirForAgent } from "../../../../src/config/sessions/paths.js"; +import { redactSensitiveText } from "../../../../src/logging/redact.js"; +import { createSubsystemLogger } from "../../../../src/logging/subsystem.js"; import { hashText } from "./internal.js"; const log = createSubsystemLogger("memory"); diff --git a/src/plugins/memory-host/sqlite-vec.ts b/packages/memory-host-sdk/src/host/sqlite-vec.ts similarity index 100% rename from src/plugins/memory-host/sqlite-vec.ts rename to packages/memory-host-sdk/src/host/sqlite-vec.ts diff --git a/src/plugins/memory-host/sqlite.ts b/packages/memory-host-sdk/src/host/sqlite.ts similarity index 88% rename from src/plugins/memory-host/sqlite.ts rename to packages/memory-host-sdk/src/host/sqlite.ts index fabb16d983a..41f32465cf1 100644 --- a/src/plugins/memory-host/sqlite.ts +++ b/packages/memory-host-sdk/src/host/sqlite.ts @@ -1,5 +1,5 @@ import { createRequire } from "node:module"; -import { installProcessWarningFilter } from "../../infra/warning-filter.js"; +import { installProcessWarningFilter } from "../../../../src/infra/warning-filter.js"; const require = createRequire(import.meta.url); diff --git a/src/plugins/memory-host/status-format.ts b/packages/memory-host-sdk/src/host/status-format.ts similarity index 100% rename from src/plugins/memory-host/status-format.ts rename to packages/memory-host-sdk/src/host/status-format.ts diff --git a/src/plugins/memory-host/test-helpers/ssrf.ts b/packages/memory-host-sdk/src/host/test-helpers/ssrf.ts similarity index 87% rename from src/plugins/memory-host/test-helpers/ssrf.ts rename to packages/memory-host-sdk/src/host/test-helpers/ssrf.ts index e8b6f99d553..2f3f7730a87 100644 --- a/src/plugins/memory-host/test-helpers/ssrf.ts +++ b/packages/memory-host-sdk/src/host/test-helpers/ssrf.ts @@ -1,5 +1,5 @@ import { vi } from "vitest"; -import * as ssrf from "../../../infra/net/ssrf.js"; +import * as ssrf from "../../../../../src/infra/net/ssrf.js"; export function mockPublicPinnedHostname() { return vi.spyOn(ssrf, "resolvePinnedHostnameWithPolicy").mockImplementation(async (hostname) => { diff --git a/src/plugins/memory-host/types.ts b/packages/memory-host-sdk/src/host/types.ts similarity index 100% rename from src/plugins/memory-host/types.ts rename to packages/memory-host-sdk/src/host/types.ts diff --git a/packages/memory-host-sdk/src/multimodal.ts b/packages/memory-host-sdk/src/multimodal.ts new file mode 100644 index 00000000000..eb11867ac3a --- /dev/null +++ b/packages/memory-host-sdk/src/multimodal.ts @@ -0,0 +1,5 @@ +export { + isMemoryMultimodalEnabled, + normalizeMemoryMultimodalSettings, + type MemoryMultimodalSettings, +} from "./host/multimodal.js"; diff --git a/packages/memory-host-sdk/src/query.ts b/packages/memory-host-sdk/src/query.ts new file mode 100644 index 00000000000..bb945afaa65 --- /dev/null +++ b/packages/memory-host-sdk/src/query.ts @@ -0,0 +1 @@ +export { extractKeywords, isQueryStopWordToken } from "./host/query-expansion.js"; diff --git a/packages/memory-host-sdk/src/runtime-files.ts b/packages/memory-host-sdk/src/runtime-files.ts index ec2feaa6ed0..dd50c31eb46 100644 --- a/packages/memory-host-sdk/src/runtime-files.ts +++ b/packages/memory-host-sdk/src/runtime-files.ts @@ -1,9 +1,6 @@ // Focused runtime contract for memory file/backend access. -export { - listMemoryFiles, - normalizeExtraMemoryPaths, -} from "../../../src/plugins/memory-host/internal.js"; -export { readAgentMemoryFile } from "../../../src/plugins/memory-host/read-file.js"; -export { resolveMemoryBackendConfig } from "../../../src/plugins/memory-host/backend-config.js"; -export type { MemorySearchResult } from "../../../src/plugins/memory-host/types.js"; +export { listMemoryFiles, normalizeExtraMemoryPaths } from "./host/internal.js"; +export { readAgentMemoryFile } from "./host/read-file.js"; +export { resolveMemoryBackendConfig } from "./host/backend-config.js"; +export type { MemorySearchResult } from "./host/types.js"; diff --git a/packages/memory-host-sdk/src/secret.ts b/packages/memory-host-sdk/src/secret.ts new file mode 100644 index 00000000000..b2b6b94ab47 --- /dev/null +++ b/packages/memory-host-sdk/src/secret.ts @@ -0,0 +1,4 @@ +export { + hasConfiguredMemorySecretInput, + resolveMemorySecretInputString, +} from "./host/secret-input.js"; diff --git a/packages/memory-host-sdk/src/status.ts b/packages/memory-host-sdk/src/status.ts new file mode 100644 index 00000000000..dc718abd96b --- /dev/null +++ b/packages/memory-host-sdk/src/status.ts @@ -0,0 +1,6 @@ +export { + resolveMemoryCacheSummary, + resolveMemoryFtsState, + resolveMemoryVectorState, + type Tone, +} from "./host/status-format.js"; diff --git a/scripts/lib/plugin-sdk-entrypoints.json b/scripts/lib/plugin-sdk-entrypoints.json index 12397b9806f..ed8582abef7 100644 --- a/scripts/lib/plugin-sdk-entrypoints.json +++ b/scripts/lib/plugin-sdk-entrypoints.json @@ -96,13 +96,14 @@ "mattermost", "memory-core", "memory-core-engine-runtime", - "memory-core-host", - "memory-core-host-engine", "memory-core-host-engine-embeddings", "memory-core-host-engine-foundation", "memory-core-host-engine-qmd", "memory-core-host-engine-storage", - "memory-core-host-runtime", + "memory-core-host-multimodal", + "memory-core-host-query", + "memory-core-host-secret", + "memory-core-host-status", "memory-core-host-runtime-cli", "memory-core-host-runtime-core", "memory-core-host-runtime-files", diff --git a/scripts/test-planner/catalog.mjs b/scripts/test-planner/catalog.mjs index 1638a97a486..7b28792c501 100644 --- a/scripts/test-planner/catalog.mjs +++ b/scripts/test-planner/catalog.mjs @@ -55,6 +55,7 @@ export function loadTestCatalog() { ...new Set([ ...walkTestFiles("src"), ...walkTestFiles("extensions"), + ...walkTestFiles("packages"), ...walkTestFiles("test"), ...walkTestFiles(path.join("ui", "src", "ui")), ]), diff --git a/src/agents/memory-search.ts b/src/agents/memory-search.ts index cdc7b0b30b4..747945c5d36 100644 --- a/src/agents/memory-search.ts +++ b/src/agents/memory-search.ts @@ -3,12 +3,12 @@ import path from "node:path"; import type { OpenClawConfig, MemorySearchConfig } from "../config/config.js"; import { resolveStateDir } from "../config/paths.js"; import type { SecretInput } from "../config/types.secrets.js"; -import { getMemoryEmbeddingProvider } from "../plugins/memory-embedding-providers.js"; import { isMemoryMultimodalEnabled, normalizeMemoryMultimodalSettings, type MemoryMultimodalSettings, -} from "../plugins/memory-host/multimodal.js"; +} from "../plugin-sdk/memory-core-host-multimodal.js"; +import { getMemoryEmbeddingProvider } from "../plugins/memory-embedding-providers.js"; import { clampInt, clampNumber, resolveUserPath } from "../utils.js"; import { resolveAgentConfig } from "./agent-scope.js"; diff --git a/src/agents/pi-extensions/compaction-safeguard-quality.ts b/src/agents/pi-extensions/compaction-safeguard-quality.ts index ea2355bc5a3..c4da3b31570 100644 --- a/src/agents/pi-extensions/compaction-safeguard-quality.ts +++ b/src/agents/pi-extensions/compaction-safeguard-quality.ts @@ -1,7 +1,4 @@ -import { - extractKeywords, - isQueryStopWordToken, -} from "../../plugins/memory-host/query-expansion.js"; +import { extractKeywords, isQueryStopWordToken } from "../../plugin-sdk/memory-core-host-query.js"; import type { CompactionSummarizationInstructions } from "../compaction.js"; import { wrapUntrustedPromptDataBlock } from "../sanitize-for-prompt.js"; diff --git a/src/commands/doctor-memory-search.ts b/src/commands/doctor-memory-search.ts index f0367be7756..090fc942b5c 100644 --- a/src/commands/doctor-memory-search.ts +++ b/src/commands/doctor-memory-search.ts @@ -4,8 +4,8 @@ import { resolveMemorySearchConfig } from "../agents/memory-search.js"; import { resolveApiKeyForProvider } from "../agents/model-auth.js"; import { formatCliCommand } from "../cli/command-format.js"; import type { OpenClawConfig } from "../config/config.js"; -import { DEFAULT_LOCAL_MODEL } from "../plugins/memory-host/embeddings.js"; -import { hasConfiguredMemorySecretInput } from "../plugins/memory-host/secret-input.js"; +import { DEFAULT_LOCAL_MODEL } from "../plugin-sdk/memory-core-host-engine-embeddings.js"; +import { hasConfiguredMemorySecretInput } from "../plugin-sdk/memory-core-host-secret.js"; import { resolveActiveMemoryBackendConfig } from "../plugins/memory-runtime.js"; import { note } from "../terminal/note.js"; import { resolveUserPath } from "../utils.js"; diff --git a/src/commands/status.command.ts b/src/commands/status.command.ts index 2a296382b1e..5fcddbefcfb 100644 --- a/src/commands/status.command.ts +++ b/src/commands/status.command.ts @@ -12,7 +12,7 @@ import { resolveMemoryFtsState, resolveMemoryVectorState, type Tone, -} from "../plugins/memory-host/status-format.js"; +} from "../plugin-sdk/memory-core-host-status.js"; import { formatPluginCompatibilityNotice, summarizePluginCompatibility, diff --git a/src/commands/status.scan.deps.runtime.ts b/src/commands/status.scan.deps.runtime.ts index 1001b20a230..92a15ccb60f 100644 --- a/src/commands/status.scan.deps.runtime.ts +++ b/src/commands/status.scan.deps.runtime.ts @@ -1,6 +1,6 @@ import type { OpenClawConfig } from "../config/config.js"; import { getTailnetHostname } from "../infra/tailscale.js"; -import type { MemoryProviderStatus } from "../plugins/memory-host/types.js"; +import type { MemoryProviderStatus } from "../plugin-sdk/memory-core-host-engine-storage.js"; import { getActiveMemorySearchManager } from "../plugins/memory-runtime.js"; export { getTailnetHostname }; diff --git a/src/commands/status.scan.shared.ts b/src/commands/status.scan.shared.ts index a3926d23a57..6e185d537d6 100644 --- a/src/commands/status.scan.shared.ts +++ b/src/commands/status.scan.shared.ts @@ -3,7 +3,7 @@ import type { OpenClawConfig } from "../config/types.js"; import { buildGatewayConnectionDetails } from "../gateway/call.js"; import { normalizeControlUiBasePath } from "../gateway/control-ui-shared.js"; import { probeGateway } from "../gateway/probe.js"; -import type { MemoryProviderStatus } from "../plugins/memory-host/types.js"; +import type { MemoryProviderStatus } from "../plugin-sdk/memory-core-host-engine-storage.js"; import { pickGatewaySelfPresence, resolveGatewayProbeAuthResolution, diff --git a/src/plugin-sdk/memory-core-host-engine.ts b/src/plugin-sdk/memory-core-host-engine.ts deleted file mode 100644 index b420c9c7819..00000000000 --- a/src/plugin-sdk/memory-core-host-engine.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Compatibility aggregate for older imports. -// Prefer the narrower `memory-core-host-engine-*` subpaths for new code. - -export * from "./memory-core-host-engine-foundation.js"; -export * from "./memory-core-host-engine-storage.js"; -export * from "./memory-core-host-engine-embeddings.js"; -export * from "./memory-core-host-engine-qmd.js"; diff --git a/src/plugin-sdk/memory-core-host-multimodal.ts b/src/plugin-sdk/memory-core-host-multimodal.ts new file mode 100644 index 00000000000..36b50cbbf4b --- /dev/null +++ b/src/plugin-sdk/memory-core-host-multimodal.ts @@ -0,0 +1 @@ +export * from "../../packages/memory-host-sdk/src/multimodal.js"; diff --git a/src/plugin-sdk/memory-core-host-query.ts b/src/plugin-sdk/memory-core-host-query.ts new file mode 100644 index 00000000000..2a2ef6bbed4 --- /dev/null +++ b/src/plugin-sdk/memory-core-host-query.ts @@ -0,0 +1 @@ +export * from "../../packages/memory-host-sdk/src/query.js"; diff --git a/src/plugin-sdk/memory-core-host-runtime.ts b/src/plugin-sdk/memory-core-host-runtime.ts deleted file mode 100644 index c51e29dd485..00000000000 --- a/src/plugin-sdk/memory-core-host-runtime.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Compatibility aggregate for older imports. -// Prefer the narrower `memory-core-host-runtime-*` subpaths for new code. - -export * from "./memory-core-host-runtime-core.js"; -export * from "./memory-core-host-runtime-cli.js"; -export * from "./memory-core-host-runtime-files.js"; diff --git a/src/plugin-sdk/memory-core-host-secret.ts b/src/plugin-sdk/memory-core-host-secret.ts new file mode 100644 index 00000000000..f293730b357 --- /dev/null +++ b/src/plugin-sdk/memory-core-host-secret.ts @@ -0,0 +1 @@ +export * from "../../packages/memory-host-sdk/src/secret.js"; diff --git a/src/plugin-sdk/memory-core-host-status.ts b/src/plugin-sdk/memory-core-host-status.ts new file mode 100644 index 00000000000..704b37737b4 --- /dev/null +++ b/src/plugin-sdk/memory-core-host-status.ts @@ -0,0 +1 @@ +export * from "../../packages/memory-host-sdk/src/status.js"; diff --git a/src/plugin-sdk/memory-core-host.ts b/src/plugin-sdk/memory-core-host.ts deleted file mode 100644 index 63dd994865f..00000000000 --- a/src/plugin-sdk/memory-core-host.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./memory-core-host-runtime.js"; -export * from "./memory-core-host-engine.js"; diff --git a/src/plugins/memory-embedding-providers.ts b/src/plugins/memory-embedding-providers.ts index 1ab4eec4c86..fd1edd09b32 100644 --- a/src/plugins/memory-embedding-providers.ts +++ b/src/plugins/memory-embedding-providers.ts @@ -1,6 +1,6 @@ +import type { EmbeddingInput } from "../../packages/memory-host-sdk/src/host/embedding-inputs.js"; import type { OpenClawConfig } from "../config/config.js"; import type { SecretInput } from "../config/types.secrets.js"; -import type { EmbeddingInput } from "./memory-host/embedding-inputs.js"; export type MemoryEmbeddingBatchChunk = { text: string; diff --git a/src/plugins/memory-state.ts b/src/plugins/memory-state.ts index 0fc49ab0007..6818c034c6f 100644 --- a/src/plugins/memory-state.ts +++ b/src/plugins/memory-state.ts @@ -4,7 +4,7 @@ import type { MemoryEmbeddingProbeResult, MemoryProviderStatus, MemorySyncProgressUpdate, -} from "../plugins/memory-host/types.js"; +} from "../plugin-sdk/memory-core-host-engine-storage.js"; export type MemoryPromptSectionBuilder = (params: { availableTools: Set; diff --git a/test/helpers/memory-tool-manager-mock.ts b/test/helpers/memory-tool-manager-mock.ts index a4fd57c2664..454e8937b6f 100644 --- a/test/helpers/memory-tool-manager-mock.ts +++ b/test/helpers/memory-tool-manager-mock.ts @@ -42,7 +42,7 @@ vi.mock("../../extensions/memory-core/src/memory/index.js", () => ({ getMemorySearchManager: getMemorySearchManagerMock, })); -vi.mock("../../src/plugins/memory-host/read-file.js", () => ({ +vi.mock("../../packages/memory-host-sdk/src/host/read-file.js", () => ({ readAgentMemoryFile: readAgentMemoryFileMock, })); diff --git a/vitest.config.ts b/vitest.config.ts index 4ea67768b0f..3339905a27e 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -73,6 +73,7 @@ export default defineConfig({ include: [ "src/**/*.test.ts", "extensions/**/*.test.ts", + "packages/**/*.test.ts", "test/**/*.test.ts", "ui/src/ui/app-chat.test.ts", "ui/src/ui/chat/**/*.test.ts", diff --git a/vitest.unit-paths.mjs b/vitest.unit-paths.mjs index c16aae2de9a..93d6f5eeeb7 100644 --- a/vitest.unit-paths.mjs +++ b/vitest.unit-paths.mjs @@ -2,6 +2,7 @@ import path from "node:path"; export const unitTestIncludePatterns = [ "src/**/*.test.ts", + "packages/**/*.test.ts", "test/**/*.test.ts", "ui/src/ui/app-chat.test.ts", "ui/src/ui/chat/**/*.test.ts",