UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

102 lines (101 loc) 4.66 kB
import { b as resolveSessionAgentIdsStrict } from "./agent-scope-DbtJyKUL.js"; import { n as resolveMemorySearchIndexConfig } from "./memory-search-DTACVvxE.js"; import "./agent-scope-runtime-h57Nypqc.js"; import "./memory-core-host-runtime-core-5HBGxdZe.js"; //#region extensions/memory-core/src/memory-tool-contract.ts const MemorySearchSchema = { type: "object", properties: { query: { type: "string" }, maxResults: { type: "integer", minimum: 1 }, minScore: { type: "number" }, corpus: { type: "string", enum: [ "memory", "wiki", "all", "sessions" ] } }, required: ["query"], additionalProperties: false }; const MemoryGetSchema = { type: "object", properties: { path: { type: "string" }, from: { type: "integer", minimum: 1 }, lines: { type: "integer", minimum: 1 }, corpus: { type: "string", enum: [ "memory", "wiki", "all" ] } }, required: ["path"], additionalProperties: false }; function resolveMemorySourceContract(settings) { const files = ["MEMORY.md, USER.md, Markdown files recursively under memory/", settings.extraPaths.length > 0 ? "configured extra paths" : ""].filter(Boolean).join(", "); return { files, search: settings.searchSources.includes("sessions") ? `${files}, indexed session transcripts` : files }; } function resolveMemoryToolContext(options) { const cfg = options.getConfig ? options.getConfig() : options.config; if (!cfg) return null; const { sessionAgentId: agentId } = resolveSessionAgentIdsStrict({ sessionKey: options.agentSessionKey, config: cfg, agentId: options.agentId }); const settings = resolveMemorySearchIndexConfig(cfg, agentId); return settings ? { cfg, agentId, settings, sources: resolveMemorySourceContract(settings) } : null; } const SEARCH_CORPUS_OUTCOME_GUIDANCE = "Corpus outcomes cover each requested corpus; a corpus warning means results are partial and must be surfaced to the user."; const GET_READ_OUTCOME_GUIDANCE = "status=ok means the requested excerpt was read; status=not_found means every requested available corpus missed."; const MEMORY_SEARCH_TOOL_CONTRACT = { label: "Memory Search", name: "memory_search", parameters: MemorySearchSchema, describe: ({ search }) => `Mandatory recall step: semantically search ${search} before answering questions about prior work, decisions, dates, people, preferences, or todos. Optional \`corpus=wiki\` or \`corpus=all\` also searches registered compiled-wiki supplements. \`corpus=memory\` restricts hits to indexed memory files (excludes session transcript chunks from ranking). \`corpus=sessions\` restricts hits to the session corpus under the same visibility rules as session history tools. ${SEARCH_CORPUS_OUTCOME_GUIDANCE} If response has disabled=true or stale=true, tell the user and include the warning/action guidance.` }; const MEMORY_GET_TOOL_CONTRACT = { label: "Memory Get", name: "memory_get", parameters: MemoryGetSchema, describe: ({ files }) => `Safe exact excerpt read from ${files}. Defaults to a bounded excerpt when lines are omitted and includes truncation/continuation info when more content exists. \`corpus=wiki\` reads registered compiled-wiki supplements. ${GET_READ_OUTCOME_GUIDANCE} ${SEARCH_CORPUS_OUTCOME_GUIDANCE}` }; function buildMemoryPromptSection({ availableTools, citationsMode, sources }) { const hasMemorySearch = availableTools.has("memory_search"); const hasMemoryGet = availableTools.has("memory_get"); if (!hasMemorySearch && !hasMemoryGet) return []; return [ "## Memory Recall", hasMemorySearch ? `Before answering anything about prior work, decisions, dates, people, preferences, or todos: run memory_search on ${sources.search}${hasMemoryGet ? "; then use memory_get to pull only the needed lines" : ""}. ${SEARCH_CORPUS_OUTCOME_GUIDANCE}${hasMemoryGet ? ` For memory_get, ${GET_READ_OUTCOME_GUIDANCE}` : ""} If low confidence after search, say you checked.` : `Before answering anything about prior work, decisions, dates, people, preferences, or todos that point to a specific source in ${sources.files}: run memory_get to pull only the needed lines. ${GET_READ_OUTCOME_GUIDANCE} ${SEARCH_CORPUS_OUTCOME_GUIDANCE} If low confidence after reading, say you checked.`, citationsMode === "off" ? "Citations are disabled: do not mention file paths or line numbers in replies unless the user explicitly asks." : "Citations: include Source: <path#line> when it helps the user verify memory snippets.", "" ]; } //#endregion export { resolveMemoryToolContext as i, MEMORY_SEARCH_TOOL_CONTRACT as n, buildMemoryPromptSection as r, MEMORY_GET_TOOL_CONTRACT as t };