UNPKG

zettelkasten-memory-server

Version:

基于 Zettelkasten 记忆片段盒方法的 MCP 记忆服务器 v1.6.X

50 lines 2.66 kB
import { checkLatestContent, resetMemoryAccessCounter, removeLatestContentFetched } from './utils.js'; /** * 插入链接处理器 */ function createInsertLinkAtHandler(manager) { return async (args) => { try { const { sourceFragmentName, targetFragmentName, linePosition, anchorText, conversationId } = args; if (!sourceFragmentName || typeof sourceFragmentName !== 'string') { throw new Error('sourceFragmentName is required and must be a string'); } if (!targetFragmentName || typeof targetFragmentName !== 'string') { throw new Error('targetFragmentName is required and must be a string'); } // 验证 conversationId 参数 if (!conversationId || typeof conversationId !== 'string') { throw new Error('conversationId is required and must be a string'); } await checkLatestContent(manager, sourceFragmentName, conversationId); await manager.insertLinkAt(sourceFragmentName, targetFragmentName, linePosition, anchorText); // 编辑后移除已获取最新内容标记(源文件和插入目标) removeLatestContentFetched(sourceFragmentName, conversationId); removeLatestContentFetched(targetFragmentName, conversationId); // 重置读取计数器 resetMemoryAccessCounter(sourceFragmentName, conversationId); resetMemoryAccessCounter(targetFragmentName, conversationId); const positionText = linePosition !== undefined ? (linePosition === 0 ? '末尾' : linePosition > 0 ? `第${linePosition}行` : `倒数第${Math.abs(linePosition)}行`) : '末尾'; const anchorInfo = anchorText ? ` (锚文本: "${anchorText}")` : ''; return { content: [{ type: "text", text: `✅ **链接插入成功**\n\n在记忆片段 [[${sourceFragmentName}]] 的${positionText}插入了指向 [[${targetFragmentName}]] 的链接${anchorInfo}。` }] }; } catch (error) { return { content: [{ type: "text", text: `❌ 链接插入失败: ${error && error.message ? error.message : String(error)}\n\n💡 **提示**:请检查源记忆片段是否存在,行号位置是否有效。` }] }; } }; } export default createInsertLinkAtHandler; //# sourceMappingURL=createInsertLinkAtHandler.js.map