Skip to content

Commit 268ebda

Browse files
committed
fix(memory): preserve sidecar capability hooks
1 parent 6665742 commit 268ebda

3 files changed

Lines changed: 55 additions & 4 deletions

File tree

extensions/memory-lancedb/index.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import { randomUUID } from "node:crypto";
1111
import type * as LanceDB from "@lancedb/lancedb";
1212
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-contracts";
1313
import type { MemoryEmbeddingProvider } from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
14-
import { getMemoryCapabilityRegistration } from "openclaw/plugin-sdk/memory-host-core";
1514
import { resolveLivePluginConfigObject } from "openclaw/plugin-sdk/plugin-config-runtime";
1615
import { ensureGlobalUndiciEnvProxyDispatcher } from "openclaw/plugin-sdk/runtime-env";
1716
import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -695,9 +694,7 @@ export default definePluginEntry({
695694
};
696695

697696
api.logger.info(`memory-lancedb: plugin registered (db: ${resolvedDbPath}, lazy init)`);
698-
const existingMemoryCapability = getMemoryCapabilityRegistration()?.capability;
699697
api.registerMemoryCapability?.({
700-
...existingMemoryCapability,
701698
publicArtifacts: {
702699
async listArtifacts(params) {
703700
const { listMemoryHostPublicArtifacts } = await loadMemoryHostCoreModule();

src/plugins/memory-state.test.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,46 @@ describe("memory plugin state", () => {
204204
]);
205205
});
206206

207+
it("preserves sidecar runtime fields when a memory plugin adds public artifacts only", async () => {
208+
const runtime = createMemoryRuntime();
209+
const flushPlanResolver = () => createMemoryFlushPlan("memory/sidecar.md");
210+
211+
registerMemoryCapability("memory-core", {
212+
flushPlanResolver,
213+
runtime,
214+
});
215+
registerMemoryCapability("memory-lancedb", {
216+
publicArtifacts: {
217+
async listArtifacts() {
218+
return [
219+
{
220+
kind: "memory-root",
221+
workspaceDir: "/tmp/workspace",
222+
relativePath: "MEMORY.md",
223+
absolutePath: "/tmp/workspace/MEMORY.md",
224+
agentIds: ["main"],
225+
contentType: "markdown" as const,
226+
},
227+
];
228+
},
229+
},
230+
});
231+
232+
expect(resolveMemoryFlushPlan({})?.relativePath).toBe("memory/sidecar.md");
233+
expect(getMemoryRuntime()).toBe(runtime);
234+
expect(getMemoryCapabilityRegistration()?.pluginId).toBe("memory-lancedb");
235+
await expect(listActiveMemoryPublicArtifacts({ cfg: {} as never })).resolves.toEqual([
236+
{
237+
kind: "memory-root",
238+
workspaceDir: "/tmp/workspace",
239+
relativePath: "MEMORY.md",
240+
absolutePath: "/tmp/workspace/MEMORY.md",
241+
agentIds: ["main"],
242+
contentType: "markdown",
243+
},
244+
]);
245+
});
246+
207247
it("passes citations mode through to the prompt builder", () => {
208248
registerMemoryPromptSection(({ citationsMode }) => [
209249
`citations: ${citationsMode ?? "default"}`,

src/plugins/memory-state.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,21 @@ export function registerMemoryCapability(
166166
pluginId: string,
167167
capability: MemoryPluginCapability,
168168
): void {
169-
memoryPluginState.capability = { pluginId, capability: { ...capability } };
169+
const existingCapability = memoryPluginState.capability?.capability;
170+
// A selected memory plugin can add bridge artifacts while memory-core owns sidecar runtime hooks.
171+
const shouldPreserveExisting =
172+
existingCapability &&
173+
Boolean(capability.publicArtifacts) &&
174+
!capability.promptBuilder &&
175+
!capability.flushPlanResolver &&
176+
!capability.runtime;
177+
memoryPluginState.capability = {
178+
pluginId,
179+
capability: {
180+
...(shouldPreserveExisting ? existingCapability : {}),
181+
...capability,
182+
},
183+
};
170184
}
171185

172186
function patchMemoryCapability(pluginId: string, patch: MemoryPluginCapability): void {

0 commit comments

Comments
 (0)