import type { MemoryPromptSectionBuilder } from "openclaw/plugin-sdk/memory-core"; import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry"; export const buildPromptSection: MemoryPromptSectionBuilder = ({ availableTools, citationsMode, }) => { if (!availableTools.has("memory_search") && !availableTools.has("memory_get")) { return []; } const lines = [ "## Memory Recall", "Before answering anything about prior work, decisions, dates, people, preferences, or todos: run memory_search on MEMORY.md + memory/*.md; then use memory_get to pull only the needed lines. If low confidence after search, say you checked.", ]; if (citationsMode === "off") { lines.push( "Citations are disabled: do not mention file paths or line numbers in replies unless the user explicitly asks.", ); } else { lines.push( "Citations: include Source: when it helps the user verify memory snippets.", ); } lines.push(""); return lines; }; export default definePluginEntry({ id: "memory-core", name: "Memory (Core)", description: "File-backed memory search tools and CLI", kind: "memory", register(api) { api.registerMemoryPromptSection(buildPromptSection); api.registerTool( (ctx) => { const memorySearchTool = api.runtime.tools.createMemorySearchTool({ config: ctx.config, agentSessionKey: ctx.sessionKey, }); const memoryGetTool = api.runtime.tools.createMemoryGetTool({ config: ctx.config, agentSessionKey: ctx.sessionKey, }); if (!memorySearchTool || !memoryGetTool) { return null; } return [memorySearchTool, memoryGetTool]; }, { names: ["memory_search", "memory_get"] }, ); api.registerCli( ({ program }) => { api.runtime.tools.registerMemoryCli(program); }, { commands: ["memory"] }, ); }, });