zettelkasten-memory-server
Version:
基于 Zettelkasten 记忆片段盒方法的 MCP 记忆服务器 v1.6.X
50 lines • 2.66 kB
JavaScript
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