mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-28 18:33:37 +00:00
refactor: move memory host into sdk package
This commit is contained in:
@@ -1 +0,0 @@
|
||||
export { resolveMemoryBackendConfig } from "openclaw/plugin-sdk/memory-core-host-engine-storage";
|
||||
@@ -1 +0,0 @@
|
||||
export { buildFileEntry } from "openclaw/plugin-sdk/memory-core-host-engine-storage";
|
||||
@@ -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;
|
||||
|
||||
@@ -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-"));
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
export { loadSqliteVecExtension } from "openclaw/plugin-sdk/memory-core-host-engine-storage";
|
||||
@@ -1 +0,0 @@
|
||||
export { requireNodeSqlite } from "openclaw/plugin-sdk/memory-core-host-engine-storage";
|
||||
26
package.json
26
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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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", () => {
|
||||
@@ -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;
|
||||
@@ -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<unknown>) => await run()),
|
||||
}));
|
||||
|
||||
@@ -10,7 +10,7 @@ vi.mock("./post-json.js", () => ({
|
||||
|
||||
describe("postJsonWithRetry", () => {
|
||||
let retryAsyncMock: ReturnType<
|
||||
typeof vi.mocked<typeof import("../../infra/retry.js").retryAsync>
|
||||
typeof vi.mocked<typeof import("../../../../src/infra/retry.js").retryAsync>
|
||||
>;
|
||||
let postJsonMock: ReturnType<typeof vi.mocked<typeof import("./post-json.js").postJson>>;
|
||||
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);
|
||||
@@ -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<T>(params: {
|
||||
@@ -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;
|
||||
@@ -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");
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
@@ -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";
|
||||
@@ -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,
|
||||
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
@@ -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,
|
||||
@@ -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";
|
||||
@@ -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: {
|
||||
@@ -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,
|
||||
@@ -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"));
|
||||
});
|
||||
@@ -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";
|
||||
@@ -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<ReturnType<AuthModule["resolveApiKeyForProvider"]>>;
|
||||
|
||||
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"));
|
||||
});
|
||||
|
||||
@@ -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 {
|
||||
@@ -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";
|
||||
@@ -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<T>(params: {
|
||||
@@ -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;
|
||||
@@ -1,4 +1,4 @@
|
||||
import { createSubsystemLogger } from "../../logging/subsystem.js";
|
||||
import { createSubsystemLogger } from "../../../../src/logging/subsystem.js";
|
||||
|
||||
const log = createSubsystemLogger("memory");
|
||||
|
||||
@@ -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 = {
|
||||
@@ -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";
|
||||
|
||||
@@ -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();
|
||||
@@ -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);
|
||||
@@ -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");
|
||||
@@ -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);
|
||||
|
||||
@@ -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) => {
|
||||
5
packages/memory-host-sdk/src/multimodal.ts
Normal file
5
packages/memory-host-sdk/src/multimodal.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export {
|
||||
isMemoryMultimodalEnabled,
|
||||
normalizeMemoryMultimodalSettings,
|
||||
type MemoryMultimodalSettings,
|
||||
} from "./host/multimodal.js";
|
||||
1
packages/memory-host-sdk/src/query.ts
Normal file
1
packages/memory-host-sdk/src/query.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { extractKeywords, isQueryStopWordToken } from "./host/query-expansion.js";
|
||||
@@ -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";
|
||||
|
||||
4
packages/memory-host-sdk/src/secret.ts
Normal file
4
packages/memory-host-sdk/src/secret.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export {
|
||||
hasConfiguredMemorySecretInput,
|
||||
resolveMemorySecretInputString,
|
||||
} from "./host/secret-input.js";
|
||||
6
packages/memory-host-sdk/src/status.ts
Normal file
6
packages/memory-host-sdk/src/status.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export {
|
||||
resolveMemoryCacheSummary,
|
||||
resolveMemoryFtsState,
|
||||
resolveMemoryVectorState,
|
||||
type Tone,
|
||||
} from "./host/status-format.js";
|
||||
@@ -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",
|
||||
|
||||
@@ -55,6 +55,7 @@ export function loadTestCatalog() {
|
||||
...new Set([
|
||||
...walkTestFiles("src"),
|
||||
...walkTestFiles("extensions"),
|
||||
...walkTestFiles("packages"),
|
||||
...walkTestFiles("test"),
|
||||
...walkTestFiles(path.join("ui", "src", "ui")),
|
||||
]),
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 };
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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";
|
||||
1
src/plugin-sdk/memory-core-host-multimodal.ts
Normal file
1
src/plugin-sdk/memory-core-host-multimodal.ts
Normal file
@@ -0,0 +1 @@
|
||||
export * from "../../packages/memory-host-sdk/src/multimodal.js";
|
||||
1
src/plugin-sdk/memory-core-host-query.ts
Normal file
1
src/plugin-sdk/memory-core-host-query.ts
Normal file
@@ -0,0 +1 @@
|
||||
export * from "../../packages/memory-host-sdk/src/query.js";
|
||||
@@ -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";
|
||||
1
src/plugin-sdk/memory-core-host-secret.ts
Normal file
1
src/plugin-sdk/memory-core-host-secret.ts
Normal file
@@ -0,0 +1 @@
|
||||
export * from "../../packages/memory-host-sdk/src/secret.js";
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user