From 57eb3fc169332058695b40b134399c37095b94cf Mon Sep 17 00:00:00 2001 From: Dark aura Date: Wed, 6 May 2026 07:44:09 +0100 Subject: [PATCH] feat(memory): add Tags and Metadata to SessionMessage for frontmatter support --- pkg/memory/store.go | 8 ++++++++ pkg/memory/store_test.go | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 pkg/memory/store_test.go diff --git a/pkg/memory/store.go b/pkg/memory/store.go index 11526b27c..fe6e6a0ea 100644 --- a/pkg/memory/store.go +++ b/pkg/memory/store.go @@ -6,6 +6,14 @@ import ( "github.com/sipeed/picoclaw/pkg/providers" ) +// SessionMessage represents a message in a session with optional tags and metadata. +type SessionMessage struct { + Role string + Content string + Tags []string + Metadata map[string]interface{} +} + // Store defines an interface for persistent session storage. // Each method is an atomic operation — there is no separate Save() call. type Store interface { diff --git a/pkg/memory/store_test.go b/pkg/memory/store_test.go new file mode 100644 index 000000000..bfa756764 --- /dev/null +++ b/pkg/memory/store_test.go @@ -0,0 +1,23 @@ +package memory + +import ( + "testing" +) + +func TestSessionMessage_WithFrontmatter(t *testing.T) { + msg := SessionMessage{ + Role: "user", + Content: "test content", + Tags: []string{"coding", "golang"}, + Metadata: map[string]interface{}{ + "session_id": "abc123", + "model": "claude-sonnet-4", + }, + } + if len(msg.Tags) != 2 { + t.Errorf("expected 2 tags, got %d", len(msg.Tags)) + } + if msg.Metadata["session_id"] != "abc123" { + t.Errorf("expected session_id in metadata") + } +} \ No newline at end of file