From ef268ab0c77ef653c99a15b9e41c5762e22f89ce Mon Sep 17 00:00:00 2001 From: omigamedev Date: Tue, 3 Feb 2026 01:09:43 +0100 Subject: [PATCH] Show metadata sections in node panel and preserve them during merge - Render metadata.sections as labeled blocks in NodePanel sidebar - Fix memory_merge to carry forward metadata from merged nodes --- portal/src/components/NodePanel.tsx | 12 ++++++++++++ src/mcp/index.ts | 4 +++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/portal/src/components/NodePanel.tsx b/portal/src/components/NodePanel.tsx index 7b8573c..63d7c7a 100644 --- a/portal/src/components/NodePanel.tsx +++ b/portal/src/components/NodePanel.tsx @@ -90,6 +90,18 @@ export default function NodePanel({ + {node.metadata?.sections?.length > 0 && ( +
+ + {node.metadata.sections.map((s: { label: string; body: string }, i: number) => ( +
+
{s.label}
+
{s.body}
+
+ ))} +
+ )} +
{node.connections.outgoing.length === 0 && node.connections.incoming.length === 0 && ( diff --git a/src/mcp/index.ts b/src/mcp/index.ts index 09a20b6..7314abf 100644 --- a/src/mcp/index.ts +++ b/src/mcp/index.ts @@ -160,7 +160,9 @@ server.tool( const allTags = [...new Set(validNodes.flatMap(n => n.tags))]; const mergedKind = (kind as NodeKind) ?? validNodes[0].kind; - const merged = await addNode({ kind: mergedKind, title, content, tags: allTags }); + // Merge metadata from all nodes (last wins for conflicting keys) + const mergedMetadata = validNodes.reduce((acc, n) => ({ ...acc, ...n.metadata }), {} as Record); + const merged = await addNode({ kind: mergedKind, title, content, tags: allTags, metadata: mergedMetadata }); const oldIds = new Set(validNodes.map(n => n.id)); // Relink edges from old nodes to merged node