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